mirror of https://gitee.com/stylefeng/roses
【7.2.2】【system】左侧菜单可根据应用是否展示进行过滤
parent
761ffd5007
commit
1bc8e27aad
|
@ -76,11 +76,11 @@ public interface AppServiceApi {
|
|||
SysAppResult getAppInfoByAppCode(String appCode);
|
||||
|
||||
/**
|
||||
* 按顺序获取app的编码
|
||||
* 按顺序获取app的编码和名称
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2022/4/6 22:34
|
||||
*/
|
||||
List<String> getAppNameSorted();
|
||||
List<SysAppResult> getSortedApps();
|
||||
|
||||
}
|
||||
|
|
|
@ -44,7 +44,12 @@ public enum SysMenuExceptionEnum implements AbstractExceptionEnum {
|
|||
/**
|
||||
* 菜单不存在
|
||||
*/
|
||||
MENU_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "33", "菜单不存在,菜单id:{}");
|
||||
MENU_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "33", "菜单不存在,菜单id:{}"),
|
||||
|
||||
/**
|
||||
* 无法获取菜单,所有应用已被禁用
|
||||
*/
|
||||
CANT_FIND_APPS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "34", "无法获取菜单,所有应用已被禁用");
|
||||
|
||||
private final String errorCode;
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@ import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
|||
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
|
||||
import cn.stylefeng.roses.kernel.system.api.AppServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.MenuServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException;
|
||||
import cn.stylefeng.roses.kernel.system.api.exception.enums.app.AppExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppRequest;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppResult;
|
||||
|
@ -265,11 +264,23 @@ public class SysAppServiceImpl extends ServiceImpl<SysAppMapper, SysApp> impleme
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAppNameSorted() {
|
||||
public List<SysAppResult> getSortedApps() {
|
||||
LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(new SysAppRequest());
|
||||
|
||||
// 只查询应用名称和应用编码
|
||||
wrapper.select(SysApp::getAppName);
|
||||
wrapper.select(SysApp::getAppCode);
|
||||
|
||||
// 只查询启用的应用
|
||||
wrapper.eq(SysApp::getStatusFlag, StatusEnum.ENABLE.getCode());
|
||||
|
||||
List<SysApp> list = this.list(wrapper);
|
||||
return list.stream().map(SysApp::getAppName).collect(Collectors.toList());
|
||||
|
||||
return list.stream().map(i -> {
|
||||
SysAppResult target = new SysAppResult();
|
||||
BeanUtil.copyProperties(i, target);
|
||||
return target;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -157,11 +157,11 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||
/**
|
||||
* 获取当前用户的某个应用下的菜单
|
||||
*
|
||||
* @param appCode 应用编码
|
||||
* @param appCodeList 应用编码集合
|
||||
* @param layuiVisibleFlag layui版本查询查询条件,如果穿true,则会带上layui_visible为Y的查询条件
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 18:11
|
||||
*/
|
||||
List<SysMenu> getCurrentUserMenus(String appCode, Boolean layuiVisibleFlag);
|
||||
List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag);
|
||||
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ package cn.stylefeng.roses.kernel.system.modular.menu.service.impl;
|
|||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.basic.SimpleRoleInfo;
|
||||
|
@ -44,6 +43,7 @@ import cn.stylefeng.roses.kernel.system.api.MenuServiceApi;
|
|||
import cn.stylefeng.roses.kernel.system.api.RoleServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException;
|
||||
import cn.stylefeng.roses.kernel.system.api.exception.enums.menu.SysMenuExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppResult;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.login.v3.IndexMenuInfo;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest;
|
||||
|
@ -296,17 +296,22 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
|
||||
@Override
|
||||
public List<AntdSysMenuDTO> getLeftMenusAntdv(SysMenuRequest sysMenuRequest) {
|
||||
// 获取当前已经启用的应用,并且按排序字段排序的
|
||||
List<SysAppResult> appNameSorted = appServiceApi.getSortedApps();
|
||||
if (ObjectUtil.isEmpty(appNameSorted)) {
|
||||
throw new ServiceException(SysMenuExceptionEnum.CANT_FIND_APPS);
|
||||
}
|
||||
|
||||
// 不分应用查询菜单
|
||||
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(null, false);
|
||||
// 查询菜单
|
||||
List<String> appCodes = appNameSorted.stream().map(SysAppResult::getAppCode).collect(Collectors.toList());
|
||||
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(appCodes, false);
|
||||
|
||||
// 获取当前激活的应用
|
||||
List<String> appNameSorted = appServiceApi.getAppNameSorted();
|
||||
|
||||
// 将菜单按应用编码分类,激活的应用放在最前边
|
||||
// 将菜单按应用编码分类
|
||||
Map<String, List<SysMenu>> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus);
|
||||
|
||||
return AntdMenusFactory.createTotalMenus(sortedUserMenus, appNameSorted);
|
||||
// 获取应用名称集合,带顺序
|
||||
List<String> appNames = appNameSorted.stream().map(SysAppResult::getAppName).collect(Collectors.toList());
|
||||
return AntdMenusFactory.createTotalMenus(sortedUserMenus, appNames);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -459,15 +464,15 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> getCurrentUserMenus(String appCode, Boolean layuiVisibleFlag) {
|
||||
public List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag) {
|
||||
|
||||
// 菜单查询条件
|
||||
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()).eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()).orderByAsc(SysMenu::getMenuSort);
|
||||
|
||||
// 如果应用编码不为空,则拼接应用编码
|
||||
if (StrUtil.isNotBlank(appCode)) {
|
||||
queryWrapper.eq(SysMenu::getAppCode, appCode);
|
||||
if (ObjectUtil.isNotEmpty(appCodeList)) {
|
||||
queryWrapper.in(SysMenu::getAppCode, appCodeList);
|
||||
}
|
||||
|
||||
// 如果是不分离版本,则筛选一下不需要显示的菜单
|
||||
|
@ -570,12 +575,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(null, false);
|
||||
|
||||
// 获取当前激活的应用
|
||||
List<String> appNameSorted = appServiceApi.getAppNameSorted();
|
||||
List<SysAppResult> sortedApps = appServiceApi.getSortedApps();
|
||||
List<String> appNames = sortedApps.stream().map(SysAppResult::getAppName).collect(Collectors.toList());
|
||||
|
||||
// 将菜单按应用编码分类,激活的应用放在最前边
|
||||
Map<String, List<SysMenu>> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus);
|
||||
|
||||
return Antdv3MenusFactory.createTotalMenus(sortedUserMenus, appNameSorted);
|
||||
return Antdv3MenusFactory.createTotalMenus(sortedUserMenus, appNames);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue