From ff0749984d2a018e8ef68fa9cd889490895c38fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E9=A3=8E?= <1638654441@qq.com> Date: Fri, 22 May 2020 19:02:38 +0800 Subject: [PATCH 1/5] =?UTF-8?q?tagview=20&=20sidebar=20=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E4=B8=8Eelement=20ui(=E5=85=A8=E5=B1=80)?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/layout/components/Sidebar/index.vue | 39 +++-- .../src/layout/components/TagsView/index.vue | 165 ++++++++++-------- 2 files changed, 113 insertions(+), 91 deletions(-) diff --git a/ruoyi-ui/src/layout/components/Sidebar/index.vue b/ruoyi-ui/src/layout/components/Sidebar/index.vue index 4d0c6c95..dc4f1539 100644 --- a/ruoyi-ui/src/layout/components/Sidebar/index.vue +++ b/ruoyi-ui/src/layout/components/Sidebar/index.vue @@ -8,47 +8,50 @@ :background-color="variables.menuBg" :text-color="variables.menuText" :unique-opened="true" - :active-text-color="variables.menuActiveText" + :active-text-color="settings.theme" :collapse-transition="false" mode="vertical" > - + diff --git a/ruoyi-ui/src/layout/components/TagsView/index.vue b/ruoyi-ui/src/layout/components/TagsView/index.vue index 19e1912e..5a92516c 100644 --- a/ruoyi-ui/src/layout/components/TagsView/index.vue +++ b/ruoyi-ui/src/layout/components/TagsView/index.vue @@ -9,11 +9,16 @@ :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }" tag="span" class="tags-view-item" + :style="activeStyle(tag)" @click.middle.native="!isAffix(tag)?closeSelectedTag(tag):''" @contextmenu.prevent.native="openMenu(tag,$event)" > {{ tag.title }} - +
    @@ -26,8 +31,8 @@ From c1db17dd771f202647ec56898f6b09cf00947a26 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 26 May 2020 11:54:46 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E9=99=90=E5=88=B6=E5=A4=96=E9=93=BE?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=BF=85=E9=A1=BB=E4=BB=A5http(s)://?= =?UTF-8?q?=E5=BC=80=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/constant/Constants.java | 10 ++++++++++ .../com/ruoyi/common/constant/UserConstants.java | 8 +++++++- .../project/system/controller/SysMenuController.java | 12 ++++++++++++ .../system/service/impl/SysMenuServiceImpl.java | 2 +- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java index 63ea9ed4..768bc24b 100644 --- a/ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java @@ -19,6 +19,16 @@ public class Constants */ public static final String GBK = "GBK"; + /** + * http请求 + */ + public static final String HTTP = "http://"; + + /** + * https请求 + */ + public static final String HTTPS = "https://"; + /** * 通用成功标识 */ 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 03f12e78..df6992ab 100644 --- a/ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java +++ b/ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java @@ -26,7 +26,7 @@ public class UserConstants /** 部门正常状态 */ public static final String DEPT_NORMAL = "0"; - + /** 部门停用状态 */ public static final String DEPT_DISABLE = "1"; @@ -36,6 +36,12 @@ public class UserConstants /** 是否为系统默认(是) */ public static final String YES = "Y"; + /** 是否菜单外链(是) */ + public static final String YES_FRAME = "0"; + + /** 是否菜单外链(否) */ + public static final String NO_FRAME = "1"; + /** 校验返回结果码 */ public final static String UNIQUE = "0"; public final static String NOT_UNIQUE = "1"; diff --git a/ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java b/ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java index 35ca406e..a958f62c 100644 --- a/ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java +++ b/ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java @@ -12,9 +12,11 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.security.LoginUser; @@ -100,6 +102,11 @@ public class SysMenuController extends BaseController { return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) + && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) + { + return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } menu.setCreateBy(SecurityUtils.getUsername()); return toAjax(menuService.insertMenu(menu)); } @@ -116,6 +123,11 @@ public class SysMenuController extends BaseController { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) + && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) + { + return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } menu.setUpdateBy(SecurityUtils.getUsername()); return toAjax(menuService.updateMenu(menu)); } 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 31eb70b3..d5aff8ed 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 @@ -298,7 +298,7 @@ public class SysMenuServiceImpl implements ISysMenuService { String routerPath = menu.getPath(); // 非外链并且是一级目录 - if (0 == menu.getParentId() && "1".equals(menu.getIsFrame())) + if (0 == menu.getParentId() && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { routerPath = "/" + menu.getPath(); } From bb1324a70ae25bac00eadbd4d14bb0c1faf5d2df Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 26 May 2020 14:33:45 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=80=E7=BA=A7?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=EF=BC=88=E5=92=8C=E4=B8=BB=E9=A1=B5=E5=90=8C?= =?UTF-8?q?=E7=BA=A7=EF=BC=89=E5=9C=A8main=E5=8C=BA=E5=9F=9F=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/store/modules/permission.js | 4 ++ .../ruoyi/common/constant/UserConstants.java | 12 +++++ .../service/impl/SysMenuServiceImpl.java | 53 +++++++++++++++++-- 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 deed4519..bfd59886 100644 --- a/ruoyi-ui/src/store/modules/permission.js +++ b/ruoyi-ui/src/store/modules/permission.js @@ -32,6 +32,10 @@ const permission = { // 遍历后台传来的路由字符串,转换为组件对象 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 df6992ab..69c2b965 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 class UserConstants /** 是否菜单外链(否) */ 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 d5aff8ed..f4933faa 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,15 +142,26 @@ public class SysMenuServiceImpl implements ISysMenuService 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 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 childrenList = new ArrayList(); + 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); } return routers; @@ -297,14 +308,48 @@ public class SysMenuServiceImpl implements ISysMenuService 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获取所有子节点 * From b5c789a2670558453821dbaff039529681c13a5b Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 26 May 2020 18:22:53 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E9=98=B2=E6=AD=A2=E7=A9=BA=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=87=BA=E7=8E=B0=E7=9A=84=E8=AD=A6=E5=91=8A=EF=BC=8C?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=BB=98=E8=AE=A4path=3D/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/store/modules/permission.js | 4 ---- .../ruoyi/project/system/service/impl/SysMenuServiceImpl.java | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js index bfd59886..deed4519 100644 --- a/ruoyi-ui/src/store/modules/permission.js +++ b/ruoyi-ui/src/store/modules/permission.js @@ -32,10 +32,6 @@ const permission = { // 遍历后台传来的路由字符串,转换为组件对象 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/project/system/service/impl/SysMenuServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java index f4933faa..d8562a35 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 @@ -317,7 +317,7 @@ public class SysMenuServiceImpl implements ISysMenuService // 非外链并且是一级目录(类型为菜单) else if (isMeunFrame(menu)) { - routerPath = StringUtils.EMPTY; + routerPath = "/"; } return routerPath; }