Skip to content

Commit

Permalink
feat: 修改 menu 列表为树状全部返回
Browse files Browse the repository at this point in the history
  • Loading branch information
cadecode committed Nov 26, 2023
1 parent 5a2b836 commit 8e499d0
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 109 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,14 @@
*/
public class SysMenuVo {

@Data
@EqualsAndHashCode(callSuper = true)
@Data
public static class SysMenuRolesReqVo extends PageParams {
private String routeName;
private String menuName;
private List<Long> roleIdList;
private Boolean enableFlag;
private Long parentId;
private Boolean hiddenFlag;
}

@Data
@EqualsAndHashCode(callSuper = true)
public static class SysMenuPageReqVo extends PageParams {
private String routeName;
private String menuName;
private Boolean enableFlag;
private Long parentId;
private Boolean hiddenFlag;
private Boolean leafFlag;
}

@Data
Expand Down Expand Up @@ -89,93 +77,56 @@ public static class SysMenuAddReqVo {
@Data
public static class SysMenuTreeResVo {
private Long id;

private Long parentId;

private String routeName;

private String routePath;

private String componentPath;

private String menuName;

private Boolean leafFlag;

private Boolean hiddenFlag;

private Boolean cacheFlag;

private String icon;

private List<SysMenuTreeResVo> children = new ArrayList<>();
}

@Data
public static class SysMenuRolesResVo {
private Long id;

private Long parentId;

private String routeName;

private String routePath;

private String componentPath;

private String menuName;

private Boolean leafFlag;

private String icon;

private Integer orderNum;

private Boolean enableFlag;

private Boolean hiddenFlag;

private Boolean cacheFlag;

private List<String> roles;

private Date createTime;

private Date updateTime;

private String updateUser;

private List<String> roles;
private List<SysMenuRolesResVo> children = new ArrayList<>();
}

@Data
public static class SysMenuPageResVo {
public static class SysMenuQueryResVo {
private Long id;

private Long parentId;

private String routeName;

private String routePath;

private String componentPath;

private String menuName;

private Boolean leafFlag;

private String icon;

private Integer orderNum;

private Boolean enableFlag;

private Boolean hiddenFlag;

private Boolean cacheFlag;

private Date createTime;

private Date updateTime;

private String updateUser;
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.github.cadecode.uniboot.framework.svc.controller;

import cn.hutool.core.util.ObjUtil;
import com.github.cadecode.uniboot.common.core.util.TreeUtil;
import com.github.cadecode.uniboot.common.core.web.response.PageResult;
import com.github.cadecode.uniboot.common.plugin.mybatis.converter.BoolToIntTypeHandler;
import com.github.cadecode.uniboot.framework.base.annotation.ApiFormat;
import com.github.cadecode.uniboot.framework.svc.bean.po.SysMenu;
import com.github.cadecode.uniboot.framework.svc.convert.SysMenuConvert;
import com.github.cadecode.uniboot.framework.svc.service.SysMenuService;
import com.github.cadecode.uniboot.framework.svc.service.SysRoleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
Expand Down Expand Up @@ -47,27 +46,13 @@ public class SysMenuController {
private final SysMenuService sysMenuService;
private final SysRoleService sysRoleService;

@ApiOperation("查询菜单列表")
@PostMapping("page")
public PageResult<SysMenuPageResVo> page(@RequestBody @Valid SysMenuPageReqVo reqVo) {
PageInfo<SysMenu> page = PageHelper.startPage(reqVo.getPageNumber(), reqVo.getPageSize())
.doSelectPageInfo(() -> sysMenuService.lambdaQuery()
.eq(ObjUtil.isNotEmpty(reqVo.getParentId()), SysMenu::getParentId, reqVo.getParentId())
.eq(ObjUtil.isNotEmpty(reqVo.getMenuName()), SysMenu::getMenuName, reqVo.getMenuName())
.eq(ObjUtil.isNotEmpty(reqVo.getRouteName()), SysMenu::getRouteName, reqVo.getRouteName())
.eq(ObjUtil.isNotEmpty(reqVo.getEnableFlag()), SysMenu::getEnableFlag, BoolToIntTypeHandler.mapping(reqVo.getEnableFlag()))
.eq(ObjUtil.isNotEmpty(reqVo.getLeafFlag()), SysMenu::getLeafFlag, BoolToIntTypeHandler.mapping(reqVo.getLeafFlag()))
.eq(ObjUtil.isNotEmpty(reqVo.getHiddenFlag()), SysMenu::getHiddenFlag, BoolToIntTypeHandler.mapping(reqVo.getHiddenFlag()))
.list());
List<SysMenuPageResVo> resVoList = SysMenuConvert.INSTANCE.poToPageVo(page.getList());
return new PageResult<>((int) page.getTotal(), resVoList);
}

@ApiOperation("查询菜单列表(带角色)")
@PostMapping("page_roles_vo")
public PageResult<SysMenuRolesResVo> pageRolesVo(@RequestBody @Valid SysMenuRolesReqVo reqVo) {
PageInfo<SysMenuRolesResVo> rolesVoPage = sysMenuService.pageRolesVo(reqVo);
return new PageResult<>((int) rolesVoPage.getTotal(), rolesVoPage.getList());
List<SysMenuRolesResVo> treeRolesVoList = TreeUtil.listToTree(rolesVoPage.getList(), null,
SysMenuRolesResVo::getId, SysMenuRolesResVo::getParentId, SysMenuRolesResVo::setChildren);
return new PageResult<>((int) rolesVoPage.getTotal(), treeRolesVoList);
}

@ApiOperation("更新菜单启用状态")
Expand Down Expand Up @@ -120,4 +105,14 @@ public boolean delete(@RequestBody @NotEmpty List<Long> menuIdList) {
public List<SysMenuRolesResVo> listRolesVoByMenuIds(@RequestBody @NotEmpty List<Long> menuIdList) {
return sysMenuService.listRolesVoByMenuIds(menuIdList);
}

@ApiOperation("查询菜单列表(搜索建议)")
@PostMapping("list_parent_suggest")
public List<SysMenuQueryResVo> listParentSuggest() {
List<SysMenu> poList = sysMenuService.lambdaQuery()
.select(SysMenu::getId, SysMenu::getParentId, SysMenu::getMenuName, SysMenu::getRouteName, SysMenu::getOrderNum)
.eq(SysMenu::getLeafFlag, BoolToIntTypeHandler.mapping(false))
.list();
return SysMenuConvert.INSTANCE.poToQueryResVo(poList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.github.cadecode.uniboot.framework.svc.bean.po.SysMenu;
import com.github.cadecode.uniboot.framework.svc.bean.vo.SysMenuVo.SysMenuAddReqVo;
import com.github.cadecode.uniboot.framework.svc.bean.vo.SysMenuVo.SysMenuPageResVo;
import com.github.cadecode.uniboot.framework.svc.bean.vo.SysMenuVo.SysMenuQueryResVo;
import com.github.cadecode.uniboot.framework.svc.bean.vo.SysMenuVo.SysMenuTreeResVo;
import com.github.cadecode.uniboot.framework.svc.bean.vo.SysMenuVo.SysMenuUpdateReqVo;
import org.mapstruct.Mapper;
Expand All @@ -26,6 +26,7 @@ public interface SysMenuConvert {
@Mapping(target = "children", ignore = true)
SysMenuTreeResVo poToTreeResVo(SysMenu sysMenu);

@Mapping(target = "parentId", ignore = true)
@Mapping(target = "hiddenFlag", ignore = true)
@Mapping(target = "updateUser", ignore = true)
@Mapping(target = "updateTime", ignore = true)
Expand All @@ -40,5 +41,5 @@ public interface SysMenuConvert {
@Mapping(target = "createTime", ignore = true)
SysMenu voToPo(SysMenuAddReqVo reqVo);

List<SysMenuPageResVo> poToPageVo(List<SysMenu> list);
List<SysMenuQueryResVo> poToQueryResVo(List<SysMenu> list);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import cn.hutool.core.util.ObjUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.cadecode.uniboot.common.core.util.TreeUtil;
import com.github.cadecode.uniboot.framework.svc.bean.po.SysMenu;
import com.github.cadecode.uniboot.framework.svc.bean.vo.SysMenuVo.SysMenuRolesReqVo;
import com.github.cadecode.uniboot.framework.svc.bean.vo.SysMenuVo.SysMenuRolesResVo;
Expand All @@ -14,7 +15,6 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -42,7 +42,7 @@ public List<SysMenuTreeResVo> listTreeVoByRoles(List<String> roleCodes) {
.filter(m -> ObjUtil.equal(m.getEnableFlag(), true))
.map(SysMenuConvert.INSTANCE::poToTreeResVo)
.collect(Collectors.toList());
return generateMenuTree(menuTreeVoList, null);
return TreeUtil.listToTree(menuTreeVoList, null, SysMenuTreeResVo::getId, SysMenuTreeResVo::getParentId, SysMenuTreeResVo::setChildren);
}

@Override
Expand All @@ -60,28 +60,4 @@ public PageInfo<SysMenuRolesResVo> pageRolesVo(SysMenuRolesReqVo reqVo) {
public List<SysMenuRolesResVo> listRolesVoByMenuIds(List<Long> menuIds) {
return sysMenuMapper.selectRolesVoByMenuIds(menuIds);
}

private List<SysMenuTreeResVo> generateMenuTree(List<SysMenuTreeResVo> menus, Long rootId) {
List<SysMenuTreeResVo> resultList = new ArrayList<>();
menus.forEach(menu -> {
// 确定下父亲
if (ObjUtil.notEqual(menu.getParentId(), rootId)) {
return;
}
menus.forEach(m -> {
// 比一下是不是儿子
if (ObjUtil.notEqual(m.getParentId(), menu.getId())) {
return;
}
// 拿儿子列表
List<SysMenuTreeResVo> children = menu.getChildren();
// 存儿子
m.setChildren(generateMenuTree(menus, m.getId()));
children.add(m);
});
resultList.add(menu);
});
return resultList;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,6 @@
LEFT JOIN sys_role sr ON srm.role_id = sr.id
<if test="req != null">
<where>
<choose>
<when test="req.parentId == null">
sm.parent_id is null
</when>
<otherwise>
sm.parent_id = #{req.parentId}
</otherwise>
</choose>
<if test="req.routeName != null and req.routeName.length > 0">
<bind name="bindRouteName" value="'%' + req.routeName + '%'"/>
AND sm.route_name like #{bindRouteName}
Expand Down

0 comments on commit 8e499d0

Please sign in to comment.