增加了单系统多子系统菜单功能
This commit is contained in:
parent
c83e384daa
commit
e642afd0e2
@ -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<MenuDTO> systems = menuBaseService.listByParentId("0");
|
||||
List<MenuDTO> menus;
|
||||
if (securityComponent.isAdmin()) {
|
||||
// 管理员
|
||||
List<String> 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<String> 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;
|
||||
}
|
||||
|
||||
|
@ -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<MenuDTO> listSystems(List<MenuDTO> menuDTOS) {
|
||||
if (menuDTOS == null || menuDTOS.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<MenuDTO> 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<MenuDTO> listSystems(List<MenuDTO> menuDTOS, List<String> menuIds) {
|
||||
if (menuDTOS == null || menuDTOS.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
if (menuIds == null || menuIds.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<MenuDTO> 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<MenuDTO> menuDTOS) {
|
||||
if (menuDTOS == null) {
|
||||
return;
|
||||
}
|
||||
for (MenuDTO menuDTO : menuDTOS) {
|
||||
String menuUrl = menuDTO.getMenuUrl();
|
||||
if (menuUrl.startsWith("/")) {
|
||||
menuUrl = menuUrl.substring(1);
|
||||
}
|
||||
menuDTO.setMenuUrl(menuUrl);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -12,21 +12,23 @@
|
||||
<link rel="stylesheet" href="assets/layuiadmin/layui/css/layui.css" media="all">
|
||||
<link rel="stylesheet" href="assets/layuiadmin/style/admin.css" media="all">
|
||||
<link rel="stylesheet" href="assets/layuiadmin/style/default-main.css" media="all">
|
||||
<style>
|
||||
.system-nav-box {}
|
||||
.system-nav-box .system-box {display:none;background-color: #fff;width: 260px;position: absolute;top: 50px;left: -50px;border: 1px solid #f6f6f6; overflow: hidden;}
|
||||
.system-nav-box .system-box .system-item-list {width: 280px; max-height: 140px; overflow: auto;}
|
||||
.system-nav-box .system-box .system-item-list .system-item {text-align: left; padding: 0 35px 0 15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom: 1px solid #f6f6f6;}
|
||||
.system-nav-box .system-box .system-item-list .system-item:last-child {border-bottom: none;}
|
||||
.system-nav-box .system-box .system-item-list .system-item i {}
|
||||
</style>
|
||||
<style th:if="${menuMode eq 'floatLeft'}">
|
||||
.layui-side-menu-hidden {display: none;}
|
||||
.layui-layout-admin .layui-layout-left, .layadmin-pagetabs, .layui-layout-admin .layui-body, .layui-layout-admin .layui-footer {left: 0px}
|
||||
@media screen and (max-width: 992px) {
|
||||
.layui-layout-admin .layui-side {
|
||||
transform: none;
|
||||
-webkit-transform: none;
|
||||
width: 220px;
|
||||
}
|
||||
.layui-layout-admin .layui-side {transform: none;-webkit-transform: none;width: 220px;}
|
||||
.layui-layout-admin .layui-layout-left,
|
||||
.layadmin-pagetabs,
|
||||
.layui-layout-admin .layui-body,
|
||||
.layui-layout-admin .layui-footer {
|
||||
left: 0;
|
||||
}
|
||||
.layui-layout-admin .layui-footer {left: 0;}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
@ -46,6 +48,21 @@
|
||||
<i class="layui-icon layui-icon-website"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li class="layui-nav-item layui-hide-xs system-nav-box" lay-unselect th:if="${systems ne null}">
|
||||
<a href="javascript:void(0);" title="系统导航">
|
||||
<i class="layui-icon layui-icon-app"></i>
|
||||
</a>
|
||||
<div class="system-box">
|
||||
<div class="system-item-list">
|
||||
<a th:href="${system.menuUrl}" class="system-item" th:title="${system.menuName}" th:each="system: ${systems}">
|
||||
<span>
|
||||
<i th:class="${system.menuIcon}"></i>
|
||||
</span>
|
||||
<span th:text="${system.menuName}"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li class="layui-nav-item" lay-unselect>
|
||||
<a href="javascript:void(0);" layadmin-event="refresh" title="刷新">
|
||||
<i class="layui-icon layui-icon-refresh-3"></i>
|
||||
@ -169,7 +186,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script src="assets/layuiadmin/layui/layui.js"></script>
|
||||
<script>
|
||||
<script th:inline="javascript">
|
||||
layui.config({
|
||||
base: 'assets/layuiadmin/' //静态资源所在路径
|
||||
}).extend({
|
||||
@ -214,7 +231,7 @@
|
||||
$('#LAY-changePassword').on('click', function() {
|
||||
changePassword()
|
||||
});
|
||||
$('#defaultIFrame').attr('src', 'default-home');
|
||||
$('#defaultIFrame').attr('src', [[${defaultHome}]]);
|
||||
$('#LAY-logout').on('click', function() {
|
||||
top.dialog.confirm('确认退出?', function() {
|
||||
window.location.href = 'oauth/logout';
|
||||
@ -241,6 +258,16 @@
|
||||
}
|
||||
});
|
||||
/** 左浮动菜单 end **/
|
||||
|
||||
/**
|
||||
* 系统导航
|
||||
*/
|
||||
$('.system-nav-box').on('mouseover', function() {
|
||||
$('.system-box').show();
|
||||
});
|
||||
$('.system-nav-box').on('mouseout', function() {
|
||||
$('.system-box').hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
Loading…
Reference in New Issue
Block a user