From bb1324a70ae25bac00eadbd4d14bb0c1faf5d2df Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: 星期二, 26 五月 2020 14:33:45 +0800
Subject: [PATCH] 支持一级菜单(和主页同级)在main区域显示
---
ruoyi-ui/src/store/modules/permission.js | 4 ++
ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java | 53 ++++++++++++++++++++++++--
ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java | 12 ++++++
3 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js
index deed451..bfd5988 100644
--- a/ruoyi-ui/src/store/modules/permission.js
+++ b/ruoyi-ui/src/store/modules/permission.js
@@ -32,6 +32,10 @@
// 遍历后台传来的路由字符串,转换为组件对象
function filterAsyncRouter(asyncRouterMap) {
return asyncRouterMap.filter(route => {
+ if(!route.path){
+ // 防止空路由出现的警告,设置默认path
+ route.path = '/path';
+ }
if (route.component) {
// Layout组件特殊处理
if (route.component === 'Layout') {
diff --git a/ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java b/ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java
index df6992a..69c2b96 100644
--- a/ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java
+++ b/ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java
@@ -42,6 +42,18 @@
/** 是否菜单外链(否) */
public static final String NO_FRAME = "1";
+ /** 菜单类型(目录) */
+ public static final String TYPE_DIR = "M";
+
+ /** 菜单类型(菜单) */
+ public static final String TYPE_MENU = "C";
+
+ /** 菜单类型(按钮) */
+ public static final String TYPE_BUTTON = "F";
+
+ /** Layout组件标识 */
+ public final static String LAYOUT = "Layout";
+
/** 校验返回结果码 */
public final static String UNIQUE = "0";
public final static String NOT_UNIQUE = "1";
diff --git a/ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
index d5aff8e..f4933fa 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java
@@ -142,14 +142,25 @@
router.setHidden("1".equals(menu.getVisible()));
router.setName(StringUtils.capitalize(menu.getPath()));
router.setPath(getRouterPath(menu));
- router.setComponent(StringUtils.isEmpty(menu.getComponent()) ? "Layout" : menu.getComponent());
+ router.setComponent(getComponent(menu));
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
List<SysMenu> cMenus = menu.getChildren();
- if (!cMenus.isEmpty() && cMenus.size() > 0 && "M".equals(menu.getMenuType()))
+ if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
{
router.setAlwaysShow(true);
router.setRedirect("noRedirect");
router.setChildren(buildMenus(cMenus));
+ }
+ else if (isMeunFrame(menu))
+ {
+ List<RouterVo> childrenList = new ArrayList<RouterVo>();
+ RouterVo children = new RouterVo();
+ children.setPath(menu.getPath());
+ children.setComponent(menu.getComponent());
+ children.setName(StringUtils.capitalize(menu.getPath()));
+ children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
+ childrenList.add(children);
+ router.setChildren(childrenList);
}
routers.add(router);
}
@@ -297,15 +308,49 @@
public String getRouterPath(SysMenu menu)
{
String routerPath = menu.getPath();
- // 非外链并且是一级目录
- if (0 == menu.getParentId() && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
+ // 非外链并且是一级目录(类型为目录)
+ if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
+ && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
{
routerPath = "/" + menu.getPath();
}
+ // 非外链并且是一级目录(类型为菜单)
+ else if (isMeunFrame(menu))
+ {
+ routerPath = StringUtils.EMPTY;
+ }
return routerPath;
}
/**
+ * 获取组件信息
+ *
+ * @param menu 菜单信息
+ * @return 组件信息
+ */
+ public String getComponent(SysMenu menu)
+ {
+ String component = UserConstants.LAYOUT;
+ if (StringUtils.isNotEmpty(menu.getComponent()) && !isMeunFrame(menu))
+ {
+ component = menu.getComponent();
+ }
+ return component;
+ }
+
+ /**
+ * 是否为菜单内部跳转
+ *
+ * @param menu 菜单信息
+ * @return 结果
+ */
+ public boolean isMeunFrame(SysMenu menu)
+ {
+ return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
+ && menu.getIsFrame().equals(UserConstants.NO_FRAME);
+ }
+
+ /**
* 根据父节点的ID获取所有子节点
*
* @param list 分类表
--
Gitblit v1.9.2