diff --git a/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java b/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java index d2082010..62a2805b 100644 --- a/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java +++ b/kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java @@ -1,6 +1,7 @@ package com.cloud.kicc.common.data.entity; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -22,7 +23,7 @@ public class TreeEntity extends CommonEntity { private static final long serialVersionUID = 1L; /** 编号 **/ @ApiModelProperty("编号") - private String id; + private String id; /** 父级编号 **/ @ApiModelProperty("父级编号") diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java index fbd83285..7d86e0a3 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java @@ -1,17 +1,11 @@ package com.cloud.kicc.system.api.entity; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.cloud.kicc.common.data.entity.CommonEntity; -import com.fasterxml.jackson.annotation.JsonInclude; +import com.cloud.kicc.common.data.entity.TreeEntity; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import java.util.ArrayList; -import java.util.List; - /** *

* 菜单权限表 @@ -24,26 +18,10 @@ import java.util.List; @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("sys_menu") -public class Menu extends CommonEntity { +public class Menu extends TreeEntity

{ private static final long serialVersionUID = 1L; - /** - * 菜单ID - */ - @TableId - private String id; - - /** - * 菜单名称 - */ - private String name; - - /** - * 父菜单ID - */ - private String parentId; - /** * 菜单类型(M模块 C菜单 F资源) */ @@ -80,15 +58,8 @@ public class Menu extends CommonEntity { private String hideMenu; /** - * 显示顺序 - */ - private Integer sort; - - /** - * 子菜单 + * 是否隐藏子菜单(0显示 1隐藏) */ - @TableField(exist = false) - @JsonInclude(JsonInclude.Include.NON_EMPTY) - private List children = new ArrayList(); + private String hideChildrenMenu; } diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Region.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Region.java index 061a42b0..5b36b965 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Region.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Region.java @@ -1,16 +1,11 @@ package com.cloud.kicc.system.api.entity; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.cloud.kicc.common.data.entity.TreeEntity; -import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import java.util.ArrayList; -import java.util.List; - /** *

* 区域管理 diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/MenuEnum.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/MenuEnum.java index a0cce99d..dfaa5efd 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/MenuEnum.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/MenuEnum.java @@ -25,6 +25,11 @@ public enum MenuEnum { */ MENU_F("F", "菜单按钮"), + /** + * 菜单按钮 + */ + MENU_C("C", "菜单"), + /** * 分割菜单重定向路由URL默认地址 */ @@ -38,8 +43,22 @@ public enum MenuEnum { /** * 菜单0,禁用 */ - MENU_1("1", "禁用"); + MENU_1("1", "禁用"), + + /** + * 前端外链iframe组件 + */ + COMPONENT_IFRAME("Iframe", "前端外链iframe组件"), + + /** + * 前端默认菜单目录根布局组件 + */ + COMPONENT_LAYOUT("Layout", "前端默认多级菜单根布局组件"), + /** + * 前端默认菜单多级目录根布局组件 + */ + COMPONENT_PARENT_LAYOUT("ParentLayout", "前端默认菜单多级目录根布局组件"); /** * 值 diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MenuVo.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MenuVo.java index 977d814a..fcab3fc0 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MenuVo.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MenuVo.java @@ -1,5 +1,6 @@ package com.cloud.kicc.system.api.vo; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import java.io.Serializable; @@ -44,6 +45,7 @@ public class MenuVo implements Serializable { /** * 子路由 */ + @JsonInclude(JsonInclude.Include.NON_NULL) private List children; } diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MetaVo.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MetaVo.java index 74383151..8dab0003 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MetaVo.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MetaVo.java @@ -1,9 +1,11 @@ package com.cloud.kicc.system.api.vo; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; +import java.util.List; /** *

@@ -38,4 +40,19 @@ public class MetaVo implements Serializable { */ private Boolean hideMenu; + /** + * 目录是否隐藏子菜单,当设置 true 的时候该目录下的子菜单不会再侧边栏出现 + */ + private Boolean hideChildrenInMenu; + + /** + * Iframe内嵌显示地址 + */ + private String frameSrc; + + /** + * 子路由 + */ + private List children; + } diff --git a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/bootstrap.yml b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/bootstrap.yml index f332e3e7..a9c3ce32 100644 --- a/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/bootstrap.yml +++ b/kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/bootstrap.yml @@ -7,8 +7,8 @@ spring: cloud: nacos: discovery: - #server-addr: ${NACOS_HOST:127.0.0.1}:${NACOS_PORT:8848} - server-addr: ${NACOS_HOST:kicc-register}:${NACOS_PORT:8848} + server-addr: ${NACOS_HOST:127.0.0.1}:${NACOS_PORT:8848} + #server-addr: ${NACOS_HOST:kicc-register}:${NACOS_PORT:8848} namespace: @profiles.namespace@ config: server-addr: ${spring.cloud.nacos.discovery.server-addr} diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java index 383efc87..967be138 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java @@ -48,29 +48,55 @@ public class MenuServiceImpl extends ServiceImpl implements Me @Override public List buildMenuRoute(List

menus) { + return buildMenuRoute(menus, null); + } + + public List buildMenuRoute(List menus, MenuVo superMenuVo) { List menuVoList = menus.stream().map(menu -> { MenuVo menuVo = new MenuVo(); menuVo.setName(menu.getName()); menuVo.setComponent(menu.getComponent()); - // 检测是否是根节点,0:代表根节点 - if (MenuEnum.MENU_0.getValue().equals(menu.getParentId()) && !ReUtil.isMatch(RegexConstants.MATCHER_URL, menu.getPath())) { - menuVo.setComponent("Layout"); + + // 配置路由设置属性 + MetaVo metaVo = new MetaVo(); + metaVo.setHideMenu(MenuEnum.MENU_1.getValue().equals(menu.getHideMenu())); + metaVo.setIcon(menu.getIcon()); + metaVo.setTitle(menu.getName()); + metaVo.setKeepAlive(menu.getKeepAlive().equals(MenuEnum.MENU_1.getValue())); + metaVo.setHideChildrenInMenu(MenuEnum.MENU_1.getValue().equals(menu.getHideChildrenMenu())); + + // 配置vue-router的规则根级前面必须加上/,要不然会报错 + if (MenuEnum.MENU_0.getValue().equals(menu.getParentId())) { menuVo.setPath(menu.getPath().startsWith("/") ? menu.getPath() : "/".concat(menu.getPath())); - String redirect = "/".concat(handleRouteRedirect(menu)); - menuVo.setRedirect(StrUtil.isNotBlank(redirect) ? redirect : MenuEnum.MENU_ROUTE_DEFAULT_URL.getValue()); } else { menuVo.setPath(menu.getPath()); } - // 配置路由设置属性 - menuVo.setMeta(new MetaVo() - .setTitle(menu.getName()) - .setIcon(menu.getIcon()) - .setHideMenu(MenuEnum.MENU_1.getValue().equals(menu.getHideMenu())) - .setKeepAlive(menu.getKeepAlive().equals(MenuEnum.MENU_1.getValue()))); + // 菜单目录配置,支持多级子菜单 + if (StrUtil.equalsIgnoreCase(MenuEnum.MENU_M.getValue(), menu.getType())) { + if (MenuEnum.MENU_0.getValue().equals(menu.getParentId())) { + menuVo.setComponent(MenuEnum.COMPONENT_LAYOUT.getValue()); + String redirect = "/".concat(handleRouteRedirect(menu)); + menuVo.setRedirect(StrUtil.isNotBlank(redirect) ? redirect : MenuEnum.MENU_ROUTE_DEFAULT_URL.getValue()); + } else { + menuVo.setComponent(MenuEnum.COMPONENT_PARENT_LAYOUT.getValue()); + menuVo.setRedirect(superMenuVo.getRedirect()); + } + + // 外链配置,自动识别填充IFRAME (两种模式,跳转页面) + } else if (StrUtil.equalsIgnoreCase(MenuEnum.MENU_C.getValue(), menu.getType()) && ReUtil.isMatch(RegexConstants.MATCHER_URL, menu.getPath())) { + menuVo.setComponent(MenuEnum.COMPONENT_IFRAME.getValue()); + + // 外链配置 (两种模式,内嵌页面) + } else if (StrUtil.equalsIgnoreCase(MenuEnum.MENU_C.getValue(), menu.getType()) && ReUtil.isMatch(RegexConstants.MATCHER_URL, menu.getComponent())) { + menuVo.setComponent(MenuEnum.COMPONENT_IFRAME.getValue()); + metaVo.setFrameSrc(menu.getComponent()); + } + + menuVo.setMeta(metaVo); List childrenMenus = menu.getChildren(); if (childrenMenus != null && childrenMenus.size() > 0 && MenuEnum.MENU_M.getValue().equals(menu.getType())) { - menuVo.setChildren(buildMenuRoute(childrenMenus)); + menuVo.setChildren(buildMenuRoute(childrenMenus, menuVo)); } return menuVo; }).collect(Collectors.toList()); @@ -132,5 +158,4 @@ public class MenuServiceImpl extends ServiceImpl implements Me return menuList; } - } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/MenuMapper.xml b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/MenuMapper.xml index 0d1ccb0c..4b6f9c97 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/MenuMapper.xml +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/MenuMapper.xml @@ -14,6 +14,7 @@ +