guoshilong
2023-04-14 0eb4d8d77b0bbd4b72a6bca2deafff11e08164fd
web菜单权限控制,menu-app新增字段菜单选中时的图片路径
7 files modified
2 files added
146 ■■■■■ changed files
skjcmanager/skjcmanager-gateway/src/main/java/cn/gistack/gateway/provider/AuthProvider.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/entity/Menu.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/Meta.java 14 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-system-api/src/main/java/cn/gistack/system/vo/WebMenuVO.java 21 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/controller/MenuController.java 15 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/mapper/MenuMapper.xml 29 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/IMenuService.java 3 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/MenuServiceImpl.java 52 ●●●●● patch | view | raw | blame | history
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;
    }
}