From f82716219dd3cb626489449872c94363786172e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=83=9C=E8=B6=85?= <504565038@qq.com> Date: Tue, 19 Dec 2023 10:16:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0getRouters=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/SysLoginController.java | 15 ++ .../boot/system/service/ISysMenuService.java | 4 +- .../service/impl/SysMenuServiceImpl.java | 60 +++++++ .../com/zilber/boot/system/vo/MetaVo.java | 107 +++++++++++++ .../com/zilber/boot/system/vo/RouterVo.java | 149 ++++++++++++++++++ 5 files changed, 334 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/zilber/boot/system/vo/MetaVo.java create mode 100644 src/main/java/com/zilber/boot/system/vo/RouterVo.java diff --git a/src/main/java/com/zilber/boot/system/controller/SysLoginController.java b/src/main/java/com/zilber/boot/system/controller/SysLoginController.java index 11c45ca..72cb47f 100644 --- a/src/main/java/com/zilber/boot/system/controller/SysLoginController.java +++ b/src/main/java/com/zilber/boot/system/controller/SysLoginController.java @@ -2,6 +2,7 @@ package com.zilber.boot.system.controller; import com.zilber.boot.framework.web.service.SysLoginService; import com.zilber.boot.framework.web.service.SysPermissionService; +import com.zilber.boot.system.pojo.SysMenu; import com.zilber.boot.system.pojo.SysUser; import com.zilber.boot.system.service.ISysMenuService; import com.zilber.boot.utils.AjaxResult; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; @@ -75,4 +77,17 @@ public class SysLoginController { return AjaxResult.success(ajax); } + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @GetMapping("getRouters") + public AjaxResult getRouters() + { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + return AjaxResult.success(menuService.buildMenus(menus)); + } + } diff --git a/src/main/java/com/zilber/boot/system/service/ISysMenuService.java b/src/main/java/com/zilber/boot/system/service/ISysMenuService.java index 4cdcdc9..02efe7c 100644 --- a/src/main/java/com/zilber/boot/system/service/ISysMenuService.java +++ b/src/main/java/com/zilber/boot/system/service/ISysMenuService.java @@ -3,6 +3,8 @@ package com.zilber.boot.system.service; import com.zilber.boot.system.pojo.SysMenu; import com.zilber.boot.system.pojo.TreeSelect; +import com.zilber.boot.system.vo.RouterVo; + import java.util.List; import java.util.Set; @@ -67,7 +69,7 @@ public interface ISysMenuService { * @param menus 菜单列表 * @return 路由列表 */ - //public List buildMenus(List menus); + public List buildMenus(List menus); /** * 构建前端所需要树结构 diff --git a/src/main/java/com/zilber/boot/system/service/impl/SysMenuServiceImpl.java b/src/main/java/com/zilber/boot/system/service/impl/SysMenuServiceImpl.java index fffed2c..2a55077 100644 --- a/src/main/java/com/zilber/boot/system/service/impl/SysMenuServiceImpl.java +++ b/src/main/java/com/zilber/boot/system/service/impl/SysMenuServiceImpl.java @@ -11,6 +11,8 @@ import com.zilber.boot.system.pojo.SysRole; import com.zilber.boot.system.pojo.SysUser; import com.zilber.boot.system.pojo.TreeSelect; import com.zilber.boot.system.service.ISysMenuService; +import com.zilber.boot.system.vo.MetaVo; +import com.zilber.boot.system.vo.RouterVo; import com.zilber.boot.utils.SecurityUtils; import com.zilber.boot.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -182,6 +184,64 @@ public class SysMenuServiceImpl implements ISysMenuService return returnList; } + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * @return 路由列表 + */ + @Override + public List buildMenus(List menus) + { + List routers = new LinkedList(); + for (SysMenu menu : menus) + { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) + { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } + else if (isMenuFrame(menu)) + { + router.setMeta(null); + 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(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } + else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) + { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + 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); + } + routers.add(router); + } + return routers; + } + /** * 构建前端所需要下拉树结构 * diff --git a/src/main/java/com/zilber/boot/system/vo/MetaVo.java b/src/main/java/com/zilber/boot/system/vo/MetaVo.java new file mode 100644 index 0000000..96298f3 --- /dev/null +++ b/src/main/java/com/zilber/boot/system/vo/MetaVo.java @@ -0,0 +1,107 @@ +package com.zilber.boot.system.vo; + + +import com.zilber.boot.utils.StringUtils; + +/** + * 路由显示信息 + * + * @author ruoyi + */ +public class MetaVo +{ + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + private String icon; + + /** + * 设置为true,则不会被 缓存 + */ + private boolean noCache; + + /** + * 内链地址(http(s)://开头) + */ + private String link; + + public MetaVo() + { + } + + public MetaVo(String title, String icon) + { + this.title = title; + this.icon = icon; + } + + public MetaVo(String title, String icon, boolean noCache) + { + 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() + { + return noCache; + } + + public void setNoCache(boolean noCache) + { + this.noCache = noCache; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public String getLink() + { + return link; + } + + public void setLink(String link) + { + this.link = link; + } +} diff --git a/src/main/java/com/zilber/boot/system/vo/RouterVo.java b/src/main/java/com/zilber/boot/system/vo/RouterVo.java new file mode 100644 index 0000000..d9b398e --- /dev/null +++ b/src/main/java/com/zilber/boot/system/vo/RouterVo.java @@ -0,0 +1,149 @@ +package com.zilber.boot.system.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +/** + * 路由配置信息 + * + * @author ruoyi + */ +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo +{ + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 路由参数:如 {"id": 1, "name": "ry"} + */ + private String query; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + private List children; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + public boolean getHidden() + { + return hidden; + } + + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + public String getRedirect() + { + return redirect; + } + + public void setRedirect(String redirect) + { + this.redirect = redirect; + } + + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public Boolean getAlwaysShow() + { + return alwaysShow; + } + + public void setAlwaysShow(Boolean alwaysShow) + { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta() + { + return meta; + } + + public void setMeta(MetaVo meta) + { + this.meta = meta; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +}