diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java index 876f9868e..d4dcbc8bc 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java @@ -1,5 +1,6 @@ package cn.stylefeng.roses.kernel.sys.modular.login.service; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.auth.api.SessionManagerApi; @@ -19,6 +20,7 @@ import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService; import cn.stylefeng.roses.kernel.sys.modular.login.expander.WebSocketConfigExpander; import cn.stylefeng.roses.kernel.sys.modular.login.pojo.*; import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu; +import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuFactory; import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService; import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService; import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService; @@ -247,6 +249,15 @@ public class UserIndexInfoService { Set menuCodeList = userMenuList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet()); permissionCodeList.addAll(menuCodeList); + // 获取菜单的上级,查询这些菜单的父级集合,获取缺失的父级菜单,否则组不成一棵树 + Set needToAddMenuIds = MenuFactory.getMenuParentIds(userMenuList); + if (ObjectUtil.isNotEmpty(needToAddMenuIds)) { + List needToAddMenuList = sysMenuService.getIndexMenuInfoList(ListUtil.list(true, needToAddMenuIds)); + userMenuList.addAll(needToAddMenuList); + Set needToAddCodes = needToAddMenuList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet()); + permissionCodeList.addAll(needToAddCodes); + } + // 获取功能对应的功能编码集合 List optionsCodeList = sysMenuOptionsService.getOptionsCodeList(menuOptionsIdList); permissionCodeList.addAll(optionsCodeList); diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java index 1b128810a..b90347d14 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java @@ -200,7 +200,8 @@ public class SysMenuServiceImpl extends ServiceImpl impl sysMenuLambdaQueryWrapper.in(SysMenu::getMenuId, menuIdList); // 查询指定的菜单内容 - sysMenuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuParentId, SysMenu::getAppId, SysMenu::getMenuCode, + sysMenuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuParentId, SysMenu::getMenuPids, SysMenu::getAppId, + SysMenu::getMenuCode, SysMenu::getMenuName, SysMenu::getMenuType, SysMenu::getAntdvIcon, SysMenu::getAntdvVisible, SysMenu::getAntdvActiveUrl, SysMenu::getAntdvRouter, SysMenu::getAntdvComponent, SysMenu::getMenuSort);