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/**"); } 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; skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/Meta.java
New file @@ -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; } skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/WebMenuVO.java
New file @@ -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; } 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,16 +192,16 @@ @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); } if (flag.equals("app")){ list = menuService.getAppMenu(roleId); } List<WebMenuVO> list = menuService.getWebMenu(roleId); return R.data(list); } if (flag.equals("app")){ List<MenuVO> list = menuService.getAppMenu(roleId); return R.data(list); } return R.data(null); } /** * 前端按钮数据 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); } 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> 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); } 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; } }