【8.0】【sys】【menu】首页信息获取用户菜单自动渲染父级菜单

pull/57/head
fengshuonan 2023-07-15 01:33:53 +08:00
parent 1818447f0c
commit d62a44a02f
2 changed files with 13 additions and 1 deletions

View File

@ -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<String> menuCodeList = userMenuList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet());
permissionCodeList.addAll(menuCodeList);
// 获取菜单的上级,查询这些菜单的父级集合,获取缺失的父级菜单,否则组不成一棵树
Set<Long> needToAddMenuIds = MenuFactory.getMenuParentIds(userMenuList);
if (ObjectUtil.isNotEmpty(needToAddMenuIds)) {
List<SysMenu> needToAddMenuList = sysMenuService.getIndexMenuInfoList(ListUtil.list(true, needToAddMenuIds));
userMenuList.addAll(needToAddMenuList);
Set<String> needToAddCodes = needToAddMenuList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet());
permissionCodeList.addAll(needToAddCodes);
}
// 获取功能对应的功能编码集合
List<String> optionsCodeList = sysMenuOptionsService.getOptionsCodeList(menuOptionsIdList);
permissionCodeList.addAll(optionsCodeList);

View File

@ -200,7 +200,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> 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);