【7.1.2】【菜单】左侧菜单列表按应用分类

pull/22/head
fengshuonan 2021-08-24 18:43:05 +08:00
parent 3549dd58c6
commit 62fb9e56a1
3 changed files with 102 additions and 26 deletions

View File

@ -156,12 +156,6 @@ public class SysMenuRequest extends BaseRequest {
@ChineseDescription("外部链接地址适用于antd vue版本")
private String antdvLinkUrl;
/**
* true-
*/
@ChineseDescription("查询时传递是否查询所有的菜单true-所有的")
private Boolean totalMenus = false;
/**
* Antd Vue
*/

View File

@ -24,10 +24,15 @@
*/
package cn.stylefeng.roses.kernel.system.modular.menu.factory;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.system.api.AppServiceApi;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdMenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO;
@ -37,8 +42,7 @@ import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu;
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenuButton;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
/**
* antd vue
@ -51,16 +55,42 @@ public class AntdMenusFactory {
/**
* antdv
*
* @param appSortedMenus
* @author fengshuonan
* @date 2021/1/7 18:17
*/
public static List<AntdSysMenuDTO> createTotalMenus(List<SysMenu> sysMenuList) {
public static List<AntdSysMenuDTO> createTotalMenus(Map<String, List<SysMenu>> appSortedMenus, String activeAppCode) {
// 构造菜单树
List<SysMenu> treeStructMenu = new DefaultTreeBuildFactory<SysMenu>(TreeConstants.DEFAULT_PARENT_ID.toString()).doTreeBuild(sysMenuList);
// 创建应用级别的菜单集合
ArrayList<AntdSysMenuDTO> appSortedAntdMenus = new ArrayList<>();
// 模型转化
return doModelTransfer(treeStructMenu);
// 如果用户菜单中包含了激活的应用,先放激活的应用的
if (appSortedMenus.containsKey(activeAppCode)) {
// 创建顶层应用菜单
AntdSysMenuDTO firstSortApp = createRootAppMenu(activeAppCode);
List<SysMenu> treeStructMenu = new DefaultTreeBuildFactory<SysMenu>(TreeConstants.DEFAULT_PARENT_ID.toString()).doTreeBuild(appSortedMenus.get(activeAppCode));
List<AntdSysMenuDTO> antdSysMenuDTOS = doModelTransfer(treeStructMenu);
// 更新顶层应用级别的菜单
firstSortApp.setChildren(antdSysMenuDTOS);
appSortedAntdMenus.add(firstSortApp);
}
// 创建其他应用的菜单
for (Map.Entry<String, List<SysMenu>> entry : appSortedMenus.entrySet()) {
if (!entry.getKey().equals(activeAppCode)) {
// 创建顶层应用菜单
AntdSysMenuDTO rootAppMenu = createRootAppMenu(entry.getKey());
List<SysMenu> treeStructMenu = new DefaultTreeBuildFactory<SysMenu>(TreeConstants.DEFAULT_PARENT_ID.toString()).doTreeBuild(entry.getValue());
List<AntdSysMenuDTO> antdSysMenuDTOS = doModelTransfer(treeStructMenu);
// 更新顶层应用级别的菜单
rootAppMenu.setChildren(antdSysMenuDTOS);
appSortedAntdMenus.add(rootAppMenu);
}
}
return appSortedAntdMenus;
}
/**
@ -187,6 +217,36 @@ public class AntdMenusFactory {
}
}
/**
* menus
*
* @author fengshuonan
* @date 2021/8/24 16:50
*/
public static Map<String, List<SysMenu>> sortUserMenusByAppCode(List<SysMenu> currentUserMenus) {
// 根据应用编码分类的菜单key是应用编码value是菜单
HashMap<String, List<SysMenu>> appMenus = new HashMap<>();
// 将菜单分类
for (SysMenu currentUserMenu : currentUserMenus) {
// 获取这个菜单的应用编码
String appCode = currentUserMenu.getAppCode();
// 获取该应用已有的菜单集合
List<SysMenu> sysMenus = appMenus.get(appCode);
if (sysMenus == null) {
sysMenus = new ArrayList<>();
}
sysMenus.add(currentUserMenu);
appMenus.put(appCode, sysMenus);
}
return appMenus;
}
/**
*
*
@ -217,4 +277,31 @@ public class AntdMenusFactory {
}
}
/**
*
*
* @author fengshuonan
* @date 2021/8/24 17:23
*/
private static AntdSysMenuDTO createRootAppMenu(String appCode) {
AntdSysMenuDTO antdSysMenuDTO = new AntdSysMenuDTO();
// 获取应用的详细信息
AppServiceApi appServiceApi = SpringUtil.getBean(AppServiceApi.class);
Set<SimpleDict> appsByAppCodes = appServiceApi.getAppsByAppCodes(CollectionUtil.set(false, appCode));
if (appsByAppCodes.size() > 0) {
SimpleDict appInfo = appsByAppCodes.iterator().next();
antdSysMenuDTO.setTitle(appInfo.getName());
antdSysMenuDTO.setIcon("PieChartTwoTone");
antdSysMenuDTO.setPath("/" + appCode);
antdSysMenuDTO.setComponent(null);
antdSysMenuDTO.setHide(false);
antdSysMenuDTO.setUid(null);
}
return antdSysMenuDTO;
}
}

View File

@ -297,20 +297,15 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
public List<AntdSysMenuDTO> getLeftMenusAntdv(SysMenuRequest sysMenuRequest) {
// 不分应用查询菜单
List<SysMenu> currentUserMenus = null;
if (sysMenuRequest.getTotalMenus() != null && sysMenuRequest.getTotalMenus()) {
currentUserMenus = this.getCurrentUserMenus(null, false);
}
// 根据应用查询菜单
else {
String appCode = sysMenuRequest.getAppCode();
if (ObjectUtil.isEmpty(appCode)) {
appCode = appServiceApi.getActiveAppCode();
}
currentUserMenus = this.getCurrentUserMenus(appCode, false);
}
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(null, false);
return AntdMenusFactory.createTotalMenus(currentUserMenus);
// 获取当前激活的应用
String activeAppCode = appServiceApi.getActiveAppCode();
// 将菜单按应用编码分类,激活的应用放在最前边
Map<String, List<SysMenu>> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus);
return AntdMenusFactory.createTotalMenus(sortedUserMenus, activeAppCode);
}
@Override