【7.0.2】更新antdv的菜单返回

pull/12/head^2
fengshuonan 2021-03-23 22:01:28 +08:00
parent d76c9ca4d3
commit 9367bc4746
7 changed files with 72 additions and 144 deletions

View File

@ -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 vueservice
* antd vuedto
*
* @author majianguo
* @date 2021/1/7 15:18
* @author fengshuonan
* @date 2021/3/23 21:26
*/
@Data
public class AntdSysMenuDTO {
/**
*
*/
private Long menuId;
/**
* idid-1
*/
private Long menuParentId;
/**
*
*/
private String menuName;
private String title;
/**
* URL/menuantd 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;
}

View File

@ -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);
}
/**

View File

@ -159,7 +159,7 @@ public class SysMenu extends BaseEntity implements AbstractTreeNode {
*
*/
@TableField(exist = false)
private List children;
private List<SysMenu> children;
/**
*

View File

@ -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;
}
}
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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