From e33ce57f613b129622d1bec6d8fa94d13befd7af Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期日, 11 七月 2021 16:40:07 +0800 Subject: [PATCH] 菜单路由配置支持内链访问 --- src/main/java/com/ruoyi/project/system/domain/vo/MetaVo.java | 35 +++++++++++++++++ src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java | 39 ++++++++++++++++++- src/main/java/com/ruoyi/common/constant/UserConstants.java | 3 + src/main/java/com/ruoyi/project/system/controller/SysIndexController.java | 2 src/main/java/com/ruoyi/project/system/controller/SysMenuController.java | 7 +-- src/main/java/com/ruoyi/common/utils/StringUtils.java | 12 ++++++ 6 files changed, 90 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/ruoyi/common/constant/UserConstants.java b/src/main/java/com/ruoyi/common/constant/UserConstants.java index d9f838e..a4e3992 100644 --- a/src/main/java/com/ruoyi/common/constant/UserConstants.java +++ b/src/main/java/com/ruoyi/common/constant/UserConstants.java @@ -57,6 +57,9 @@ /** ParentView缁勪欢鏍囪瘑 */ public final static String PARENT_VIEW = "ParentView"; + /** InnerLink缁勪欢鏍囪瘑 */ + public final static String INNER_LINK = "InnerLink"; + /** 鏍¢獙杩斿洖缁撴灉鐮� */ public final static String UNIQUE = "0"; public final static String NOT_UNIQUE = "1"; diff --git a/src/main/java/com/ruoyi/common/utils/StringUtils.java b/src/main/java/com/ruoyi/common/utils/StringUtils.java index 1f0d072..72ddb56 100644 --- a/src/main/java/com/ruoyi/common/utils/StringUtils.java +++ b/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.text.StrFormatter; /** @@ -261,6 +262,17 @@ } /** + * 鏄惁涓篽ttp(s)://寮�澶� + * + * @param link 閾炬帴 + * @return 缁撴灉 + */ + public static boolean ishttp(String link) + { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** * 瀛楃涓茶浆set * * @param str 瀛楃涓� diff --git a/src/main/java/com/ruoyi/project/system/controller/SysIndexController.java b/src/main/java/com/ruoyi/project/system/controller/SysIndexController.java index b259455..0837663 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysIndexController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysIndexController.java @@ -24,6 +24,6 @@ @RequestMapping("/") public String index() { - return StringUtils.format("娆㈣繋浣跨敤RuoYi鍚庡彴绠$悊妗嗘灦锛屽綋鍓嶇増鏈細v{}", ruoyiConfig.getVersion()); + return StringUtils.format("娆㈣繋浣跨敤{}鍚庡彴绠$悊妗嗘灦锛屽綋鍓嶇増鏈細v{}锛岃閫氳繃鍓嶇鍦板潃璁块棶銆�", ruoyiConfig.getName(), ruoyiConfig.getVersion()); } } diff --git a/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java b/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java index 0f8b4c6..a59802c 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java @@ -12,7 +12,6 @@ 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; @@ -102,8 +101,7 @@ { return AjaxResult.error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪"); } - else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) - && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return AjaxResult.error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧�蹇呴』浠ttp(s)://寮�澶�"); } @@ -123,8 +121,7 @@ { return AjaxResult.error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪"); } - else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) - && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return AjaxResult.error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧�蹇呴』浠ttp(s)://寮�澶�"); } diff --git a/src/main/java/com/ruoyi/project/system/domain/vo/MetaVo.java b/src/main/java/com/ruoyi/project/system/domain/vo/MetaVo.java index 24bea97..33aa372 100644 --- a/src/main/java/com/ruoyi/project/system/domain/vo/MetaVo.java +++ b/src/main/java/com/ruoyi/project/system/domain/vo/MetaVo.java @@ -1,5 +1,7 @@ package com.ruoyi.project.system.domain.vo; +import com.ruoyi.common.utils.StringUtils; + /** * 璺敱鏄剧ず淇℃伅 * @@ -22,6 +24,11 @@ */ private boolean noCache; + /** + * 鍐呴摼鍦板潃锛坔ttp(s)://寮�澶达級 + */ + private String link; + public MetaVo() { } @@ -37,6 +44,24 @@ this.title = title; this.icon = icon; this.noCache = noCache; + } + + public MetaVo(String title, String icon, String link) + { + this.title = title; + this.icon = icon; + this.link = link; + } + + public MetaVo(String title, String icon, boolean noCache, String link) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) + { + this.link = link; + } } public boolean isNoCache() @@ -68,4 +93,14 @@ { this.icon = icon; } + + public String getLink() + { + return link; + } + + public void setLink(String link) + { + this.link = link; + } } diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java index acdb4c5..27951d2 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java @@ -10,6 +10,7 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; @@ -150,7 +151,7 @@ router.setName(getRouteName(menu)); router.setPath(getRouterPath(menu)); router.setComponent(getComponent(menu)); - router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()))); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); List<SysMenu> cMenus = menu.getChildren(); if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { @@ -166,7 +167,21 @@ children.setPath(menu.getPath()); children.setComponent(menu.getComponent()); children.setName(StringUtils.capitalize(menu.getPath())); - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()))); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) + { + router.setMeta(null); + router.setPath("/inner"); + List<RouterVo> childrenList = new ArrayList<RouterVo>(); + RouterVo children = new RouterVo(); + String routerPath = StringUtils.replaceEach(menu.getPath(), new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(StringUtils.capitalize(routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); childrenList.add(children); router.setChildren(childrenList); } @@ -338,6 +353,11 @@ public String getRouterPath(SysMenu menu) { String routerPath = menu.getPath(); + // 鍐呴摼鎵撳紑澶栫綉鏂瑰紡 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + routerPath = StringUtils.replaceEach(routerPath, new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); + } // 闈炲閾惧苟涓旀槸涓�绾х洰褰曪紙绫诲瀷涓虹洰褰曪級 if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) && UserConstants.NO_FRAME.equals(menu.getIsFrame())) @@ -364,6 +384,10 @@ if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { component = menu.getComponent(); + } + else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + component = UserConstants.INNER_LINK; } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { @@ -396,6 +420,17 @@ } /** + * 鏄惁涓哄唴閾剧粍浠� + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean isInnerLink(SysMenu menu) + { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** * 鏍规嵁鐖惰妭鐐圭殑ID鑾峰彇鎵�鏈夊瓙鑺傜偣 * * @param list 鍒嗙被琛� -- Gitblit v1.9.3