【7.2.2】【system】左侧菜单可根据应用是否展示进行过滤

pull/29/head
fengshuonan 2022-04-14 16:56:31 +08:00
parent 761ffd5007
commit 1bc8e27aad
5 changed files with 43 additions and 21 deletions

View File

@ -76,11 +76,11 @@ public interface AppServiceApi {
SysAppResult getAppInfoByAppCode(String appCode); SysAppResult getAppInfoByAppCode(String appCode);
/** /**
* app * app
* *
* @author fengshuonan * @author fengshuonan
* @date 2022/4/6 22:34 * @date 2022/4/6 22:34
*/ */
List<String> getAppNameSorted(); List<SysAppResult> getSortedApps();
} }

View File

@ -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; private final String errorCode;

View File

@ -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.rule.pojo.dict.SimpleDict;
import cn.stylefeng.roses.kernel.system.api.AppServiceApi; import cn.stylefeng.roses.kernel.system.api.AppServiceApi;
import cn.stylefeng.roses.kernel.system.api.MenuServiceApi; 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.exception.enums.app.AppExceptionEnum;
import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppRequest; import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppResult; import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppResult;
@ -265,11 +264,23 @@ public class SysAppServiceImpl extends ServiceImpl<SysAppMapper, SysApp> impleme
} }
@Override @Override
public List<String> getAppNameSorted() { public List<SysAppResult> getSortedApps() {
LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(new SysAppRequest()); LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(new SysAppRequest());
// 只查询应用名称和应用编码
wrapper.select(SysApp::getAppName); wrapper.select(SysApp::getAppName);
wrapper.select(SysApp::getAppCode);
// 只查询启用的应用
wrapper.eq(SysApp::getStatusFlag, StatusEnum.ENABLE.getCode());
List<SysApp> list = this.list(wrapper); 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());
} }
/** /**

View File

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

View File

@ -27,7 +27,6 @@ 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.util.ObjectUtil; 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.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; 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.RoleServiceApi;
import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException; 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.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.login.v3.IndexMenuInfo;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest;
@ -296,17 +296,22 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override @Override
public List<AntdSysMenuDTO> getLeftMenusAntdv(SysMenuRequest sysMenuRequest) { 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); 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 @Override
@ -459,15 +464,15 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
} }
@Override @Override
public List<SysMenu> getCurrentUserMenus(String appCode, Boolean layuiVisibleFlag) { public List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag) {
// 菜单查询条件 // 菜单查询条件
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()).eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()).orderByAsc(SysMenu::getMenuSort); queryWrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()).eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()).orderByAsc(SysMenu::getMenuSort);
// 如果应用编码不为空,则拼接应用编码 // 如果应用编码不为空,则拼接应用编码
if (StrUtil.isNotBlank(appCode)) { if (ObjectUtil.isNotEmpty(appCodeList)) {
queryWrapper.eq(SysMenu::getAppCode, appCode); 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<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); Map<String, List<SysMenu>> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus);
return Antdv3MenusFactory.createTotalMenus(sortedUserMenus, appNameSorted); return Antdv3MenusFactory.createTotalMenus(sortedUserMenus, appNames);
} }
/** /**