【menu】整理菜单

pull/3/head
fengshuonan 2021-02-08 19:26:06 +08:00
parent 1912687ff3
commit 43055858aa
25 changed files with 276 additions and 572 deletions

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.system.exception.enums;
package cn.stylefeng.roses.kernel.system.exception.enums.menu;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.system.exception.enums;
package cn.stylefeng.roses.kernel.system.exception.enums.menu;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.exception.AbstractExceptionEnum;
@ -20,7 +20,7 @@ public enum SysMenuExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
MENU_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "63", "菜单不存在");
MENU_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "63", "菜单不存在菜单id{}");
private final String errorCode;

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.system.pojo;
package cn.stylefeng.roses.kernel.system.pojo.menu;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.validator.validators.unique.TableUniqueValue;

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.system.pojo;
package cn.stylefeng.roses.kernel.system.pojo.menu;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.validator.validators.flag.FlagValue;

View File

@ -1,62 +0,0 @@
package cn.stylefeng.roses.kernel.system.pojo.menu.antd;
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
import lombok.Data;
import java.util.List;
/**
* antd
*
* @author fengshuonan
* @date 2020/6/9 12:42
*/
@Data
public class AntdBaseTreeNode implements AbstractTreeNode {
/**
*
*/
private Long id;
/**
* id
*/
private Long parentId;
/**
*
*/
private String title;
/**
*
*/
private String value;
/**
*
*/
private Integer weight;
/**
*
*/
private List children;
@Override
public String getNodeId() {
return this.id.toString();
}
@Override
public String getNodeParentId() {
return this.parentId.toString();
}
@Override
public void setChildrenNodes(List childrenNodes) {
this.children = children;
}
}

View File

@ -1,85 +0,0 @@
package cn.stylefeng.roses.kernel.system.pojo.menu.antd;
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
import lombok.Data;
import java.util.List;
/**
*
*
* @author fengshuonan
* @date 2020/4/17 17:35
*/
@Data
public class AntdIndexMenuTreeNode implements AbstractTreeNode {
/**
* id
*/
private Long id;
/**
* id
*/
private Long pid;
/**
*
*/
private String name;
/**
*
*/
private String path;
/**
*
*/
private String router;
/**
*
*/
private Meta meta;
/**
*
*/
private List<AntdIndexMenuTreeNode> children;
/**
*
*/
@Data
public static class Meta {
/**
*
*/
public String icon;
/**
* , false
*/
public Boolean invisible = false;
}
@Override
public String getNodeId() {
return this.id.toString();
}
@Override
public String getNodeParentId() {
return this.pid.toString();
}
@Override
public void setChildrenNodes(List childrenNodes) {
this.children = childrenNodes;
}
}

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.system.pojo.menu.other;
package cn.stylefeng.roses.kernel.system.pojo.menu.antd;
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
import lombok.Data;
@ -13,7 +13,7 @@ import java.util.List;
* @date 2020/4/5 12:03
*/
@Data
public class MenuSelectTreeNode implements AbstractTreeNode {
public class AntdMenuSelectTreeNode implements AbstractTreeNode {
/**
*

View File

@ -6,13 +6,13 @@ import lombok.Data;
import java.util.List;
/**
*
* antd vueservice
*
* @author majianguo
* @date 2021/1/7 15:18
*/
@Data
public class AntdSysMenuResponse {
public class AntdSysMenuDTO {
/**
*

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.menu.modular.pojo;
package cn.stylefeng.roses.kernel.system.pojo.menu.antd;
import lombok.Data;
@ -11,7 +11,7 @@ import java.util.List;
* @date 2021/1/7 18:16
*/
@Data
public class AuthorityItem {
public class AntdvMenuAuthorityItem {
/**
*

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.menu.modular.pojo;
package cn.stylefeng.roses.kernel.system.pojo.menu.antd;
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
import lombok.Data;
@ -47,7 +47,7 @@ public class AntdvMenuItem implements AbstractTreeNode {
/**
*
*/
private AuthorityItem authority;
private AntdvMenuAuthorityItem authority;
/**
*

View File

@ -5,13 +5,13 @@ import lombok.Data;
import java.util.List;
/**
* Layui
* Layuibeetl
*
* @author fengshuonan
* @date 2020/12/27 18:39
*/
@Data
public class LayuiAppIndexMenus {
public class LayuiAppIndexMenusVO {
/**
*

View File

@ -6,7 +6,7 @@ import lombok.Data;
import java.util.List;
/**
* Layui
* Layui
*
* @author fengshuonan
* @date 2020/12/27 18:36

View File

@ -8,7 +8,7 @@ import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.system.pojo.SysMenuButtonRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuButtonRequest;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@ -53,32 +53,6 @@ public class SysMenuButtonController {
return new SuccessResponseData();
}
/**
*
*
* @param sysMenuButtonRequest id
* @author luojie
* @date 2021/1/9 11:53
*/
@GetResource(name = "获取菜单按钮详情", path = "/sysMenuButton/detail")
public ResponseData detail(@Validated(SysMenuButtonRequest.detail.class) SysMenuButtonRequest sysMenuButtonRequest) {
SysMenuButton detail = sysMenuButtonService.detail(sysMenuButtonRequest);
return new SuccessResponseData(detail);
}
/**
*
*
* @param sysMenuButtonRequest
* @author luojie
* @date 2021/1/9 12:00
*/
@PostResource(name = "编辑系统菜单按钮", path = "/sysMenuButton/edit")
public ResponseData edit(@RequestBody @Validated(SysMenuButtonRequest.edit.class) SysMenuButtonRequest sysMenuButtonRequest) {
sysMenuButtonService.edit(sysMenuButtonRequest);
return new SuccessResponseData();
}
/**
*
*
@ -105,6 +79,32 @@ public class SysMenuButtonController {
return new SuccessResponseData();
}
/**
*
*
* @param sysMenuButtonRequest
* @author luojie
* @date 2021/1/9 12:00
*/
@PostResource(name = "编辑系统菜单按钮", path = "/sysMenuButton/edit")
public ResponseData edit(@RequestBody @Validated(SysMenuButtonRequest.edit.class) SysMenuButtonRequest sysMenuButtonRequest) {
sysMenuButtonService.edit(sysMenuButtonRequest);
return new SuccessResponseData();
}
/**
*
*
* @param sysMenuButtonRequest id
* @author luojie
* @date 2021/1/9 11:53
*/
@GetResource(name = "获取菜单按钮详情", path = "/sysMenuButton/detail")
public ResponseData detail(@Validated(SysMenuButtonRequest.detail.class) SysMenuButtonRequest sysMenuButtonRequest) {
SysMenuButton detail = sysMenuButtonService.detail(sysMenuButtonRequest);
return new SuccessResponseData(detail);
}
/**
*
*

View File

@ -1,7 +1,6 @@
package cn.stylefeng.roses.kernel.menu.modular.controller;
import cn.stylefeng.roses.kernel.menu.modular.factory.AntdMenusFactory;
import cn.stylefeng.roses.kernel.menu.modular.pojo.AntdvMenuItem;
import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuService;
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
@ -9,8 +8,9 @@ import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.rule.tree.ztree.ZTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.SysMenuRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuResponse;
import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuDTO;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdvMenuItem;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiMenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest;
import org.springframework.validation.annotation.Validated;
@ -81,29 +81,29 @@ public class SysMenuController {
}
/**
*
*
* @author fengshuonan
* @date 2020/3/20 21:23
*/
@GetResource(name = "系统菜单列表(树)", path = "/sysMenu/list")
public ResponseData list(SysMenuRequest sysMenuRequest) {
return new SuccessResponseData(sysMenuService.findList(sysMenuRequest));
}
/**
* layui
* layui
*
* @author fengshuonan
* @date 2021/1/6 17:09
*/
@GetResource(name = "获取菜单列表layui版本", path = "/sysMenu/layuiList")
public ResponseData layuiList(SysMenuRequest sysMenuRequest) {
return new SuccessResponseData(sysMenuService.layuiList(sysMenuRequest));
return new SuccessResponseData(sysMenuService.findList(sysMenuRequest));
}
/**
* layui
* antd vue
*
* @author fengshuonan
* @date 2020/3/20 21:23
*/
@GetResource(name = "系统菜单列表(树)", path = "/sysMenu/list")
public ResponseData list(SysMenuRequest sysMenuRequest) {
return new SuccessResponseData(sysMenuService.findListWithTreeStructure(sysMenuRequest));
}
/**
* layui
*
* @author fengshuonan
* @date 2021/1/6 17:09
@ -114,18 +114,7 @@ public class SysMenuController {
}
/**
* Antd Vue
*
* @author fengshuonan
* @date 2020/4/19 15:50
*/
@GetResource(name = "获取主页左侧菜单列表Antd Vue", path = "/sysMenu/getIndexMenuAntdVue", requiredPermission = false)
public ResponseData getAppMenus(@Validated(SysMenuRequest.getAppMenusAntdVue.class) SysMenuRequest sysMenuRequest) {
return new SuccessResponseData(sysMenuService.getAntDVueIndexMenus(sysMenuRequest.getAppCode()));
}
/**
*
* antd vue
*
* @author fengshuonan
* @date 2020/3/27 15:55
@ -135,17 +124,6 @@ public class SysMenuController {
return new SuccessResponseData(sysMenuService.tree(sysMenuRequest));
}
/**
*
*
* @author fengshuonan
* @date 2020/4/5 15:00
*/
@GetResource(name = "获取系统菜单树,用于给角色授权时选择", path = "/sysMenu/treeForGrant")
public ResponseData treeForGrant(SysMenuRequest sysMenuRequest) {
return new SuccessResponseData(sysMenuService.treeForGrant(sysMenuRequest));
}
/**
* antd vue
*
@ -154,29 +132,29 @@ public class SysMenuController {
*/
@GetResource(name = "获取系统所有菜单适用于登录后获取左侧菜单适配antd vue版本", path = "/sysMenu/getSystemAllMenusAntdv", requiredPermission = false)
public ResponseData getSystemAllMenusAntdv() {
List<AntdSysMenuResponse> sysMenuResponses = sysMenuService.getSystemAllMenusAntdv();
List<AntdSysMenuDTO> sysMenuResponses = sysMenuService.getSystemAllMenusAntdv();
List<AntdvMenuItem> totalMenus = AntdMenusFactory.createTotalMenus(sysMenuResponses);
return new SuccessResponseData(totalMenus);
}
/**
* ()layui使
* layui使
*
* @author majianguo
* @date 2021/1/9 17:10
*/
@GetResource(name = "获取系统菜单树(包含按钮),用于给角色授权时选择", path = "/sysMenu/menuAndButtonTree")
@GetResource(name = "获取系统菜单和按钮的树用于角色分配菜单按钮layui版本使用", path = "/sysMenu/menuAndButtonTree")
public List<LayuiMenuAndButtonTreeResponse> menuAndButtonTree(SysRoleRequest sysRoleRequest) {
return sysMenuService.getMenuAndButtonTree(sysRoleRequest, true);
}
/**
* ()antd vue使
* antd vue使
*
* @author majianguo
* @date 2021/1/9 17:10
*/
@GetResource(name = "获取系统菜单树(包含按钮),用于给角色授权时选择", path = "/sysMenu/menuAndButtonTreeChildren")
@GetResource(name = "获取系统菜单和按钮的树用于角色分配菜单按钮antd vue版本使用", path = "/sysMenu/menuAndButtonTreeChildren")
public ResponseData menuAndButtonTreeChildren(SysRoleRequest sysRoleRequest) {
List<LayuiMenuAndButtonTreeResponse> treeResponseList = sysMenuService.getMenuAndButtonTree(sysRoleRequest, false);
return new SuccessResponseData(treeResponseList);

View File

@ -2,13 +2,13 @@ package cn.stylefeng.roses.kernel.menu.modular.factory;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
import cn.stylefeng.roses.kernel.menu.modular.pojo.AntdvMenuItem;
import cn.stylefeng.roses.kernel.menu.modular.pojo.AuthorityItem;
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuResponse;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdMenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuDTO;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdvMenuAuthorityItem;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdvMenuItem;
import java.util.ArrayList;
import java.util.List;
@ -27,37 +27,37 @@ public class AntdMenusFactory {
* @author fengshuonan
* @date 2021/1/7 18:17
*/
public static List<AntdvMenuItem> createTotalMenus(List<AntdSysMenuResponse> antdSysMenuResponses) {
public static List<AntdvMenuItem> createTotalMenus(List<AntdSysMenuDTO> sysMenuRespons) {
ArrayList<AntdvMenuItem> antdvMenuItems = new ArrayList<>(antdSysMenuResponses.size());
ArrayList<AntdvMenuItem> antdvMenuItems = new ArrayList<>(sysMenuRespons.size());
// 实体转化
for (AntdSysMenuResponse antdSysMenuResponse : antdSysMenuResponses) {
for (AntdSysMenuDTO antdSysMenuDTO : sysMenuRespons) {
AntdvMenuItem antdvMenuItem = new AntdvMenuItem();
// 填充id pid name用于构建树
antdvMenuItem.setMenuId(antdSysMenuResponse.getMenuId());
antdvMenuItem.setMenuParentId(antdSysMenuResponse.getMenuParentId());
antdvMenuItem.setName(antdSysMenuResponse.getMenuName());
antdvMenuItem.setMenuId(antdSysMenuDTO.getMenuId());
antdvMenuItem.setMenuParentId(antdSysMenuDTO.getMenuParentId());
antdvMenuItem.setName(antdSysMenuDTO.getMenuName());
// 填充路由等信息
antdvMenuItem.setRouter(antdSysMenuResponse.getAntdvRouter());
antdvMenuItem.setIcon(antdSysMenuResponse.getAntdvIcon());
antdvMenuItem.setRouter(antdSysMenuDTO.getAntdvRouter());
antdvMenuItem.setIcon(antdSysMenuDTO.getAntdvIcon());
// 填充是否隐藏
antdvMenuItem.setInvisible(YesOrNotEnum.N.getCode().equals(antdSysMenuResponse.getVisible()));
antdvMenuItem.setInvisible(YesOrNotEnum.N.getCode().equals(antdSysMenuDTO.getVisible()));
// 填充哪个角色绑定了这个菜单
List<SimpleRoleInfo> roles = antdSysMenuResponse.getRoles();
AuthorityItem authorityItem = new AuthorityItem();
List<SimpleRoleInfo> roles = antdSysMenuDTO.getRoles();
AntdvMenuAuthorityItem antdvAuthorityItem = new AntdvMenuAuthorityItem();
if (roles != null && roles.size() > 0) {
ArrayList<String> auths = new ArrayList<>();
for (SimpleRoleInfo role : roles) {
auths.add(role.getRoleCode());
}
authorityItem.setPermission(auths);
authorityItem.setRole(auths);
antdvMenuItem.setAuthority(authorityItem);
antdvAuthorityItem.setPermission(auths);
antdvAuthorityItem.setRole(auths);
antdvMenuItem.setAuthority(antdvAuthorityItem);
}
antdvMenuItems.add(antdvMenuItem);
@ -82,69 +82,27 @@ public class AntdMenusFactory {
antdvMenuItem.setName("根节点");
antdvMenuItem.setMenuId(TreeConstants.DEFAULT_PARENT_ID);
antdvMenuItem.setMenuParentId(TreeConstants.VIRTUAL_ROOT_PARENT_ID);
antdvMenuItem.setInvisible(false);
antdvMenuItem.setAuthority(null);
return antdvMenuItem;
}
/**
* vue antd admin
* menu
*
* @author fengshuonan
* @date 2020/12/30 20:28
* @date 2020/11/23 21:54
*/
public static List<AntdIndexMenuTreeNode> convertSysMenuToLoginMenu(List<SysMenu> sysMenuList) {
List<AntdIndexMenuTreeNode> antDesignMenuTreeNodeList = new ArrayList<>(sysMenuList.size());
// 添加根节点
antDesignMenuTreeNodeList.add(createRootMenuNode());
for (SysMenu sysMenu : sysMenuList) {
AntdIndexMenuTreeNode antdIndexMenuTreeNode = new AntdIndexMenuTreeNode();
// 设置菜单id
antdIndexMenuTreeNode.setId(sysMenu.getMenuId());
// 设置父级id
antdIndexMenuTreeNode.setPid(sysMenu.getMenuParentId());
// 菜单名称
antdIndexMenuTreeNode.setName(sysMenu.getMenuName());
// 菜单路由地址
antdIndexMenuTreeNode.setPath(sysMenu.getAntdvRouter());
antdIndexMenuTreeNode.setRouter(sysMenu.getAntdvRouter());
AntdIndexMenuTreeNode.Meta mateItem = new AntdIndexMenuTreeNode.Meta();
// 菜单图标
mateItem.setIcon(sysMenu.getAntdvIcon());
// 设置是否隐藏true就是隐藏
mateItem.setInvisible(YesOrNotEnum.N.getCode().equals(sysMenu.getVisible()));
antdIndexMenuTreeNode.setMeta(mateItem);
antDesignMenuTreeNodeList.add(antdIndexMenuTreeNode);
}
return antDesignMenuTreeNodeList;
}
/**
*
*
* @author fengshuonan
* @date 2020/12/30 20:38
*/
private static AntdIndexMenuTreeNode createRootMenuNode() {
AntdIndexMenuTreeNode antdIndexMenuTreeNode = new AntdIndexMenuTreeNode();
antdIndexMenuTreeNode.setId(TreeConstants.DEFAULT_PARENT_ID);
antdIndexMenuTreeNode.setPid(TreeConstants.VIRTUAL_ROOT_PARENT_ID);
antdIndexMenuTreeNode.setName("根虚拟节点");
antdIndexMenuTreeNode.setPath("/");
return antdIndexMenuTreeNode;
public static AntdMenuSelectTreeNode parseMenuBaseTreeNode(SysMenu sysMenu) {
AntdMenuSelectTreeNode menuTreeNode = new AntdMenuSelectTreeNode();
menuTreeNode.setId(sysMenu.getMenuId());
menuTreeNode.setParentId(sysMenu.getMenuParentId());
menuTreeNode.setValue(String.valueOf(sysMenu.getMenuId()));
menuTreeNode.setTitle(sysMenu.getMenuName());
menuTreeNode.setWeight(sysMenu.getMenuSort());
return menuTreeNode;
}
}

View File

@ -11,7 +11,7 @@ import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil;
import cn.stylefeng.roses.kernel.system.AppServiceApi;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenusVO;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiIndexMenuTreeNode;
import java.util.*;
@ -31,11 +31,11 @@ public class LayuiMenusFactory {
* @author fengshuonan
* @date 2020/12/27 19:07
*/
public static List<LayuiAppIndexMenus> createLayuiAppIndexMenus(List<SysMenu> sysMenuList) {
public static List<LayuiAppIndexMenusVO> createLayuiAppIndexMenus(List<SysMenu> sysMenuList) {
String contextPath = HttpServletUtil.getRequest().getContextPath();
ArrayList<LayuiAppIndexMenus> resultList = new ArrayList<>();
ArrayList<LayuiAppIndexMenusVO> resultList = new ArrayList<>();
// 找出用户有多少个应用的菜单
Set<String> appCodes = new HashSet<>();
@ -78,11 +78,11 @@ public class LayuiMenusFactory {
List<LayuiIndexMenuTreeNode> layuiIndexMenuTreeNodeList = new DefaultTreeBuildFactory<LayuiIndexMenuTreeNode>().doTreeBuild(layuiIndexMenuTreeNodes);
// 将appCode和对应的树包装为实体
LayuiAppIndexMenus layuiAppIndexMenus = new LayuiAppIndexMenus();
layuiAppIndexMenus.setAppCode(appCode);
layuiAppIndexMenus.setAppName(getAppNameByAppCode(appCode));
layuiAppIndexMenus.setLayuiIndexMenuTreeNodes(layuiIndexMenuTreeNodeList);
resultList.add(layuiAppIndexMenus);
LayuiAppIndexMenusVO layuiAppIndexMenusVO = new LayuiAppIndexMenusVO();
layuiAppIndexMenusVO.setAppCode(appCode);
layuiAppIndexMenusVO.setAppName(getAppNameByAppCode(appCode));
layuiAppIndexMenusVO.setLayuiIndexMenuTreeNodes(layuiIndexMenuTreeNodeList);
resultList.add(layuiAppIndexMenusVO);
}
return resultList;

View File

@ -62,4 +62,5 @@ public class MenuButtonFactory {
return sysMenuButtonList;
}
}

View File

@ -1,30 +0,0 @@
package cn.stylefeng.roses.kernel.menu.modular.factory.common;
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode;
/**
* antd
*
* @author fengshuonan
* @date 2020/11/23 21:58
*/
public class CommonMenusFactory {
/**
* menu
*
* @author fengshuonan
* @date 2020/11/23 21:54
*/
public static MenuSelectTreeNode parseMenuBaseTreeNode(SysMenu sysMenu) {
MenuSelectTreeNode menuTreeNode = new MenuSelectTreeNode();
menuTreeNode.setId(sysMenu.getMenuId());
menuTreeNode.setParentId(sysMenu.getMenuParentId());
menuTreeNode.setValue(String.valueOf(sysMenu.getMenuId()));
menuTreeNode.setTitle(sysMenu.getMenuName());
menuTreeNode.setWeight(sysMenu.getMenuSort());
return menuTreeNode;
}
}

View File

@ -1,7 +1,7 @@
package cn.stylefeng.roses.kernel.menu.modular.mapper;
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuResponse;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuDTO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
@ -16,11 +16,13 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
/**
* antd vue
* <p>
* 访
*
* @return
* @return
* @author majianguo
* @date 2021/1/7 15:27
*/
List<AntdSysMenuResponse> getSystemAllMenus();
List<AntdSysMenuDTO> getSystemAllMenus();
}

View File

@ -2,19 +2,4 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.stylefeng.roses.kernel.menu.modular.mapper.SysMenuButtonMapper">
<!-- 通用查询映射结果 -->
<resultMap type="cn.stylefeng.roses.kernel.menu.modular.entity.SysMenuButton" id="SysMenuButton">
<result property="buttonId" column="button_id" jdbcType="INTEGER"/>
<result property="menuId" column="menu_id" jdbcType="INTEGER"/>
<result property="buttonName" column="button_name" jdbcType="VARCHAR"/>
<result property="buttonCode" column="button_code" jdbcType="VARCHAR"/>
<result property="delFlag" column="del_flag" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="createUser" column="create_user" jdbcType="INTEGER"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="updateUser" column="update_user" jdbcType="INTEGER"/>
</resultMap>
</mapper>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.stylefeng.roses.kernel.menu.modular.mapper.SysMenuMapper">
<resultMap id="systemMenuAndRole" type="cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuResponse">
<resultMap id="systemMenuAndRole" type="cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuDTO">
<id column="menu_id" property="menuId"/>
<result column="menu_parent_id" property="menuParentId"/>
<result column="menu_name" property="menuName"/>

View File

@ -2,7 +2,7 @@ package cn.stylefeng.roses.kernel.menu.modular.service;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenuButton;
import cn.stylefeng.roses.kernel.system.pojo.SysMenuButtonRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuButtonRequest;
import com.baomidou.mybatisplus.extension.service.IService;
/**
@ -22,6 +22,15 @@ public interface SysMenuButtonService extends IService<SysMenuButton> {
*/
void add(SysMenuButtonRequest sysMenuButtonRequest);
/**
*
*
* @param sysMenuButtonRequest
* @author chenjinlong
* @date 2021/1/9 11:28
*/
void addDefaultButtons(SysMenuButtonRequest sysMenuButtonRequest);
/**
*
*
@ -69,7 +78,6 @@ public interface SysMenuButtonService extends IService<SysMenuButton> {
*/
PageResult<SysMenuButton> findPage(SysMenuButtonRequest sysMenuButtonRequest);
/**
* id
*
@ -79,13 +87,4 @@ public interface SysMenuButtonService extends IService<SysMenuButton> {
*/
void deleteMenuButtonByMenuId(Long menuId);
/**
*
*
* @param sysMenuButtonRequest
* @author chenjinlong
* @date 2021/1/9 11:28
*/
void addDefaultButtons(SysMenuButtonRequest sysMenuButtonRequest);
}

View File

@ -2,12 +2,11 @@ package cn.stylefeng.roses.kernel.menu.modular.service;
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
import cn.stylefeng.roses.kernel.rule.tree.ztree.ZTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.SysMenuRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuResponse;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdMenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuDTO;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenusVO;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiMenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest;
import com.baomidou.mybatisplus.extension.service.IService;
@ -74,7 +73,7 @@ public interface SysMenuService extends IService<SysMenu> {
* @author fengshuonan
* @date 2021/1/6 17:10
*/
List<SysMenu> layuiList(SysMenuRequest sysMenuRequest);
List<SysMenu> findListWithTreeStructure(SysMenuRequest sysMenuRequest);
/**
* layui
@ -85,6 +84,43 @@ public interface SysMenuService extends IService<SysMenu> {
*/
List<ZTreeNode> layuiSelectParentMenuTreeList();
/**
* antd vue
*
* @param sysMenuRequest
* @return
* @author fengshuonan
* @date 2020/3/27 15:56
*/
List<AntdMenuSelectTreeNode> tree(SysMenuRequest sysMenuRequest);
/**
* Layui
*
* @author fengshuonan
* @date 2020/12/27 18:48
*/
List<LayuiAppIndexMenusVO> getLayuiIndexMenus();
/**
* antd vue
*
* @return
* @author majianguo
* @date 2021/1/7 15:24
*/
List<AntdSysMenuDTO> getSystemAllMenusAntdv();
/**
*
*
* @param sysRoleRequest
* @param lateralFlag true-false-
* @author majianguo
* @date 2021/1/9 17:11
*/
List<LayuiMenuAndButtonTreeResponse> getMenuAndButtonTree(SysRoleRequest sysRoleRequest, Boolean lateralFlag);
/**
*
*
@ -102,61 +138,4 @@ public interface SysMenuService extends IService<SysMenu> {
*/
List<SysMenu> getCurrentUserMenus(String appCode);
/**
* Layui
*
* @author fengshuonan
* @date 2020/12/27 18:48
*/
List<LayuiAppIndexMenus> getLayuiIndexMenus();
/**
* AntDesign
*
* @param appCode
* @return AntDesign
* @author fengshuonan
* @date 2020/4/17 17:48
*/
List<AntdIndexMenuTreeNode> getAntDVueIndexMenus(String appCode);
/**
*
*
* @param sysMenuRequest
* @return
* @author fengshuonan
* @date 2020/3/27 15:56
*/
List<MenuSelectTreeNode> tree(SysMenuRequest sysMenuRequest);
/**
*
*
* @param sysMenuRequest
* @return
* @author fengshuonan
* @date 2020/4/5 15:01
*/
List<MenuSelectTreeNode> treeForGrant(SysMenuRequest sysMenuRequest);
/**
* antd vue
*
* @return
* @author majianguo
* @date 2021/1/7 15:24
*/
List<AntdSysMenuResponse> getSystemAllMenusAntdv();
/**
*
*
* @param sysRoleRequest
* @param lateralFlag true-false-
* @author majianguo
* @date 2021/1/9 17:11
*/
List<LayuiMenuAndButtonTreeResponse> getMenuAndButtonTree(SysRoleRequest sysRoleRequest, Boolean lateralFlag);
}

View File

@ -12,8 +12,8 @@ import cn.stylefeng.roses.kernel.menu.modular.mapper.SysMenuButtonMapper;
import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuButtonService;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.system.exception.SystemModularException;
import cn.stylefeng.roses.kernel.system.exception.enums.SysMenuButtonExceptionEnum;
import cn.stylefeng.roses.kernel.system.pojo.SysMenuButtonRequest;
import cn.stylefeng.roses.kernel.system.exception.enums.menu.SysMenuButtonExceptionEnum;
import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuButtonRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -31,7 +31,6 @@ import java.util.Set;
@Service
public class SysMenuButtonServiceImpl extends ServiceImpl<SysMenuButtonMapper, SysMenuButton> implements SysMenuButtonService {
@Override
public void add(SysMenuButtonRequest sysMenuButtonRequest) {
SysMenuButton sysMenuButton = new SysMenuButton();
@ -39,6 +38,14 @@ public class SysMenuButtonServiceImpl extends ServiceImpl<SysMenuButtonMapper, S
this.save(sysMenuButton);
}
@Override
public void addDefaultButtons(SysMenuButtonRequest sysMenuButtonRequest) {
Long menuId = sysMenuButtonRequest.getMenuId();
// 构建菜单的系统默认按钮
List<SysMenuButton> sysMenuButtonList = MenuButtonFactory.createSystemDefaultButton(menuId);
this.saveBatch(sysMenuButtonList);
}
@Override
public void del(SysMenuButtonRequest sysMenuButtonRequest) {
SysMenuButton button = this.queryButtonById(sysMenuButtonRequest);
@ -64,7 +71,7 @@ public class SysMenuButtonServiceImpl extends ServiceImpl<SysMenuButtonMapper, S
this.update(entity, queryWrapper);
}
}
@Override
public void edit(SysMenuButtonRequest sysMenuButtonRequest) {
SysMenuButton button = this.queryButtonById(sysMenuButtonRequest);
@ -112,14 +119,6 @@ public class SysMenuButtonServiceImpl extends ServiceImpl<SysMenuButtonMapper, S
}
}
@Override
public void addDefaultButtons(SysMenuButtonRequest sysMenuButtonRequest) {
Long menuId = sysMenuButtonRequest.getMenuId();
// 构建菜单的系统默认按钮
List<SysMenuButton> sysMenuButtonList = MenuButtonFactory.createSystemDefaultButton(menuId);
this.saveBatch(sysMenuButtonList);
}
/**
* id
*
@ -142,6 +141,14 @@ public class SysMenuButtonServiceImpl extends ServiceImpl<SysMenuButtonMapper, S
*/
private LambdaQueryWrapper<SysMenuButton> createWrapper(SysMenuButtonRequest sysMenuButtonRequest) {
LambdaQueryWrapper<SysMenuButton> queryWrapper = new LambdaQueryWrapper<>();
// 逻辑删除
queryWrapper.eq(SysMenuButton::getDelFlag, YesOrNotEnum.N.getCode());
if (ObjectUtil.isEmpty(sysMenuButtonRequest)) {
return queryWrapper;
}
Long buttonId = sysMenuButtonRequest.getButtonId();
Long menuId = sysMenuButtonRequest.getMenuId();
String buttonName = sysMenuButtonRequest.getButtonName();
@ -153,11 +160,7 @@ public class SysMenuButtonServiceImpl extends ServiceImpl<SysMenuButtonMapper, S
queryWrapper.like(ObjectUtil.isNotNull(buttonName), SysMenuButton::getButtonName, buttonName);
queryWrapper.like(ObjectUtil.isNotNull(buttonCode), SysMenuButton::getButtonCode, buttonCode);
// 逻辑删除
queryWrapper.eq(SysMenuButton::getDelFlag, YesOrNotEnum.N.getCode());
return queryWrapper;
}
}

View File

@ -12,7 +12,6 @@ import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenuButton;
import cn.stylefeng.roses.kernel.menu.modular.factory.AntdMenusFactory;
import cn.stylefeng.roses.kernel.menu.modular.factory.LayuiMenusFactory;
import cn.stylefeng.roses.kernel.menu.modular.factory.common.CommonMenusFactory;
import cn.stylefeng.roses.kernel.menu.modular.mapper.SysMenuMapper;
import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuButtonService;
import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuService;
@ -27,14 +26,13 @@ import cn.stylefeng.roses.kernel.system.AppServiceApi;
import cn.stylefeng.roses.kernel.system.MenuServiceApi;
import cn.stylefeng.roses.kernel.system.RoleServiceApi;
import cn.stylefeng.roses.kernel.system.exception.SystemModularException;
import cn.stylefeng.roses.kernel.system.exception.enums.SysMenuExceptionEnum;
import cn.stylefeng.roses.kernel.system.exception.enums.SysUserExceptionEnum;
import cn.stylefeng.roses.kernel.system.pojo.SysMenuRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuResponse;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
import cn.stylefeng.roses.kernel.system.exception.enums.menu.SysMenuExceptionEnum;
import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdMenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdSysMenuDTO;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenusVO;
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiMenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest;
import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleMenuButtonResponse;
import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleMenuResponse;
@ -72,6 +70,20 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
public void add(SysMenuRequest sysMenuRequest) {
// 如果父节点为空则填充为默认的父节点id
if (sysMenuRequest.getMenuParentId() == null) {
sysMenuRequest.setMenuParentId(TreeConstants.DEFAULT_PARENT_ID);
}
// 如果父节点不为空,并且不是-1则判断父节点存不存在防止脏数据
else {
if (!TreeConstants.DEFAULT_PARENT_ID.equals(sysMenuRequest.getMenuParentId())) {
SysMenuRequest tempParam = new SysMenuRequest();
tempParam.setMenuId(sysMenuRequest.getMenuParentId());
this.querySysMenu(tempParam);
}
}
SysMenu sysMenu = new SysMenu();
BeanUtil.copyProperties(sysMenuRequest, sysMenu);
@ -81,6 +93,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
// 设置启用状态
sysMenu.setStatusFlag(StatusEnum.ENABLE.getCode());
sysMenu.setDelFlag(YesOrNotEnum.N.getCode());
this.save(sysMenu);
}
@ -111,6 +124,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
// 获取库中的菜单信息
SysMenu oldMenu = this.querySysMenu(sysMenuRequest);
// 更新子节点以及子节点的子节点的appCode和层级关系pids
String newPids = updateChildrenAppAndLevel(sysMenuRequest, oldMenu);
// 拷贝参数到实体中
@ -153,17 +167,6 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
LambdaQueryWrapper<SysMenu> wrapper = createWrapper(sysMenuRequest);
List<SysMenu> sysMenuList = this.list(wrapper);
// 将结果集处理成树
return new DefaultTreeBuildFactory<SysMenu>().doTreeBuild(sysMenuList);
}
@Override
public List<SysMenu> layuiList(SysMenuRequest sysMenuRequest) {
LambdaQueryWrapper<SysMenu> wrapper = createWrapper(sysMenuRequest);
List<SysMenu> list = this.list(wrapper);
// 应用编码转化为应用名称
@ -182,6 +185,15 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
return list;
}
@Override
public List<SysMenu> findListWithTreeStructure(SysMenuRequest sysMenuRequest) {
List<SysMenu> sysMenuList = this.findList(sysMenuRequest);
// 将结果集处理成树
return new DefaultTreeBuildFactory<SysMenu>().doTreeBuild(sysMenuList);
}
@Override
public List<ZTreeNode> layuiSelectParentMenuTreeList() {
@ -204,104 +216,40 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
}
@Override
public List<SysMenu> getCurrentUserMenus() {
return getCurrentUserMenus(null);
public List<AntdMenuSelectTreeNode> tree(SysMenuRequest sysMenuRequest) {
List<AntdMenuSelectTreeNode> menuTreeNodeList = CollectionUtil.newArrayList();
LambdaQueryWrapper<SysMenu> wrapper = createWrapper(sysMenuRequest);
this.list(wrapper).forEach(sysMenu -> {
AntdMenuSelectTreeNode menuTreeNode = AntdMenusFactory.parseMenuBaseTreeNode(sysMenu);
menuTreeNodeList.add(menuTreeNode);
});
return new DefaultTreeBuildFactory<AntdMenuSelectTreeNode>().doTreeBuild(menuTreeNodeList);
}
@Override
public List<SysMenu> getCurrentUserMenus(String appCode) {
// 获取当前用户所有的菜单id
List<Long> menuIdList = getCurrentUserMenuIds();
// 当前用户没有菜单
if (menuIdList.isEmpty()) {
throw new SystemModularException(SysUserExceptionEnum.USER_NOT_HAVE_MENUS);
}
// 获取菜单列表
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SysMenu::getMenuId, menuIdList).eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()).eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()).orderByAsc(SysMenu::getMenuSort);
// 如果应用编码不为空,则拼接应用编码
if (StrUtil.isNotBlank(appCode)) {
queryWrapper.eq(SysMenu::getAppCode, appCode);
}
return this.list(queryWrapper);
}
@Override
public List<LayuiAppIndexMenus> getLayuiIndexMenus() {
public List<LayuiAppIndexMenusVO> getLayuiIndexMenus() {
// 获取当前用户所有菜单
List<SysMenu> currentUserMenus = this.getCurrentUserMenus();
// 组装每个应用的菜单树
List<LayuiAppIndexMenus> layuiAppIndexMenus = LayuiMenusFactory.createLayuiAppIndexMenus(currentUserMenus);
List<LayuiAppIndexMenusVO> layuiAppIndexMenuVOS = LayuiMenusFactory.createLayuiAppIndexMenus(currentUserMenus);
// 给应用排序,激活的应用放在前边
String activeAppCode = appServiceApi.getActiveAppCode();
if (activeAppCode != null) {
List<LayuiAppIndexMenus> layuiAppIndexMenusArrayList = layuiAppIndexMenus.stream().filter(i -> activeAppCode.equals(i.getAppCode())).collect(Collectors.toList());
layuiAppIndexMenusArrayList.addAll(layuiAppIndexMenus.stream().filter(i -> !activeAppCode.equals(i.getAppCode())).collect(Collectors.toList()));
return layuiAppIndexMenusArrayList;
List<LayuiAppIndexMenusVO> layuiAppIndexMenusVOArrayList = layuiAppIndexMenuVOS.stream().filter(i -> activeAppCode.equals(i.getAppCode())).collect(Collectors.toList());
layuiAppIndexMenusVOArrayList.addAll(layuiAppIndexMenuVOS.stream().filter(i -> !activeAppCode.equals(i.getAppCode())).collect(Collectors.toList()));
return layuiAppIndexMenusVOArrayList;
}
return layuiAppIndexMenus;
return layuiAppIndexMenuVOS;
}
@Override
public List<AntdIndexMenuTreeNode> getAntDVueIndexMenus(String appCode) {
// 获取当前用户的所有菜单
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(appCode);
// 转换成登录菜单格式
List<AntdIndexMenuTreeNode> antdIndexMenuTreeNodes = AntdMenusFactory.convertSysMenuToLoginMenu(currentUserMenus);
// 转化成树结构
return new DefaultTreeBuildFactory<AntdIndexMenuTreeNode>(TreeConstants.VIRTUAL_ROOT_PARENT_ID.toString()).doTreeBuild(antdIndexMenuTreeNodes);
}
@Override
public List<MenuSelectTreeNode> tree(SysMenuRequest sysMenuRequest) {
List<MenuSelectTreeNode> menuTreeNodeList = CollectionUtil.newArrayList();
LambdaQueryWrapper<SysMenu> wrapper = createWrapper(sysMenuRequest);
this.list(wrapper).forEach(sysMenu -> {
MenuSelectTreeNode menuTreeNode = CommonMenusFactory.parseMenuBaseTreeNode(sysMenu);
menuTreeNodeList.add(menuTreeNode);
});
return new DefaultTreeBuildFactory<MenuSelectTreeNode>().doTreeBuild(menuTreeNodeList);
}
@Override
public List<MenuSelectTreeNode> treeForGrant(SysMenuRequest sysMenuRequest) {
List<MenuSelectTreeNode> menuTreeNodeList = CollectionUtil.newArrayList();
LambdaQueryWrapper<SysMenu> wrapper = createWrapper(sysMenuRequest);
wrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode());
// 非超级管理员则获取自己拥有的菜单,分配给人员,防止越级授权
if (!LoginContext.me().getSuperAdminFlag()) {
List<Long> menuIdList = getCurrentUserMenuIds();
if (!menuIdList.isEmpty()) {
wrapper.in(SysMenu::getMenuId, menuIdList);
}
}
this.list(wrapper).forEach(sysMenu -> {
MenuSelectTreeNode menuTreeNode = CommonMenusFactory.parseMenuBaseTreeNode(sysMenu);
menuTreeNodeList.add(menuTreeNode);
});
return new DefaultTreeBuildFactory<MenuSelectTreeNode>().doTreeBuild(menuTreeNodeList);
}
@Override
public List<AntdSysMenuResponse> getSystemAllMenusAntdv() {
public List<AntdSysMenuDTO> getSystemAllMenusAntdv() {
return this.baseMapper.getSystemAllMenus();
}
@ -410,6 +358,34 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
}
}
@Override
public List<SysMenu> getCurrentUserMenus() {
return getCurrentUserMenus(null);
}
@Override
public List<SysMenu> getCurrentUserMenus(String appCode) {
// 获取当前用户所有的菜单id
List<Long> menuIdList = getCurrentUserMenuIds();
// 当前用户没有菜单
if (menuIdList.isEmpty()) {
throw new SystemModularException(SysUserExceptionEnum.USER_NOT_HAVE_MENUS);
}
// 获取菜单列表
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SysMenu::getMenuId, menuIdList).eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()).eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()).orderByAsc(SysMenu::getMenuSort);
// 如果应用编码不为空,则拼接应用编码
if (StrUtil.isNotBlank(appCode)) {
queryWrapper.eq(SysMenu::getAppCode, appCode);
}
return this.list(queryWrapper);
}
@Override
public boolean hasMenu(String appCode) {
SysMenuRequest sysMenuRequest = new SysMenuRequest();
@ -429,7 +405,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
private SysMenu querySysMenu(SysMenuRequest sysMenuRequest) {
SysMenu sysMenu = this.getById(sysMenuRequest.getMenuId());
if (ObjectUtil.isNull(sysMenu) || YesOrNotEnum.Y.getCode().equals(sysMenu.getDelFlag())) {
throw new ServiceException(SysMenuExceptionEnum.MENU_NOT_EXIST);
throw new SystemModularException(SysMenuExceptionEnum.MENU_NOT_EXIST, sysMenuRequest.getMenuId());
}
return sysMenu;
}
@ -437,7 +413,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/**
* pids
* <p>
* pid0pids [0],
* pid0pids [-1],
* <p>
* pidpidspids + [pid] + ,
*
@ -449,7 +425,11 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
return SymbolConstant.LEFT_SQUARE_BRACKETS + TreeConstants.DEFAULT_PARENT_ID + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA;
} else {
//获取父菜单
SysMenu parentMenu = this.getById(pid);
SysMenuRequest sysMenuRequest = new SysMenuRequest();
sysMenuRequest.setMenuId(pid);
SysMenu parentMenu = this.querySysMenu(sysMenuRequest);
// 组装pids
return parentMenu.getMenuPids() + SymbolConstant.LEFT_SQUARE_BRACKETS + pid + SymbolConstant.RIGHT_SQUARE_BRACKETS + SymbolConstant.COMMA;
}
}
@ -462,23 +442,6 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/
private LambdaQueryWrapper<SysMenu> createWrapper(SysMenuRequest sysMenuRequest) {
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
if (ObjectUtil.isNotNull(sysMenuRequest)) {
// 根据所属应用查询
if (ObjectUtil.isNotEmpty(sysMenuRequest.getAppCode())) {
queryWrapper.eq(SysMenu::getAppCode, sysMenuRequest.getAppCode());
}
// 根据菜单名称模糊查询
if (ObjectUtil.isNotEmpty(sysMenuRequest.getMenuName())) {
queryWrapper.like(SysMenu::getMenuName, sysMenuRequest.getMenuName());
}
// 根据菜单编码模糊查询
if (ObjectUtil.isNotEmpty(sysMenuRequest.getMenuCode())) {
queryWrapper.like(SysMenu::getMenuCode, sysMenuRequest.getMenuCode());
}
}
// 查询未删除状态的
queryWrapper.eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode());
@ -487,6 +450,19 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
queryWrapper.orderByAsc(SysMenu::getAppCode);
queryWrapper.orderByAsc(SysMenu::getMenuSort);
if (ObjectUtil.isEmpty(sysMenuRequest)) {
return queryWrapper;
}
// 根据所属应用查询
queryWrapper.eq(ObjectUtil.isNotEmpty(sysMenuRequest.getAppCode()), SysMenu::getAppCode, sysMenuRequest.getAppCode());
// 根据菜单名称模糊查询
queryWrapper.like(ObjectUtil.isNotEmpty(sysMenuRequest.getMenuName()), SysMenu::getMenuName, sysMenuRequest.getMenuName());
// 根据菜单编码模糊查询
queryWrapper.like(ObjectUtil.isNotEmpty(sysMenuRequest.getMenuCode()), SysMenu::getMenuCode, sysMenuRequest.getMenuCode());
return queryWrapper;
}