From 0eb4d8d77b0bbd4b72a6bca2deafff11e08164fd Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Fri, 14 Apr 2023 10:44:19 +0800
Subject: [PATCH] web菜单权限控制,menu-app新增字段菜单选中时的图片路径

---
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/MenuServiceImpl.java |   52 +++++++++++++++-
 skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/Meta.java              |   14 ++++
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/MenuController.java    |   11 ++-
 skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/WebMenuVO.java         |   21 +++++++
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.java            |    5 +
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml             |   29 +++++++++
 skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IMenuService.java         |    3 
 skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java          |    6 ++
 skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java                          |    1 
 9 files changed, 131 insertions(+), 11 deletions(-)

diff --git a/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java b/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java
index 00ef104..85c652f 100644
--- a/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java
+++ b/skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java
@@ -55,6 +55,7 @@
 		DEFAULT_SKIP_URL.add("/manager/check-upload");
 		DEFAULT_SKIP_URL.add("/error/**");
 		DEFAULT_SKIP_URL.add("/assets/**");
+		DEFAULT_SKIP_URL.add("/blade-system/menu/dynamicMenu");
 		DEFAULT_SKIP_URL.add("/simulate/**");
 	}
 
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java
index 15f4255..0c1cba2 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java
@@ -94,6 +94,12 @@
 	private String iconPath;
 
 	/**
+	 * 选中图标路径
+	 */
+	@ApiModelProperty(value = "选中图标路径")
+	private String iconPathSelected;
+
+	/**
 	 * 组件类型
 	 */
 	private String components;
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/Meta.java b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/Meta.java
new file mode 100644
index 0000000..692ccf0
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/Meta.java
@@ -0,0 +1,14 @@
+package cn.gistack.system.vo;
+
+import lombok.Data;
+
+@Data
+public class Meta {
+	private String title;
+
+	private String icon;
+
+	private Boolean hasSubMenu;
+
+	private Integer level;
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/WebMenuVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/WebMenuVO.java
new file mode 100644
index 0000000..6dc8ad8
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/WebMenuVO.java
@@ -0,0 +1,21 @@
+package cn.gistack.system.vo;
+
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Data
+public class WebMenuVO {
+	private String id;
+
+	private String parentId;
+
+	private String path;
+
+	private String component;
+
+	private Meta meta;
+
+	private List<WebMenuVO> children;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/MenuController.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/MenuController.java
index 50cb047..41d9c49 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/MenuController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/MenuController.java
@@ -17,6 +17,7 @@
 package cn.gistack.system.controller;
 
 import cn.gistack.system.vo.GrantTreeVO;
+import cn.gistack.system.vo.WebMenuVO;
 import cn.gistack.system.wrapper.MenuWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
@@ -191,15 +192,15 @@
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "动态获取菜单数据", notes = "动态获取菜单数据")
 	public R dynamicMenu(String roleId,String flag){
-		List<MenuVO> list = new ArrayList<>();
 		if (flag.equals("web")){
-			list = menuService.getWebMenu(roleId);
+			List<WebMenuVO> list = menuService.getWebMenu(roleId);
+			return R.data(list);
 		}
-
 		if (flag.equals("app")){
-			list =  menuService.getAppMenu(roleId);
+			List<MenuVO> list =  menuService.getAppMenu(roleId);
+			return R.data(list);
 		}
-		return R.data(list);
+		return R.data(null);
 	}
 
 	/**
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.java
index 060cb82..1e25845 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.java
@@ -19,6 +19,7 @@
 import cn.gistack.system.dto.MenuDTO;
 import cn.gistack.system.entity.Menu;
 import cn.gistack.system.vo.MenuVO;
+import cn.gistack.system.vo.WebMenuVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.core.tool.node.TreeNode;
@@ -183,4 +184,8 @@
 	List<MenuDTO> authRoutes(List<Long> roleIds);
 
 	List<MenuVO> selectAppMenu(@Param("roleId") String roleId);
+
+	WebMenuVO selectWebTopMenu();
+
+	List<WebMenuVO> getChildrenListById(@Param("id")String id,@Param("roleId") String roleId);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml
index 852ea5a..41f5a8b 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml
@@ -481,6 +481,35 @@
         LEFT JOIN BLADE_ROLE_MENU BRM ON BRM.MENU_ID = MENU.ID
         WHERE TOPMENU.NAME='app'
         AND BRM.ROLE_ID = #{roleId}
+        AND MENU.IS_DELETED = 0
+                ORDER BY MENU.SORT ASC
+
+    </select>
+
+    <resultMap id="webMenu" type="cn.gistack.system.vo.WebMenuVO">
+        <result property="id" column="id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="component" column="component"/>
+        <result property="path" column="path"/>
+        <association property="meta" javaType="cn.gistack.system.vo.Meta">
+            <result property="title" column="name"></result>
+            <result property="icon" column="icon_path"></result>
+        </association>
+    </resultMap>
+
+
+    <select id="selectWebTopMenu" resultMap="webMenu">
+        SELECT MENU.id,MENU.parent_id,MENU.component,MENU.path,MENU.name,MENU.ICON_PATH FROM BLADE_MENU MENU
+        LEFT JOIN BLADE_ROLE_MENU BRM ON BRM.MENU_ID = MENU.ID
+        WHERE MENU.NAME='web' AND MENU.PARENT_ID = 0
+        AND MENU.IS_DELETED = 0
+    </select>
+    <select id="getChildrenListById"  resultMap="webMenu">
+        SELECT MENU.id,MENU.parent_id,MENU.component,MENU.path,MENU.name,MENU.icon_path FROM BLADE_MENU MENU
+         LEFT JOIN BLADE_ROLE_MENU BRM ON BRM.MENU_ID = MENU.ID
+         WHERE MENU.parent_id = #{id}
+         AND BRM.ROLE_ID = #{roleId}
+         AND MENU.IS_DELETED = 0 ORDER BY MENU.SORT ASC
     </select>
 
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IMenuService.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IMenuService.java
index 735bfcb..aca2875 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IMenuService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IMenuService.java
@@ -18,6 +18,7 @@
 
 import cn.gistack.system.entity.Menu;
 import cn.gistack.system.vo.MenuVO;
+import cn.gistack.system.vo.WebMenuVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.node.TreeNode;
@@ -165,5 +166,5 @@
 
 	List<MenuVO> getAppMenu(String roleId);
 
-	List<MenuVO> getWebMenu(String roleId);
+	List<WebMenuVO> getWebMenu(String roleId);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/MenuServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/MenuServiceImpl.java
index e27b699..e3a74a8 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/MenuServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/MenuServiceImpl.java
@@ -17,6 +17,8 @@
 package cn.gistack.system.service.impl;
 
 import cn.gistack.system.entity.*;
+import cn.gistack.system.vo.Meta;
+import cn.gistack.system.vo.WebMenuVO;
 import cn.gistack.system.wrapper.MenuWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -278,9 +280,10 @@
 			);
 		}
 		Long cnt = baseMapper.selectCount(menuQueryWrapper);
-		if (cnt > 0L) {
-			throw new ServiceException("菜单名或编号已存在!");
-		}
+		//控制不允许重复菜单名
+//		if (cnt > 0L) {
+//			throw new ServiceException("菜单名或编号已存在!");
+//		}
 		if (menu.getParentId() == null && menu.getId() == null) {
 			menu.setParentId(BladeConstant.TOP_PARENT_ID);
 		}
@@ -300,8 +303,47 @@
 	}
 
 	@Override
-	public List<MenuVO> getWebMenu(String roleId) {
-		return null;
+	public List<WebMenuVO> getWebMenu(String roleId) {
+
+		List<MenuVO> routes = routes(roleId, null);
+
+		List<MenuVO> list = routes.stream().filter(r -> Func.equals(r.getAlias(), "web")).collect(Collectors.toList());
+		MenuVO menuVO = list.get(0);
+		int level = 0;
+		WebMenuVO webMenuVO = buildWebMenuVO(menuVO,level);
+		return webMenuVO.getChildren();
+	}
+
+
+	public WebMenuVO buildWebMenuVO(MenuVO menuVO,int level){
+		WebMenuVO webMenuVO = new WebMenuVO();
+		Meta meta = new Meta();
+		webMenuVO.setMeta(meta);
+		webMenuVO.getMeta().setLevel(level);
+		level++;
+		final int levelTemp = level;
+		//设置基础信息
+		webMenuVO.setPath(menuVO.getPath());
+		webMenuVO.setComponent(menuVO.getComponents());
+		webMenuVO.getMeta().setIcon(menuVO.getIconPath());
+		webMenuVO.getMeta().setTitle(menuVO.getName());
+
+		if (menuVO.getChildren().size()>0){
+			//有子菜单
+			webMenuVO.getMeta().setHasSubMenu(true);
+			List<WebMenuVO> list = new ArrayList<>();
+			menuVO.getChildren().forEach(menu->{
+				WebMenuVO webMenuVO1 = buildWebMenuVO(menu,levelTemp);
+				list.add(webMenuVO1);
+			});
+			webMenuVO.setChildren(list);
+		}else {
+			//无子菜单
+			webMenuVO.getMeta().setHasSubMenu(false);
+		}
+
+		return webMenuVO;
+
 	}
 
 }

--
Gitblit v1.9.3