Browse Source

🚀 菜单大调整,支持外链 内嵌 多级菜单

master
wangxiang 3 years ago
parent
commit
d0faf2105a
  1. 3
      kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java
  2. 37
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java
  3. 5
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Region.java
  4. 21
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/MenuEnum.java
  5. 2
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MenuVo.java
  6. 17
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MetaVo.java
  7. 4
      kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/bootstrap.yml
  8. 51
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java
  9. 1
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/MenuMapper.xml

3
kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/TreeEntity.java

@ -1,6 +1,7 @@ @@ -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<T> extends CommonEntity { @@ -22,7 +23,7 @@ public class TreeEntity<T> extends CommonEntity {
private static final long serialVersionUID = 1L;
/** 编号 **/
@ApiModelProperty("编号")
private String id;
private String id;
/** 父级编号 **/
@ApiModelProperty("父级编号")

37
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java

@ -1,17 +1,11 @@ @@ -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;
/**
*<p>
* 菜单权限表
@ -24,26 +18,10 @@ 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<Menu> {
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 { @@ -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<Menu> children = new ArrayList();
private String hideChildrenMenu;
}

5
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Region.java

@ -1,16 +1,11 @@ @@ -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;
/**
*<p>
* 区域管理

21
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 { @@ -25,6 +25,11 @@ public enum MenuEnum {
*/
MENU_F("F", "菜单按钮"),
/**
* 菜单按钮
*/
MENU_C("C", "菜单"),
/**
* 分割菜单重定向路由URL默认地址
*/
@ -38,8 +43,22 @@ public enum MenuEnum { @@ -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", "前端默认菜单多级目录根布局组件");
/**
*

2
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MenuVo.java

@ -1,5 +1,6 @@ @@ -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 { @@ -44,6 +45,7 @@ public class MenuVo implements Serializable {
/**
* 子路由
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<MenuVo> children;
}

17
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/vo/MetaVo.java

@ -1,9 +1,11 @@ @@ -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;
/**
*<p>
@ -38,4 +40,19 @@ public class MetaVo implements Serializable { @@ -38,4 +40,19 @@ public class MetaVo implements Serializable {
*/
private Boolean hideMenu;
/**
* 目录是否隐藏子菜单当设置 true 的时候该目录下的子菜单不会再侧边栏出现
*/
private Boolean hideChildrenInMenu;
/**
* Iframe内嵌显示地址
*/
private String frameSrc;
/**
* 子路由
*/
private List<MenuVo> children;
}

4
kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/resources/bootstrap.yml

@ -7,8 +7,8 @@ spring: @@ -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}

51
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<MenuMapper, Menu> implements Me @@ -48,29 +48,55 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
@Override
public List<MenuVo> buildMenuRoute(List<Menu> menus) {
return buildMenuRoute(menus, null);
}
public List<MenuVo> buildMenuRoute(List<Menu> menus, MenuVo superMenuVo) {
List<MenuVo> 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<Menu> 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<MenuMapper, Menu> implements Me @@ -132,5 +158,4 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
return menuList;
}
}

1
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/resources/mapper/MenuMapper.xml

@ -14,6 +14,7 @@ @@ -14,6 +14,7 @@
<result property="sort" column="sort"/>
<result property="keepAlive" column="keep_alive"/>
<result property="hideMenu" column="hide_menu"/>
<result property="hideChildrenMenu" column="hide_children_menu"/>
<result property="createById" column="create_by_id"/>
<result property="createByName" column="create_by_name"/>
<result property="createTime" column="create_time"/>

Loading…
Cancel
Save