mirror of https://gitee.com/stylefeng/roses
【menu】更新antdv的首页菜单获取
parent
b8731d7433
commit
5d4a958746
|
@ -19,9 +19,14 @@ public interface SystemConstants {
|
|||
String SYSTEM_EXCEPTION_STEP_CODE = "18";
|
||||
|
||||
/**
|
||||
* 一级节点的父节点id是0
|
||||
* 一级节点的父节点id
|
||||
*/
|
||||
Long DEFAULT_PARENT_ID = 0L;
|
||||
Long DEFAULT_PARENT_ID = -1L;
|
||||
|
||||
/**
|
||||
* 虚拟的根节点的父级id
|
||||
*/
|
||||
Long VIRTUAL_ROOT_PARENT_ID = -2L;
|
||||
|
||||
/**
|
||||
* pids系列字段,每个id的左分隔符
|
||||
|
|
|
@ -62,7 +62,7 @@ public class SysMenuRequest extends BaseRequest {
|
|||
/**
|
||||
* 应用分类(应用编码)
|
||||
*/
|
||||
@NotBlank(message = "appCode不能为空", groups = {add.class, edit.class, getAppMenus.class})
|
||||
@NotBlank(message = "appCode不能为空", groups = {add.class, edit.class, getAppMenusAntdVue.class})
|
||||
private String appCode;
|
||||
|
||||
/**
|
||||
|
@ -111,9 +111,9 @@ public class SysMenuRequest extends BaseRequest {
|
|||
private String remark;
|
||||
|
||||
/**
|
||||
* 获取某个应用的左侧菜单树
|
||||
* 获取主页左侧菜单列表(适配Antd Vue的版本)
|
||||
*/
|
||||
public @interface getAppMenus {
|
||||
public @interface getAppMenusAntdVue {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
package cn.stylefeng.roses.kernel.system.pojo.menu.antd;
|
||||
|
||||
import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 登录菜单
|
||||
*
|
||||
|
@ -9,7 +12,7 @@ import lombok.Data;
|
|||
* @date 2020/4/17 17:35
|
||||
*/
|
||||
@Data
|
||||
public class AntdIndexMenuTreeNode {
|
||||
public class AntdIndexMenuTreeNode implements AbstractTreeNode {
|
||||
|
||||
/**
|
||||
* id
|
||||
|
@ -22,19 +25,14 @@ public class AntdIndexMenuTreeNode {
|
|||
private Long pid;
|
||||
|
||||
/**
|
||||
* 路由名称, 必须设置,且不能重名
|
||||
* 菜单标题
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 组件
|
||||
* 菜单路由
|
||||
*/
|
||||
private String component;
|
||||
|
||||
/**
|
||||
* 重定向地址, 访问这个路由时, 自定进行重定向
|
||||
*/
|
||||
private String redirect;
|
||||
private String path;
|
||||
|
||||
/**
|
||||
* 路由元信息(路由附带扩展信息)
|
||||
|
@ -42,46 +40,41 @@ public class AntdIndexMenuTreeNode {
|
|||
private Meta meta;
|
||||
|
||||
/**
|
||||
* 路径
|
||||
* 子级节点
|
||||
*/
|
||||
private String path;
|
||||
|
||||
/**
|
||||
* 控制路由和子路由是否显示在 sidebar
|
||||
*/
|
||||
private boolean hidden;
|
||||
private List<AntdIndexMenuTreeNode> children;
|
||||
|
||||
/**
|
||||
* 路由元信息内部类
|
||||
*/
|
||||
@Data
|
||||
public class Meta {
|
||||
public static class Meta {
|
||||
|
||||
/**
|
||||
* 路由标题, 用于显示面包屑, 页面标题 *推荐设置
|
||||
*/
|
||||
public String title;
|
||||
|
||||
/**
|
||||
* 图标
|
||||
* 菜单图标
|
||||
*/
|
||||
public String icon;
|
||||
|
||||
/**
|
||||
* 是否可见
|
||||
* 是否隐藏此菜单项, 默认 false,不隐藏
|
||||
*/
|
||||
public boolean show;
|
||||
|
||||
/**
|
||||
* 如需外部打开,增加:_blank
|
||||
*/
|
||||
public String target;
|
||||
|
||||
/**
|
||||
* 内链打开http链接
|
||||
*/
|
||||
public String link;
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -84,17 +84,6 @@ public class SysMenuController {
|
|||
return new SuccessResponseData(sysMenuService.list(sysMenuRequest));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某个应用的菜单,用于系统顶部切换菜单
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/4/19 15:50
|
||||
*/
|
||||
@GetResource(name = "获取某个应用的菜单", path = "/sysMenu/getAppMenus", requiredPermission = false)
|
||||
public ResponseData getAppMenus(@Validated(SysMenuRequest.getAppMenus.class) SysMenuRequest sysMenuRequest) {
|
||||
return new SuccessResponseData(sysMenuService.getAppMenusAntDesign(sysMenuRequest.getAppCode()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统菜单树,用于新增,编辑时选择上级节点
|
||||
*
|
||||
|
@ -117,4 +106,15 @@ public class SysMenuController {
|
|||
return new SuccessResponseData(sysMenuService.treeForGrant(sysMenuRequest));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取主页左侧菜单列表(适配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()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,74 +1,76 @@
|
|||
package cn.stylefeng.roses.kernel.menu.modular.factory;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import cn.stylefeng.roses.kernel.system.enums.LinkOpenTypeEnum;
|
||||
import cn.stylefeng.roses.kernel.system.constants.SystemConstants;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 针对于antd前端的菜单的组装
|
||||
* 针对于antd vue版本的前端菜单的组装
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/23 21:58
|
||||
* @date 2020/12/30 20:11
|
||||
*/
|
||||
public class AntdMenusFactory {
|
||||
|
||||
/**
|
||||
* menu实体转化为菜单树节点
|
||||
* 将数据库表的菜单,转化为vue antd admin识别的菜单路由格式
|
||||
*
|
||||
* @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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将SysMenu格式菜单转换为LoginMenuTreeNode菜单
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/4/17 17:53
|
||||
* @date 2020/12/30 20:28
|
||||
*/
|
||||
public static List<AntdIndexMenuTreeNode> convertSysMenuToLoginMenu(List<SysMenu> sysMenuList) {
|
||||
List<AntdIndexMenuTreeNode> antDesignMenuTreeNodeList = CollectionUtil.newArrayList();
|
||||
sysMenuList.forEach(sysMenu -> {
|
||||
List<AntdIndexMenuTreeNode> antDesignMenuTreeNodeList = new ArrayList<>(sysMenuList.size());
|
||||
|
||||
// 添加根节点
|
||||
antDesignMenuTreeNodeList.add(createRootMenuNode());
|
||||
|
||||
for (SysMenu sysMenu : sysMenuList) {
|
||||
AntdIndexMenuTreeNode antdIndexMenuTreeNode = new AntdIndexMenuTreeNode();
|
||||
antdIndexMenuTreeNode.setComponent(sysMenu.getComponent());
|
||||
|
||||
// 设置菜单id
|
||||
antdIndexMenuTreeNode.setId(sysMenu.getMenuId());
|
||||
antdIndexMenuTreeNode.setName(sysMenu.getMenuCode());
|
||||
antdIndexMenuTreeNode.setPath(sysMenu.getRouter());
|
||||
|
||||
// 设置父级id
|
||||
antdIndexMenuTreeNode.setPid(sysMenu.getMenuParentId());
|
||||
AntdIndexMenuTreeNode.Meta mateItem = new AntdIndexMenuTreeNode().new Meta();
|
||||
|
||||
// 菜单名称
|
||||
antdIndexMenuTreeNode.setName(sysMenu.getMenuName());
|
||||
|
||||
// 菜单路由地址
|
||||
antdIndexMenuTreeNode.setPath(sysMenu.getRouter());
|
||||
|
||||
AntdIndexMenuTreeNode.Meta mateItem = new AntdIndexMenuTreeNode.Meta();
|
||||
|
||||
// 菜单图标
|
||||
mateItem.setIcon(sysMenu.getIcon());
|
||||
mateItem.setTitle(sysMenu.getMenuName());
|
||||
mateItem.setLink(sysMenu.getLinkUrl());
|
||||
|
||||
// 是否可见
|
||||
mateItem.setShow(YesOrNotEnum.Y.getCode().equals(sysMenu.getVisible()));
|
||||
|
||||
// 是否是外链
|
||||
if (LinkOpenTypeEnum.INNER.getCode().equals(sysMenu.getLinkOpenType())) {
|
||||
|
||||
// 打开外链
|
||||
mateItem.setTarget("_blank");
|
||||
antdIndexMenuTreeNode.setPath(sysMenu.getLinkUrl());
|
||||
antdIndexMenuTreeNode.setRedirect(sysMenu.getLinkUrl());
|
||||
|
||||
}
|
||||
// 设置是否隐藏,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(SystemConstants.DEFAULT_PARENT_ID);
|
||||
antdIndexMenuTreeNode.setPid(SystemConstants.VIRTUAL_ROOT_PARENT_ID);
|
||||
antdIndexMenuTreeNode.setName("根虚拟节点");
|
||||
antdIndexMenuTreeNode.setPath("/");
|
||||
return antdIndexMenuTreeNode;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
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;
|
||||
}
|
||||
|
||||
}
|
|
@ -121,7 +121,7 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||
* @author fengshuonan
|
||||
* @date 2020/4/17 17:48
|
||||
*/
|
||||
List<AntdIndexMenuTreeNode> getAppMenusAntDesign(String appCode);
|
||||
List<AntdIndexMenuTreeNode> getAntDVueIndexMenus(String appCode);
|
||||
|
||||
/**
|
||||
* 获取系统菜单树,用于新增,编辑时选择上级节点
|
||||
|
|
|
@ -35,6 +35,7 @@ import cn.stylefeng.roses.kernel.db.api.DbOperatorApi;
|
|||
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
|
||||
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.SysMenuService;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
|
||||
|
@ -192,13 +193,16 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<AntdIndexMenuTreeNode> getAppMenusAntDesign(String appCode) {
|
||||
public List<AntdIndexMenuTreeNode> getAntDVueIndexMenus(String appCode) {
|
||||
|
||||
// 获取当前用户的所有菜单
|
||||
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(appCode);
|
||||
|
||||
// 转换成登录菜单格式
|
||||
return AntdMenusFactory.convertSysMenuToLoginMenu(currentUserMenus);
|
||||
List<AntdIndexMenuTreeNode> antdIndexMenuTreeNodes = AntdMenusFactory.convertSysMenuToLoginMenu(currentUserMenus);
|
||||
|
||||
// 转化成树结构
|
||||
return new DefaultTreeBuildFactory<AntdIndexMenuTreeNode>(SystemConstants.VIRTUAL_ROOT_PARENT_ID.toString()).doTreeBuild(antdIndexMenuTreeNodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -207,7 +211,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
|
||||
LambdaQueryWrapper<SysMenu> wrapper = createWrapper(sysMenuRequest);
|
||||
this.list(wrapper).forEach(sysMenu -> {
|
||||
MenuSelectTreeNode menuTreeNode = AntdMenusFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
MenuSelectTreeNode menuTreeNode = CommonMenusFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
menuTreeNodeList.add(menuTreeNode);
|
||||
});
|
||||
|
||||
|
@ -230,7 +234,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
}
|
||||
|
||||
this.list(wrapper).forEach(sysMenu -> {
|
||||
MenuSelectTreeNode menuTreeNode = AntdMenusFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
MenuSelectTreeNode menuTreeNode = CommonMenusFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
menuTreeNodeList.add(menuTreeNode);
|
||||
});
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode;
|
|||
import cn.stylefeng.roses.kernel.resource.modular.service.SysResourceService;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import cn.stylefeng.roses.kernel.system.ResourceServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.constants.SystemConstants;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
|
@ -28,8 +29,6 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.stylefeng.roses.kernel.system.constants.SystemConstants.DEFAULT_PARENT_ID;
|
||||
|
||||
/**
|
||||
* 资源表 服务实现类
|
||||
*
|
||||
|
@ -282,7 +281,7 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
|||
appNode.setCode(appName);
|
||||
appNode.setNodeName(appName);
|
||||
appNode.setResourceFlag(false);
|
||||
appNode.setParentCode(DEFAULT_PARENT_ID.toString());
|
||||
appNode.setParentCode(SystemConstants.DEFAULT_PARENT_ID.toString());
|
||||
|
||||
// 遍历当前应用下的模块资源
|
||||
Map<String, List<ResourceTreeNode>> modularResources = appModularResources.get(appName);
|
||||
|
|
Loading…
Reference in New Issue