diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/response/SysMenuResponse.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/response/SysMenuResponse.java new file mode 100644 index 000000000..623885518 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/response/SysMenuResponse.java @@ -0,0 +1,97 @@ +package cn.stylefeng.roses.kernel.system.pojo.menu.response; + +import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; +import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode; +import lombok.Data; + +import java.util.List; + +/** + * 系统菜单 + * + * @author majianguo + * @date 2021/1/7 15:18 + */ +@Data +public class SysMenuResponse implements AbstractTreeNode { + + /** + * 主键 + */ + private Long menuId; + + /** + * 父id,顶级节点的父id是-1 + */ + private Long menuParentId; + + /** + * 父id集合,中括号包住,逗号分隔 + */ + private String menuPids; + + /** + * 菜单的名称 + */ + private String menuName; + + /** + * 应用编码 + */ + private String appCode; + + /** + * 是否可见:Y-是,N-否 + */ + private String visible; + + /** + * 路由地址,浏览器显示的URL,例如/menu,适用于antd vue版本 + */ + private String antdvRouter; + + /** + * 前端组件名,适用于antd vue版本 + */ + private String antdvComponent; + + /** + * 图标,适用于antd vue版本 + */ + private String antdvIcon; + + /** + * 外部链接打开方式:1-内置打开外链,2-新页面外链,适用于antd vue版本 + */ + private Integer antdvLinkOpenType; + + /** + * 外部链接地址 + */ + private String antdvLinkUrl; + + /** + * 子节点(表中不存在,用于构造树) + */ + private List children; + + /** + * 菜单可以被那些角色访问 + */ + private List roles; + + @Override + public String getNodeId() { + return menuId.toString(); + } + + @Override + public String getNodeParentId() { + return menuParentId.toString(); + } + + @Override + public void setChildrenNodes(List childrenNodes) { + this.children = childrenNodes; + } +} diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java index ec622b13f..7bcdd01d2 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java @@ -7,6 +7,7 @@ import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest; +import cn.stylefeng.roses.kernel.system.pojo.menu.response.SysMenuResponse; import cn.stylefeng.roses.kernel.system.pojo.ztree.ZTreeNode; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; @@ -141,4 +142,16 @@ public class SysMenuController { return new SuccessResponseData(sysMenuService.getAntDVueIndexMenus(sysMenuRequest.getAppCode())); } + /** + * 获取系统所有菜单 + * + * @author majianguo + * @date 2021/1/7 15:17 + */ + @GetResource(name = "获取菜单列表(包含菜单可以被那些角色访问)", path = "/sysMenu/getSystemAllMenus", requiredPermission = false) + public ResponseData getSystemAllMenus() { + List sysMenuResponses = sysMenuService.getSystemAllMenus(); + return new SuccessResponseData(sysMenuResponses); + } + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/SysMenuMapper.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/SysMenuMapper.java index 0872ded56..c71d7e9fb 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/SysMenuMapper.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/SysMenuMapper.java @@ -1,8 +1,11 @@ package cn.stylefeng.roses.kernel.menu.modular.mapper; import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu; +import cn.stylefeng.roses.kernel.system.pojo.menu.response.SysMenuResponse; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; + /** * 系统菜单mapper接口 * @@ -10,4 +13,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @date 2020/3/13 16:05 */ public interface SysMenuMapper extends BaseMapper { + + /** + * 获取系统所有菜单 + * + * @author majianguo + * @date 2021/1/7 15:27 + */ + List getSystemAllMenus(); } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/mapping/SysMenuMapper.xml b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/mapping/SysMenuMapper.xml index faa60a0ba..21b4d08f8 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/mapping/SysMenuMapper.xml +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/mapper/mapping/SysMenuMapper.xml @@ -1,5 +1,47 @@ - + + + + + + + + + + + + + + + + + + + + + + diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java index d096ede86..8fbe04a93 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java @@ -29,6 +29,7 @@ import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode; import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus; import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode; +import cn.stylefeng.roses.kernel.system.pojo.menu.response.SysMenuResponse; import cn.stylefeng.roses.kernel.system.pojo.ztree.ZTreeNode; import com.baomidou.mybatisplus.extension.service.IService; @@ -161,4 +162,11 @@ public interface SysMenuService extends IService { */ List treeForGrant(SysMenuRequest sysMenuRequest); + /** + * 获取系统所有菜单 + * + * @author majianguo + * @date 2021/1/7 15:24 + */ + List getSystemAllMenus(); } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java index 3fcea7678..42b4bd4ed 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java @@ -54,6 +54,7 @@ import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode; import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus; import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode; +import cn.stylefeng.roses.kernel.system.pojo.menu.response.SysMenuResponse; import cn.stylefeng.roses.kernel.system.pojo.ztree.ZTreeNode; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -130,15 +131,12 @@ public class SysMenuServiceImpl extends ServiceImpl impl Long id = sysMenuRequest.getMenuId(); // 获取所有子级的节点id - Set childIdList = this.dbOperatorApi.findSubListByParentId( - "sys_menu", "menu_pids", "menu_id", id); + Set childIdList = this.dbOperatorApi.findSubListByParentId("sys_menu", "menu_pids", "menu_id", id); childIdList.add(id); // 逻辑删除,设置删除标识 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper - .in(SysMenu::getMenuId, childIdList) - .set(SysMenu::getDelFlag, YesOrNotEnum.Y.getCode()); + updateWrapper.in(SysMenu::getMenuId, childIdList).set(SysMenu::getDelFlag, YesOrNotEnum.Y.getCode()); this.update(updateWrapper); } @@ -220,10 +218,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl // 获取菜单列表 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysMenu::getMenuId, menuIdList) - .eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()) - .eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()) - .orderByAsc(SysMenu::getMenuSort); + queryWrapper.in(SysMenu::getMenuId, menuIdList).eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()).eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()).orderByAsc(SysMenu::getMenuSort); // 如果应用编码不为空,则拼接应用编码 if (StrUtil.isNotBlank(appCode)) { @@ -292,6 +287,12 @@ public class SysMenuServiceImpl extends ServiceImpl impl return new DefaultTreeBuildFactory().doTreeBuild(menuTreeNodeList); } + @Override + public List getSystemAllMenus() { + List responses = this.baseMapper.getSystemAllMenus(); + return new DefaultTreeBuildFactory().doTreeBuild(responses); + } + @Override public boolean hasMenu(String appCode) { SysMenuRequest sysMenuRequest = new SysMenuRequest(); @@ -328,14 +329,11 @@ public class SysMenuServiceImpl extends ServiceImpl impl */ private String createPids(Long pid) { if (pid.equals(SystemConstants.DEFAULT_PARENT_ID)) { - return SymbolConstant.LEFT_SQUARE_BRACKETS + SystemConstants.DEFAULT_PARENT_ID + SymbolConstant.RIGHT_SQUARE_BRACKETS - + SymbolConstant.COMMA; + return SymbolConstant.LEFT_SQUARE_BRACKETS + SystemConstants.DEFAULT_PARENT_ID + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA; } else { //获取父菜单 SysMenu parentMenu = this.getById(pid); - return parentMenu.getMenuPids() - + SymbolConstant.LEFT_SQUARE_BRACKETS + pid + SymbolConstant.RIGHT_SQUARE_BRACKETS - + SymbolConstant.COMMA; + return parentMenu.getMenuPids() + SymbolConstant.LEFT_SQUARE_BRACKETS + pid + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA; } } @@ -456,11 +454,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl if (updateSubPidsFlag) { list.forEach(child -> { // 子节点pids组成 = 当前菜单新pids + 当前菜单id + 子节点自己的pids后缀 - String oldParentCodesPrefix = oldPids + SymbolConstant.LEFT_SQUARE_BRACKETS + oldMenu.getMenuId() - + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA; + String oldParentCodesPrefix = oldPids + SymbolConstant.LEFT_SQUARE_BRACKETS + oldMenu.getMenuId() + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA; String oldParentCodesSuffix = child.getMenuPids().substring(oldParentCodesPrefix.length()); - String menuParentCodes = newPids + SymbolConstant.LEFT_SQUARE_BRACKETS + oldMenu.getMenuId() - + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA + oldParentCodesSuffix; + String menuParentCodes = newPids + SymbolConstant.LEFT_SQUARE_BRACKETS + oldMenu.getMenuId() + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA + oldParentCodesSuffix; child.setMenuPids(menuParentCodes); }); }