mirror of https://gitee.com/stylefeng/roses
【7.0.2】更新antdv的菜单返回
parent
d76c9ca4d3
commit
9367bc4746
|
@ -24,58 +24,52 @@
|
|||
*/
|
||||
package cn.stylefeng.roses.kernel.system.api.pojo.menu.antd;
|
||||
|
||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 封装antd vue需要的菜单信息,service对外输出的对象
|
||||
* 封装antd vue需要的dto
|
||||
*
|
||||
* @author majianguo
|
||||
* @date 2021/1/7 15:18
|
||||
* @author fengshuonan
|
||||
* @date 2021/3/23 21:26
|
||||
*/
|
||||
@Data
|
||||
public class AntdSysMenuDTO {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long menuId;
|
||||
|
||||
/**
|
||||
* 父id,顶级节点的父id是-1
|
||||
*/
|
||||
private Long menuParentId;
|
||||
|
||||
/**
|
||||
* 菜单的名称
|
||||
*/
|
||||
private String menuName;
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 路由地址,浏览器显示的URL,例如/menu,适用于antd vue版本
|
||||
* 菜单的图标
|
||||
*/
|
||||
private String antdvRouter;
|
||||
private String icon;
|
||||
|
||||
/**
|
||||
* 图标,适用于antd vue版本
|
||||
* 路由地址(要以/开头),必填
|
||||
*/
|
||||
private String antdvIcon;
|
||||
private String path;
|
||||
|
||||
/**
|
||||
* 是否显示,Y-显示,N-不显示
|
||||
* 组件地址(组件要放在view目录下),父级可以省略
|
||||
*/
|
||||
private String visible;
|
||||
private String component;
|
||||
|
||||
/**
|
||||
* 子节点(表中不存在,用于构造树)
|
||||
* 为true只注册路由不显示在左侧菜单(比如独立的添加页面)
|
||||
*/
|
||||
private List children;
|
||||
private Boolean hide;
|
||||
|
||||
/**
|
||||
* 菜单可以被那些角色访问
|
||||
* 比如修改页面不在侧边栏,打开后侧边栏就没有选中了,这个可以配置选中地址
|
||||
*/
|
||||
private List<SimpleRoleInfo> roles;
|
||||
private String uid;
|
||||
|
||||
/**
|
||||
* 子级
|
||||
*/
|
||||
private List<AntdSysMenuDTO> children;
|
||||
|
||||
}
|
||||
|
|
|
@ -32,10 +32,8 @@ import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
|
|||
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuItem;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.layui.LayuiMenuAndButtonTreeResponse;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
|
||||
import cn.stylefeng.roses.kernel.system.modular.menu.factory.AntdMenusFactory;
|
||||
import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
@ -146,8 +144,7 @@ public class SysMenuController {
|
|||
@GetResource(name = "获取系统所有菜单(适用于登录后获取左侧菜单)(适配antd vue版本)", path = "/sysMenu/getLeftMenusAntdv", requiredPermission = false)
|
||||
public ResponseData getLeftMenusAntdv() {
|
||||
List<AntdSysMenuDTO> sysMenuResponses = sysMenuService.getLeftMenusAntdv();
|
||||
List<AntdvMenuItem> totalMenus = AntdMenusFactory.createTotalMenus(sysMenuResponses);
|
||||
return new SuccessResponseData(totalMenus);
|
||||
return new SuccessResponseData(sysMenuResponses);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -159,7 +159,7 @@ public class SysMenu extends BaseEntity implements AbstractTreeNode {
|
|||
* 子节点(表中不存在,用于构造树)
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private List children;
|
||||
private List<SysMenu> children;
|
||||
|
||||
/**
|
||||
* 应用名称
|
||||
|
|
|
@ -24,15 +24,13 @@
|
|||
*/
|
||||
package cn.stylefeng.roses.kernel.system.modular.menu.factory;
|
||||
|
||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.modular.menu.entity.SysMenu;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdMenuSelectTreeNode;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuAuthorityItem;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuItem;
|
||||
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -51,66 +49,13 @@ public class AntdMenusFactory {
|
|||
* @author fengshuonan
|
||||
* @date 2021/1/7 18:17
|
||||
*/
|
||||
public static List<AntdvMenuItem> createTotalMenus(List<AntdSysMenuDTO> sysMenuRespons) {
|
||||
|
||||
ArrayList<AntdvMenuItem> antdvMenuItems = new ArrayList<>(sysMenuRespons.size());
|
||||
|
||||
// 实体转化
|
||||
for (AntdSysMenuDTO antdSysMenuDTO : sysMenuRespons) {
|
||||
AntdvMenuItem antdvMenuItem = new AntdvMenuItem();
|
||||
|
||||
// 填充id pid name用于构建树
|
||||
antdvMenuItem.setMenuId(antdSysMenuDTO.getMenuId());
|
||||
antdvMenuItem.setMenuParentId(antdSysMenuDTO.getMenuParentId());
|
||||
antdvMenuItem.setName(antdSysMenuDTO.getMenuName());
|
||||
|
||||
// 填充路由等信息
|
||||
antdvMenuItem.setRouter(antdSysMenuDTO.getAntdvRouter());
|
||||
antdvMenuItem.setIcon(antdSysMenuDTO.getAntdvIcon());
|
||||
|
||||
// 填充是否隐藏
|
||||
antdvMenuItem.setInvisible(YesOrNotEnum.N.getCode().equals(antdSysMenuDTO.getVisible()));
|
||||
|
||||
// 填充哪个角色绑定了这个菜单
|
||||
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());
|
||||
}
|
||||
antdvAuthorityItem.setPermission(auths);
|
||||
antdvAuthorityItem.setRole(auths);
|
||||
antdvMenuItem.setAuthority(antdvAuthorityItem);
|
||||
}
|
||||
|
||||
antdvMenuItems.add(antdvMenuItem);
|
||||
}
|
||||
|
||||
// 加入根节点
|
||||
antdvMenuItems.add(createAntdVMenuRoot());
|
||||
public static List<AntdSysMenuDTO> createTotalMenus(List<SysMenu> sysMenuList) {
|
||||
|
||||
// 构造菜单树
|
||||
return new DefaultTreeBuildFactory<AntdvMenuItem>(TreeConstants.VIRTUAL_ROOT_PARENT_ID.toString()).doTreeBuild(antdvMenuItems);
|
||||
}
|
||||
List<SysMenu> treeStructMenu = new DefaultTreeBuildFactory<SysMenu>(TreeConstants.DEFAULT_PARENT_ID.toString()).doTreeBuild(sysMenuList);
|
||||
|
||||
/**
|
||||
* 创建虚拟根节点
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/30 20:38
|
||||
*/
|
||||
private static AntdvMenuItem createAntdVMenuRoot() {
|
||||
AntdvMenuItem antdvMenuItem = new AntdvMenuItem();
|
||||
antdvMenuItem.setRouter("root");
|
||||
antdvMenuItem.setName("根节点");
|
||||
antdvMenuItem.setMenuId(TreeConstants.DEFAULT_PARENT_ID);
|
||||
antdvMenuItem.setMenuParentId(TreeConstants.VIRTUAL_ROOT_PARENT_ID);
|
||||
antdvMenuItem.setInvisible(false);
|
||||
|
||||
antdvMenuItem.setAuthority(null);
|
||||
|
||||
return antdvMenuItem;
|
||||
// 模型转化
|
||||
return doModelTransfer(treeStructMenu);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -129,4 +74,34 @@ public class AntdMenusFactory {
|
|||
return menuTreeNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* 模型转化
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/3/23 21:40
|
||||
*/
|
||||
private static List<AntdSysMenuDTO> doModelTransfer(List<SysMenu> sysMenuList) {
|
||||
if (ObjectUtil.isEmpty(sysMenuList)) {
|
||||
return null;
|
||||
} else {
|
||||
ArrayList<AntdSysMenuDTO> resultMenus = new ArrayList<>();
|
||||
|
||||
for (SysMenu sysMenu : sysMenuList) {
|
||||
AntdSysMenuDTO antdvMenuItem = new AntdSysMenuDTO();
|
||||
antdvMenuItem.setTitle(sysMenu.getMenuName());
|
||||
antdvMenuItem.setIcon(sysMenu.getAntdvIcon());
|
||||
antdvMenuItem.setPath(sysMenu.getAntdvRouter());
|
||||
antdvMenuItem.setComponent(sysMenu.getAntdvComponent());
|
||||
antdvMenuItem.setHide(YesOrNotEnum.N.getCode().equals(sysMenu.getVisible()));
|
||||
antdvMenuItem.setUid(null);
|
||||
if (ObjectUtil.isNotEmpty(sysMenu.getChildren())) {
|
||||
antdvMenuItem.setChildren(doModelTransfer(sysMenu.getChildren()));
|
||||
}
|
||||
resultMenus.add(antdvMenuItem);
|
||||
}
|
||||
|
||||
return resultMenus;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,12 +24,8 @@
|
|||
*/
|
||||
package cn.stylefeng.roses.kernel.system.modular.menu.mapper;
|
||||
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO;
|
||||
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统菜单mapper接口
|
||||
|
@ -39,15 +35,4 @@ import java.util.List;
|
|||
*/
|
||||
public interface SysMenuMapper extends BaseMapper<SysMenu> {
|
||||
|
||||
/**
|
||||
* 获取系统所有菜单(适用于登录后获取左侧菜单)(适配antd vue版本)
|
||||
* <p>
|
||||
* 返回信息携带:菜单可以被那些角色访问
|
||||
*
|
||||
* @return 系统所有菜单
|
||||
* @author majianguo
|
||||
* @date 2021/1/7 15:27
|
||||
*/
|
||||
List<AntdSysMenuDTO> getSystemAllMenus(@Param("menuIdList") List<Long> menuIdList);
|
||||
|
||||
}
|
||||
|
|
|
@ -2,41 +2,5 @@
|
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.stylefeng.roses.kernel.system.modular.menu.mapper.SysMenuMapper">
|
||||
|
||||
<resultMap id="systemMenuAndRole" type="cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO">
|
||||
<id column="menu_id" property="menuId"/>
|
||||
<result column="menu_parent_id" property="menuParentId"/>
|
||||
<result column="menu_name" property="menuName"/>
|
||||
<result column="antdv_router" property="antdvRouter"/>
|
||||
<result column="antdv_icon" property="antdvIcon"/>
|
||||
<result column="visible" property="visible"/>
|
||||
<collection property="roles" ofType="cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo">
|
||||
<id column="role_id" property="roleId"/>
|
||||
<result column="role_name" property="roleName"/>
|
||||
<result column="role_code" property="roleCode"/>
|
||||
</collection>
|
||||
</resultMap>
|
||||
|
||||
<select id="getSystemAllMenus" resultMap="systemMenuAndRole">
|
||||
SELECT sm.menu_id,
|
||||
sm.menu_parent_id,
|
||||
sm.menu_name,
|
||||
sm.antdv_router,
|
||||
sm.antdv_icon,
|
||||
sm.visible,
|
||||
sr.role_id,
|
||||
sr.role_name,
|
||||
sr.role_code
|
||||
FROM sys_menu sm
|
||||
LEFT JOIN sys_role_menu srm ON sm.menu_id = srm.menu_id
|
||||
LEFT JOIN sys_role sr ON srm.role_id = sr.role_id
|
||||
WHERE sm.del_flag = 'N'
|
||||
AND sm.status_flag = 1
|
||||
<if test="menuIdList != null and menuIdList.size() > 0">
|
||||
and sm.menu_id in
|
||||
<foreach collection="menuIdList" index="index" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
|
|
@ -275,14 +275,27 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
@Override
|
||||
public List<AntdSysMenuDTO> getLeftMenusAntdv() {
|
||||
|
||||
LambdaQueryWrapper<SysMenu> wrapper = this.createWrapper(new SysMenuRequest());
|
||||
wrapper.select(SysMenu::getMenuName,
|
||||
SysMenu::getAntdvIcon,
|
||||
SysMenu::getAntdvRouter,
|
||||
SysMenu::getAntdvComponent,
|
||||
SysMenu::getVisible,
|
||||
SysMenu::getMenuId,
|
||||
SysMenu::getMenuParentId);
|
||||
wrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode());
|
||||
|
||||
// 如果是超级管理员,则获取所有的菜单
|
||||
if (LoginContext.me().getSuperAdminFlag()) {
|
||||
return this.baseMapper.getSystemAllMenus(null);
|
||||
List<SysMenu> totalList = this.list(wrapper);
|
||||
return AntdMenusFactory.createTotalMenus(totalList);
|
||||
}
|
||||
|
||||
// 获取当前用户的所有菜单
|
||||
List<Long> menuIdList = getCurrentUserMenuIds();
|
||||
return this.baseMapper.getSystemAllMenus(menuIdList);
|
||||
wrapper.in(SysMenu::getMenuId, menuIdList);
|
||||
List<SysMenu> customList = this.list(wrapper);
|
||||
return AntdMenusFactory.createTotalMenus(customList);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue