【7.2.2】菜单新增前后台菜单筛选

pull/29/head
fengshuonan 2022-04-28 13:09:28 +08:00
parent 9b4ebb5e60
commit 25ad75307f
2 changed files with 21 additions and 9 deletions

View File

@ -159,9 +159,10 @@ public interface SysMenuService extends IService<SysMenu> {
* *
* @param appCodeList * @param appCodeList
* @param layuiVisibleFlag layui穿truelayui_visibleY * @param layuiVisibleFlag layui穿truelayui_visibleY
* @param antdvFrontType
* @author fengshuonan * @author fengshuonan
* @date 2020/12/27 18:11 * @date 2020/12/27 18:11
*/ */
List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag); List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag, Integer antdvFrontType);
} }

View File

@ -26,6 +26,7 @@ package cn.stylefeng.roses.kernel.system.modular.menu.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
@ -284,7 +285,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
public List<LayuiAppIndexMenusVO> getLayuiIndexMenus() { public List<LayuiAppIndexMenusVO> getLayuiIndexMenus() {
// 获取当前用户所有菜单 // 获取当前用户所有菜单
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(null, true); List<SysMenu> currentUserMenus = this.getCurrentUserMenus(null, true, null);
// 组装每个应用的菜单树 // 组装每个应用的菜单树
List<LayuiAppIndexMenusVO> layuiAppIndexMenuVOS = LayuiMenusFactory.createLayuiAppIndexMenus(currentUserMenus); List<LayuiAppIndexMenusVO> layuiAppIndexMenuVOS = LayuiMenusFactory.createLayuiAppIndexMenus(currentUserMenus);
@ -302,6 +303,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override @Override
public List<AntdSysMenuDTO> getLeftMenusAntdv(SysMenuRequest sysMenuRequest) { public List<AntdSysMenuDTO> getLeftMenusAntdv(SysMenuRequest sysMenuRequest) {
// 获取前台或者后台类型
Integer antdvFrontType = sysMenuRequest.getAntdvFrontType();
if (antdvFrontType == null) {
antdvFrontType = MenuFrontTypeEnum.FRONT.getCode();
}
// 获取当前已经启用的应用,并且按排序字段排序的 // 获取当前已经启用的应用,并且按排序字段排序的
List<SysAppResult> appNameSorted = appServiceApi.getSortedApps(); List<SysAppResult> appNameSorted = appServiceApi.getSortedApps();
if (ObjectUtil.isEmpty(appNameSorted)) { if (ObjectUtil.isEmpty(appNameSorted)) {
@ -310,7 +318,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
// 查询菜单 // 查询菜单
List<String> appCodes = appNameSorted.stream().map(SysAppResult::getAppCode).collect(Collectors.toList()); List<String> appCodes = appNameSorted.stream().map(SysAppResult::getAppCode).collect(Collectors.toList());
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(appCodes, false); List<SysMenu> currentUserMenus = this.getCurrentUserMenus(appCodes, false, antdvFrontType);
// 将菜单按应用编码分类 // 将菜单按应用编码分类
Map<String, List<SysMenu>> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus); Map<String, List<SysMenu>> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus);
@ -470,7 +478,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
} }
@Override @Override
public List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag) { public List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag, Integer antdvFrontType) {
// 菜单查询条件 // 菜单查询条件
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
@ -481,6 +489,11 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
queryWrapper.in(SysMenu::getAppCode, appCodeList); queryWrapper.in(SysMenu::getAppCode, appCodeList);
} }
// 判断前台还是后台菜单
if (ObjectUtil.isNotEmpty(antdvFrontType)) {
queryWrapper.in(SysMenu::getAntdvFrontType, ListUtil.list(true, antdvFrontType, MenuFrontTypeEnum.TOTAL.getCode()));
}
// 如果是不分离版本,则筛选一下不需要显示的菜单 // 如果是不分离版本,则筛选一下不需要显示的菜单
if (layuiVisibleFlag != null && layuiVisibleFlag) { if (layuiVisibleFlag != null && layuiVisibleFlag) {
queryWrapper.eq(SysMenu::getLayuiVisible, YesOrNotEnum.Y.getCode()); queryWrapper.eq(SysMenu::getLayuiVisible, YesOrNotEnum.Y.getCode());
@ -578,7 +591,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
public List<IndexMenuInfo> buildAuthorities() { public List<IndexMenuInfo> buildAuthorities() {
// 不分离应用查询菜单 // 不分离应用查询菜单
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(null, false); List<SysMenu> currentUserMenus = this.getCurrentUserMenus(null, false, null);
// 获取当前激活的应用 // 获取当前激活的应用
List<SysAppResult> sortedApps = appServiceApi.getSortedApps(); List<SysAppResult> sortedApps = appServiceApi.getSortedApps();
@ -651,11 +664,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
if (ObjectUtil.isNotEmpty(sysMenuRequest.getAppCode()) || ObjectUtil.isNotEmpty(sysMenuRequest.getMenuName()) || ObjectUtil.isNotEmpty(sysMenuRequest.getMenuCode())) { if (ObjectUtil.isNotEmpty(sysMenuRequest.getAppCode()) || ObjectUtil.isNotEmpty(sysMenuRequest.getMenuName()) || ObjectUtil.isNotEmpty(sysMenuRequest.getMenuCode())) {
queryWrapper.nested( queryWrapper.nested(
// 根据所属应用查询 // 根据所属应用查询
i -> i.like(ObjectUtil.isNotEmpty(sysMenuRequest.getAppCode()), SysMenu::getAppCode, sysMenuRequest.getAppCode()) i -> i.like(ObjectUtil.isNotEmpty(sysMenuRequest.getAppCode()), SysMenu::getAppCode, sysMenuRequest.getAppCode()).or()
.or()
// 根据菜单名称模糊查询 // 根据菜单名称模糊查询
.like(ObjectUtil.isNotEmpty(sysMenuRequest.getMenuName()), SysMenu::getMenuName, sysMenuRequest.getMenuName()) .like(ObjectUtil.isNotEmpty(sysMenuRequest.getMenuName()), SysMenu::getMenuName, sysMenuRequest.getMenuName()).or()
.or()
// 根据菜单编码模糊查询 // 根据菜单编码模糊查询
.like(ObjectUtil.isNotEmpty(sysMenuRequest.getMenuCode()), SysMenu::getMenuCode, sysMenuRequest.getMenuCode())); .like(ObjectUtil.isNotEmpty(sysMenuRequest.getMenuCode()), SysMenu::getMenuCode, sysMenuRequest.getMenuCode()));
} }