【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; 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 lombok.Data;
import java.util.List; import java.util.List;
/** /**
* antd vueservice * antd vuedto
* *
* @author majianguo * @author fengshuonan
* @date 2021/1/7 15:18 * @date 2021/3/23 21:26
*/ */
@Data @Data
public class AntdSysMenuDTO { 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.scanner.api.annotation.PostResource;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest; 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.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.menu.layui.LayuiMenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; 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 cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -146,8 +144,7 @@ public class SysMenuController {
@GetResource(name = "获取系统所有菜单适用于登录后获取左侧菜单适配antd vue版本", path = "/sysMenu/getLeftMenusAntdv", requiredPermission = false) @GetResource(name = "获取系统所有菜单适用于登录后获取左侧菜单适配antd vue版本", path = "/sysMenu/getLeftMenusAntdv", requiredPermission = false)
public ResponseData getLeftMenusAntdv() { public ResponseData getLeftMenusAntdv() {
List<AntdSysMenuDTO> sysMenuResponses = sysMenuService.getLeftMenusAntdv(); List<AntdSysMenuDTO> sysMenuResponses = sysMenuService.getLeftMenusAntdv();
List<AntdvMenuItem> totalMenus = AntdMenusFactory.createTotalMenus(sysMenuResponses); return new SuccessResponseData(sysMenuResponses);
return new SuccessResponseData(totalMenus);
} }
/** /**

View File

@ -159,7 +159,7 @@ public class SysMenu extends BaseEntity implements AbstractTreeNode {
* *
*/ */
@TableField(exist = false) @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; 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.constants.TreeConstants;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory; 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.AntdMenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO; 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.modular.menu.entity.SysMenu;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuItem;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -51,66 +49,13 @@ public class AntdMenusFactory {
* @author fengshuonan * @author fengshuonan
* @date 2021/1/7 18:17 * @date 2021/1/7 18:17
*/ */
public static List<AntdvMenuItem> createTotalMenus(List<AntdSysMenuDTO> sysMenuRespons) { public static List<AntdSysMenuDTO> createTotalMenus(List<SysMenu> sysMenuList) {
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());
// 构造菜单树 // 构造菜单树
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);
}
/** // 模型转化
* return doModelTransfer(treeStructMenu);
*
* @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;
} }
/** /**
@ -129,4 +74,34 @@ public class AntdMenusFactory {
return menuTreeNode; 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; 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 cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* mapper * mapper
@ -39,15 +35,4 @@ import java.util.List;
*/ */
public interface SysMenuMapper extends BaseMapper<SysMenu> { 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"> <!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"> <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> </mapper>

View File

@ -275,14 +275,27 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override @Override
public List<AntdSysMenuDTO> getLeftMenusAntdv() { 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()) { if (LoginContext.me().getSuperAdminFlag()) {
return this.baseMapper.getSystemAllMenus(null); List<SysMenu> totalList = this.list(wrapper);
return AntdMenusFactory.createTotalMenus(totalList);
} }
// 获取当前用户的所有菜单 // 获取当前用户的所有菜单
List<Long> menuIdList = getCurrentUserMenuIds(); 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 @Override