diff --git a/login-base/src/main/java/ink/wgink/login/base/controller/route/IndexRouteController.java b/login-base/src/main/java/ink/wgink/login/base/controller/route/IndexRouteController.java index 7764e473..96e6f2fc 100644 --- a/login-base/src/main/java/ink/wgink/login/base/controller/route/IndexRouteController.java +++ b/login-base/src/main/java/ink/wgink/login/base/controller/route/IndexRouteController.java @@ -6,6 +6,7 @@ import ink.wgink.interfaces.menu.IMenuBaseService; import ink.wgink.interfaces.role.IRoleMenuBaseService; import ink.wgink.login.base.consts.IUserCenterConst; import ink.wgink.login.base.manager.ConfigManager; +import ink.wgink.login.base.util.MenuUtil; import ink.wgink.pojo.bos.UserInfoBO; import ink.wgink.pojo.dtos.menu.MenuDTO; import ink.wgink.pojo.dtos.role.RoleSimpleDTO; @@ -14,6 +15,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.servlet.ModelAndView; import java.util.ArrayList; @@ -32,6 +34,7 @@ import java.util.Map; */ @Controller public class IndexRouteController { + private static final String SYSTEM_HOME_SPLIT = "__"; @Autowired private SecurityComponent securityComponent; @@ -57,6 +60,12 @@ public class IndexRouteController { */ @GetMapping("default-main") public ModelAndView defaultMain() { + return defaultMain(IMenuBaseService.MENU_UNIFIED_USER + SYSTEM_HOME_SPLIT + "default-home"); + } + + + @GetMapping("default-main/{rootMenuId}") + public ModelAndView defaultMain(@PathVariable("rootMenuId") String rootMenuId) { ModelAndView mv = new ModelAndView("default-main"); UserInfoBO userInfoBO = securityComponent.getCurrentUser(); mv.addObject("userUsername", userInfoBO.getUserUsername()); @@ -81,14 +90,19 @@ public class IndexRouteController { mv.addObject(IUserCenterConst.MENU_MODE, config.get(IUserCenterConst.MENU_MODE)); } if (menuBaseService != null) { + // 所有系统菜单 + List systems = menuBaseService.listByParentId("0"); List menus; if (securityComponent.isAdmin()) { // 管理员 List menuIds = roleMenuBaseService.listMenuId(ISystemConstant.ADMIN); if (menuIds.isEmpty()) { - menus = menuBaseService.listSystemMenu(IMenuBaseService.MENU_UNIFIED_USER); + menus = menuBaseService.listSystemMenu(rootMenuId); + // 移除菜单中的第一个斜杠,保证跳转正常 + systems = MenuUtil.listSystems(systems); } else { - menus = menuBaseService.listSystemMenu(IMenuBaseService.MENU_UNIFIED_USER, menuIds); + menus = menuBaseService.listSystemMenu(rootMenuId, menuIds); + systems = MenuUtil.listSystems(systems, menuIds); } } else { // 普通用户 @@ -101,11 +115,24 @@ public class IndexRouteController { roleIds.add(roleSimpleDTO.getRoleId()); } List menuIds = roleMenuBaseService.listMenuId(roleIds); - menus = menuBaseService.listSystemMenu(IMenuBaseService.MENU_UNIFIED_USER, menuIds); + menus = menuBaseService.listSystemMenu(rootMenuId, menuIds); + // 去除多余的系统 + systems = MenuUtil.listSystems(systems, menuIds); } } mv.addObject("menus", menus); + mv.addObject("systems", systems.isEmpty() ? null : systems); } + + String defaultHome = "default-home"; + // 含有系统首页分隔符,并且有内容 + if (rootMenuId.contains(SYSTEM_HOME_SPLIT) && !rootMenuId.endsWith(SYSTEM_HOME_SPLIT)) { + String systemHomeUrl = rootMenuId.split(SYSTEM_HOME_SPLIT)[1]; + if (!StringUtils.isBlank(systemHomeUrl)) { + defaultHome = systemHomeUrl; + } + } + mv.addObject("defaultHome", defaultHome); return mv; } diff --git a/login-base/src/main/java/ink/wgink/login/base/util/MenuUtil.java b/login-base/src/main/java/ink/wgink/login/base/util/MenuUtil.java new file mode 100644 index 00000000..446e864e --- /dev/null +++ b/login-base/src/main/java/ink/wgink/login/base/util/MenuUtil.java @@ -0,0 +1,89 @@ +package ink.wgink.login.base.util; + +import ink.wgink.pojo.dtos.menu.MenuDTO; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName: MenuUtil + * @Description: 菜单工具 + * @Author: wanggeng + * @Date: 2022/5/30 23:29 + * @Version: 1.0 + */ +public class MenuUtil { + + public static List listSystems(List menuDTOS) { + if (menuDTOS == null || menuDTOS.isEmpty()) { + return new ArrayList<>(); + } + List menus = new ArrayList<>(); + for (int i = 0; i < menuDTOS.size(); i++) { + MenuDTO menuDTO = menuDTOS.get(i); + if (StringUtils.equals(menuDTO.getMenuUrl(), "javascript:void(0);")) { + continue; + } + menus.add(menuDTO); + } + removeMenuUrlFirstSlash(menus); + return menus; + } + + /** + * 系统列表(根节点为0的菜单) + * + * @param menuDTOS 原菜单 + * @param menuIds 筛选条件 + * @return + */ + public static List listSystems(List menuDTOS, List menuIds) { + if (menuDTOS == null || menuDTOS.isEmpty()) { + return new ArrayList<>(); + } + if (menuIds == null || menuIds.isEmpty()) { + return new ArrayList<>(); + } + List menus = new ArrayList<>(); + for (int i = 0; i < menuDTOS.size(); i++) { + MenuDTO menuDTO = menuDTOS.get(i); + if (StringUtils.equals(menuDTO.getMenuUrl(), "javascript:void(0);")) { + continue; + } + boolean isExist = false; + for (String menuId : menuIds) { + if (StringUtils.equals(menuDTO.getMenuId(), menuId)) { + menus.add(menuDTO); + isExist = true; + break; + } + } + if (!isExist) { + menuDTOS.remove(i); + i--; + } + } + removeMenuUrlFirstSlash(menus); + return menus; + } + + /** + * 删除菜单第一个斜杠 + * + * @param menuDTOS + */ + public static void removeMenuUrlFirstSlash(List menuDTOS) { + if (menuDTOS == null) { + return; + } + for (MenuDTO menuDTO : menuDTOS) { + String menuUrl = menuDTO.getMenuUrl(); + if (menuUrl.startsWith("/")) { + menuUrl = menuUrl.substring(1); + } + menuDTO.setMenuUrl(menuUrl); + } + } + +} diff --git a/login-base/src/main/resources/templates/default-main.html b/login-base/src/main/resources/templates/default-main.html index cede0f18..9518e97b 100644 --- a/login-base/src/main/resources/templates/default-main.html +++ b/login-base/src/main/resources/templates/default-main.html @@ -12,21 +12,23 @@ + @@ -46,6 +48,21 @@ +
  • + + + +
    + +
    +
  • @@ -169,7 +186,7 @@ -