From 9367bc47461bb3b0450984e34b6dbe0b77c80178 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Tue, 23 Mar 2021 22:01:28 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.0.2=E3=80=91=E6=9B=B4=E6=96=B0antdv?= =?UTF-8?q?=E7=9A=84=E8=8F=9C=E5=8D=95=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/pojo/menu/antd/AntdSysMenuDTO.java | 44 ++++----- .../menu/controller/SysMenuController.java | 5 +- .../system/modular/menu/entity/SysMenu.java | 2 +- .../menu/factory/AntdMenusFactory.java | 97 +++++++------------ .../modular/menu/mapper/SysMenuMapper.java | 15 --- .../menu/mapper/mapping/SysMenuMapper.xml | 36 ------- .../menu/service/impl/SysMenuServiceImpl.java | 17 +++- 7 files changed, 72 insertions(+), 144 deletions(-) diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/antd/AntdSysMenuDTO.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/antd/AntdSysMenuDTO.java index 4117fb132..697fb934d 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/antd/AntdSysMenuDTO.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/antd/AntdSysMenuDTO.java @@ -24,58 +24,52 @@ */ package cn.stylefeng.roses.kernel.system.api.pojo.menu.antd; -import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; import lombok.Data; import java.util.List; /** - * 封装antd vue需要的菜单信息,service对外输出的对象 + * 封装antd vue需要的dto * - * @author majianguo - * @date 2021/1/7 15:18 + * @author fengshuonan + * @date 2021/3/23 21:26 */ @Data public class AntdSysMenuDTO { - /** - * 主键 - */ - private Long menuId; - - /** - * 父id,顶级节点的父id是-1 - */ - private Long menuParentId; - /** * 菜单的名称 */ - private String menuName; + private String title; /** - * 路由地址,浏览器显示的URL,例如/menu,适用于antd vue版本 + * 菜单的图标 */ - private String antdvRouter; + private String icon; /** - * 图标,适用于antd vue版本 + * 路由地址(要以/开头),必填 */ - private String antdvIcon; + private String path; /** - * 是否显示,Y-显示,N-不显示 + * 组件地址(组件要放在view目录下),父级可以省略 */ - private String visible; + private String component; /** - * 子节点(表中不存在,用于构造树) + * 为true只注册路由不显示在左侧菜单(比如独立的添加页面) */ - private List children; + private Boolean hide; /** - * 菜单可以被那些角色访问 + * 比如修改页面不在侧边栏,打开后侧边栏就没有选中了,这个可以配置选中地址 */ - private List roles; + private String uid; + + /** + * 子级 + */ + private List children; } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java index b5c807356..1b4095a28 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java @@ -32,10 +32,8 @@ import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO; -import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuItem; import cn.stylefeng.roses.kernel.system.api.pojo.menu.layui.LayuiMenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; -import cn.stylefeng.roses.kernel.system.modular.menu.factory.AntdMenusFactory; import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; @@ -146,8 +144,7 @@ public class SysMenuController { @GetResource(name = "获取系统所有菜单(适用于登录后获取左侧菜单)(适配antd vue版本)", path = "/sysMenu/getLeftMenusAntdv", requiredPermission = false) public ResponseData getLeftMenusAntdv() { List sysMenuResponses = sysMenuService.getLeftMenusAntdv(); - List totalMenus = AntdMenusFactory.createTotalMenus(sysMenuResponses); - return new SuccessResponseData(totalMenus); + return new SuccessResponseData(sysMenuResponses); } /** diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenu.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenu.java index fc0b343b7..48b268518 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenu.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/entity/SysMenu.java @@ -159,7 +159,7 @@ public class SysMenu extends BaseEntity implements AbstractTreeNode { * 子节点(表中不存在,用于构造树) */ @TableField(exist = false) - private List children; + private List children; /** * 应用名称 diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/factory/AntdMenusFactory.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/factory/AntdMenusFactory.java index 915d051f3..da75de4e8 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/factory/AntdMenusFactory.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/factory/AntdMenusFactory.java @@ -24,15 +24,13 @@ */ package cn.stylefeng.roses.kernel.system.modular.menu.factory; -import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; +import cn.hutool.core.util.ObjectUtil; import cn.stylefeng.roses.kernel.rule.constants.TreeConstants; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory; -import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu; import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdMenuSelectTreeNode; import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO; -import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuAuthorityItem; -import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuItem; +import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu; import java.util.ArrayList; import java.util.List; @@ -51,66 +49,13 @@ public class AntdMenusFactory { * @author fengshuonan * @date 2021/1/7 18:17 */ - public static List createTotalMenus(List sysMenuRespons) { - - ArrayList antdvMenuItems = new ArrayList<>(sysMenuRespons.size()); - - // 实体转化 - for (AntdSysMenuDTO antdSysMenuDTO : sysMenuRespons) { - AntdvMenuItem antdvMenuItem = new AntdvMenuItem(); - - // 填充id pid name用于构建树 - antdvMenuItem.setMenuId(antdSysMenuDTO.getMenuId()); - antdvMenuItem.setMenuParentId(antdSysMenuDTO.getMenuParentId()); - antdvMenuItem.setName(antdSysMenuDTO.getMenuName()); - - // 填充路由等信息 - antdvMenuItem.setRouter(antdSysMenuDTO.getAntdvRouter()); - antdvMenuItem.setIcon(antdSysMenuDTO.getAntdvIcon()); - - // 填充是否隐藏 - antdvMenuItem.setInvisible(YesOrNotEnum.N.getCode().equals(antdSysMenuDTO.getVisible())); - - // 填充哪个角色绑定了这个菜单 - List roles = antdSysMenuDTO.getRoles(); - AntdvMenuAuthorityItem antdvAuthorityItem = new AntdvMenuAuthorityItem(); - if (roles != null && roles.size() > 0) { - ArrayList auths = new ArrayList<>(); - for (SimpleRoleInfo role : roles) { - auths.add(role.getRoleCode()); - } - antdvAuthorityItem.setPermission(auths); - antdvAuthorityItem.setRole(auths); - antdvMenuItem.setAuthority(antdvAuthorityItem); - } - - antdvMenuItems.add(antdvMenuItem); - } - - // 加入根节点 - antdvMenuItems.add(createAntdVMenuRoot()); + public static List createTotalMenus(List sysMenuList) { // 构造菜单树 - return new DefaultTreeBuildFactory(TreeConstants.VIRTUAL_ROOT_PARENT_ID.toString()).doTreeBuild(antdvMenuItems); - } + List treeStructMenu = new DefaultTreeBuildFactory(TreeConstants.DEFAULT_PARENT_ID.toString()).doTreeBuild(sysMenuList); - /** - * 创建虚拟根节点 - * - * @author fengshuonan - * @date 2020/12/30 20:38 - */ - private static AntdvMenuItem createAntdVMenuRoot() { - AntdvMenuItem antdvMenuItem = new AntdvMenuItem(); - antdvMenuItem.setRouter("root"); - antdvMenuItem.setName("根节点"); - antdvMenuItem.setMenuId(TreeConstants.DEFAULT_PARENT_ID); - antdvMenuItem.setMenuParentId(TreeConstants.VIRTUAL_ROOT_PARENT_ID); - antdvMenuItem.setInvisible(false); - - antdvMenuItem.setAuthority(null); - - return antdvMenuItem; + // 模型转化 + return doModelTransfer(treeStructMenu); } /** @@ -129,4 +74,34 @@ public class AntdMenusFactory { return menuTreeNode; } + /** + * 模型转化 + * + * @author fengshuonan + * @date 2021/3/23 21:40 + */ + private static List doModelTransfer(List sysMenuList) { + if (ObjectUtil.isEmpty(sysMenuList)) { + return null; + } else { + ArrayList resultMenus = new ArrayList<>(); + + for (SysMenu sysMenu : sysMenuList) { + AntdSysMenuDTO antdvMenuItem = new AntdSysMenuDTO(); + antdvMenuItem.setTitle(sysMenu.getMenuName()); + antdvMenuItem.setIcon(sysMenu.getAntdvIcon()); + antdvMenuItem.setPath(sysMenu.getAntdvRouter()); + antdvMenuItem.setComponent(sysMenu.getAntdvComponent()); + antdvMenuItem.setHide(YesOrNotEnum.N.getCode().equals(sysMenu.getVisible())); + antdvMenuItem.setUid(null); + if (ObjectUtil.isNotEmpty(sysMenu.getChildren())) { + antdvMenuItem.setChildren(doModelTransfer(sysMenu.getChildren())); + } + resultMenus.add(antdvMenuItem); + } + + return resultMenus; + } + } + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/SysMenuMapper.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/SysMenuMapper.java index 9bd22ec87..ddfd727d1 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/SysMenuMapper.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/SysMenuMapper.java @@ -24,12 +24,8 @@ */ package cn.stylefeng.roses.kernel.system.modular.menu.mapper; -import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO; import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Param; - -import java.util.List; /** * 系统菜单mapper接口 @@ -39,15 +35,4 @@ import java.util.List; */ public interface SysMenuMapper extends BaseMapper { - /** - * 获取系统所有菜单(适用于登录后获取左侧菜单)(适配antd vue版本) - *

- * 返回信息携带:菜单可以被那些角色访问 - * - * @return 系统所有菜单 - * @author majianguo - * @date 2021/1/7 15:27 - */ - List getSystemAllMenus(@Param("menuIdList") List menuIdList); - } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/mapping/SysMenuMapper.xml b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/mapping/SysMenuMapper.xml index 79e2efa5c..179927b83 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/mapping/SysMenuMapper.xml +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/mapper/mapping/SysMenuMapper.xml @@ -2,41 +2,5 @@ - - - - - - - - - - - - - - - diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java index 00a20e71b..460cf444e 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java @@ -275,14 +275,27 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List getLeftMenusAntdv() { + LambdaQueryWrapper wrapper = this.createWrapper(new SysMenuRequest()); + wrapper.select(SysMenu::getMenuName, + SysMenu::getAntdvIcon, + SysMenu::getAntdvRouter, + SysMenu::getAntdvComponent, + SysMenu::getVisible, + SysMenu::getMenuId, + SysMenu::getMenuParentId); + wrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()); + // 如果是超级管理员,则获取所有的菜单 if (LoginContext.me().getSuperAdminFlag()) { - return this.baseMapper.getSystemAllMenus(null); + List totalList = this.list(wrapper); + return AntdMenusFactory.createTotalMenus(totalList); } // 获取当前用户的所有菜单 List menuIdList = getCurrentUserMenuIds(); - return this.baseMapper.getSystemAllMenus(menuIdList); + wrapper.in(SysMenu::getMenuId, menuIdList); + List customList = this.list(wrapper); + return AntdMenusFactory.createTotalMenus(customList); } @Override