mirror of https://gitee.com/stylefeng/roses
【menu】整理layui的菜单获取
parent
2863c47ad5
commit
58f829f44f
|
@ -48,4 +48,9 @@ public interface SystemConstants {
|
|||
*/
|
||||
Boolean DEFAULT_CAPTCHA_OPEN = false;
|
||||
|
||||
/**
|
||||
* 默认的系统的名称
|
||||
*/
|
||||
String DEFAULT_SYSTEM_NAME = "Guns快速开发平台";
|
||||
|
||||
}
|
|
@ -41,4 +41,14 @@ public class SystemConfigExpander {
|
|||
return ConfigContext.me().getSysConfigValueWithDefault("SYS_CAPTCHA_OPEN", Boolean.class, SystemConstants.DEFAULT_CAPTCHA_OPEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统名称
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 17:22
|
||||
*/
|
||||
public static String getSystemName() {
|
||||
return ConfigContext.me().getSysConfigValueWithDefault("SYS_SYSTEM_NAME", String.class, SystemConstants.DEFAULT_SYSTEM_NAME);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package cn.stylefeng.roses.kernel.system.pojo.menu.layui;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Layui用于首页渲染菜单的实体
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 18:39
|
||||
*/
|
||||
@Data
|
||||
public class LayuiAppIndexMenus {
|
||||
|
||||
/**
|
||||
* 应用的编码
|
||||
*/
|
||||
private String appCode;
|
||||
|
||||
/**
|
||||
* 该应用对应的菜单树
|
||||
*/
|
||||
private List<LayuiIndexMenuTreeNode> layuiIndexMenuTreeNodes;
|
||||
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package cn.stylefeng.roses.kernel.system.pojo.menu.layui;
|
||||
|
||||
import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Layui首页菜单的节点
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 18:36
|
||||
*/
|
||||
@Data
|
||||
public class LayuiIndexMenuTreeNode implements AbstractTreeNode {
|
||||
|
||||
/**
|
||||
* 应用编码
|
||||
*/
|
||||
private String appCode;
|
||||
|
||||
/**
|
||||
* 节点id
|
||||
*/
|
||||
private Long menuId;
|
||||
|
||||
/**
|
||||
* 父节点
|
||||
*/
|
||||
private Long menuParentId;
|
||||
|
||||
/**
|
||||
* 菜单名称
|
||||
*/
|
||||
private String menuName;
|
||||
|
||||
/**
|
||||
* 节点的url
|
||||
*/
|
||||
private String router;
|
||||
|
||||
/**
|
||||
* 节点图标
|
||||
*/
|
||||
private String icon;
|
||||
|
||||
/**
|
||||
* 子节点的集合
|
||||
*/
|
||||
private List<LayuiIndexMenuTreeNode> children;
|
||||
|
||||
@Override
|
||||
public String getNodeId() {
|
||||
return this.menuId.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNodeParentId() {
|
||||
return this.menuParentId.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setChildrenNodes(List childrenNodes) {
|
||||
this.children = childrenNodes;
|
||||
}
|
||||
|
||||
}
|
|
@ -10,12 +10,12 @@ import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode;
|
|||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单pojo的组装
|
||||
* 针对于antd前端的菜单的组装
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/23 21:58
|
||||
*/
|
||||
public class MenuFactory {
|
||||
public class AntdMenusFactory {
|
||||
|
||||
/**
|
||||
* menu实体转化为菜单树节点
|
|
@ -0,0 +1,70 @@
|
|||
package cn.stylefeng.roses.kernel.menu.modular.factory;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
|
||||
import cn.stylefeng.roses.kernel.rule.factory.DefaultTreeBuildFactory;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiIndexMenuTreeNode;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 针对于layui前端的菜单的组装
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 18:53
|
||||
*/
|
||||
public class LayuiMenusFactory {
|
||||
|
||||
/**
|
||||
* 创建layui前端首页需要的菜单列表
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 19:07
|
||||
*/
|
||||
public static List<LayuiAppIndexMenus> createLayuiAppIndexMenus(List<SysMenu> sysMenuList) {
|
||||
|
||||
ArrayList<LayuiAppIndexMenus> resultList = new ArrayList<>();
|
||||
|
||||
// 找出用户有多少个应用的菜单
|
||||
Set<String> appCodes = new HashSet<>();
|
||||
for (SysMenu currentUserMenu : sysMenuList) {
|
||||
String appCode = currentUserMenu.getAppCode();
|
||||
appCodes.add(appCode);
|
||||
}
|
||||
|
||||
// 找出每个应用下的所有菜单
|
||||
for (String appCode : appCodes) {
|
||||
|
||||
|
||||
// 找出这个应用下的菜单
|
||||
List<SysMenu> appMenus = sysMenuList.stream()
|
||||
.filter(i -> i.getAppCode().equals(appCode))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 菜单实体 转化为 layui节点
|
||||
ArrayList<LayuiIndexMenuTreeNode> layuiIndexMenuTreeNodes = new ArrayList<>();
|
||||
for (SysMenu appMenu : appMenus) {
|
||||
LayuiIndexMenuTreeNode layuiIndexMenuTreeNode = new LayuiIndexMenuTreeNode();
|
||||
BeanUtil.copyProperties(appMenu, layuiIndexMenuTreeNode);
|
||||
layuiIndexMenuTreeNodes.add(layuiIndexMenuTreeNode);
|
||||
}
|
||||
|
||||
// 将这些菜单组合成树
|
||||
List<LayuiIndexMenuTreeNode> layuiIndexMenuTreeNodeList = new DefaultTreeBuildFactory<LayuiIndexMenuTreeNode>().doTreeBuild(layuiIndexMenuTreeNodes);
|
||||
|
||||
// 将appCode和对应的树包装为实体
|
||||
LayuiAppIndexMenus layuiAppIndexMenus = new LayuiAppIndexMenus();
|
||||
layuiAppIndexMenus.setAppCode(appCode);
|
||||
layuiAppIndexMenus.setLayuiIndexMenuTreeNodes(layuiIndexMenuTreeNodeList);
|
||||
resultList.add(layuiAppIndexMenus);
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
}
|
|
@ -27,6 +27,7 @@ package cn.stylefeng.roses.kernel.menu.modular.service;
|
|||
import cn.stylefeng.roses.kernel.menu.modular.entity.SysMenu;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.SysMenuRequest;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
|
@ -104,6 +105,14 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||
*/
|
||||
List<SysMenu> getCurrentUserMenus(String appCode);
|
||||
|
||||
/**
|
||||
* 获取当前用户首页所有菜单(对应Layui前端的)
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 18:48
|
||||
*/
|
||||
List<LayuiAppIndexMenus> getLayuiIndexMenus();
|
||||
|
||||
/**
|
||||
* 获取某个应用的菜单,用于系统顶部切换菜单(AntDesign前端框架)
|
||||
*
|
||||
|
|
|
@ -33,7 +33,8 @@ import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
|
|||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
|
||||
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.MenuFactory;
|
||||
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.mapper.SysMenuMapper;
|
||||
import cn.stylefeng.roses.kernel.menu.modular.service.SysMenuService;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
|
||||
|
@ -49,6 +50,7 @@ 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.menu.SysMenuRequest;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.antd.AntdIndexMenuTreeNode;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.layui.LayuiAppIndexMenus;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.menu.other.MenuSelectTreeNode;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
|
@ -179,6 +181,16 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
return this.list(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LayuiAppIndexMenus> getLayuiIndexMenus() {
|
||||
|
||||
// 获取当前用户所有菜单
|
||||
List<SysMenu> currentUserMenus = this.getCurrentUserMenus();
|
||||
|
||||
// 组装每个应用的菜单树
|
||||
return LayuiMenusFactory.createLayuiAppIndexMenus(currentUserMenus);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AntdIndexMenuTreeNode> getAppMenusAntDesign(String appCode) {
|
||||
|
||||
|
@ -186,7 +198,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
List<SysMenu> currentUserMenus = this.getCurrentUserMenus(appCode);
|
||||
|
||||
// 转换成登录菜单格式
|
||||
return MenuFactory.convertSysMenuToLoginMenu(currentUserMenus);
|
||||
return AntdMenusFactory.convertSysMenuToLoginMenu(currentUserMenus);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -195,7 +207,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
|
||||
LambdaQueryWrapper<SysMenu> wrapper = createWrapper(sysMenuRequest);
|
||||
this.list(wrapper).forEach(sysMenu -> {
|
||||
MenuSelectTreeNode menuTreeNode = MenuFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
MenuSelectTreeNode menuTreeNode = AntdMenusFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
menuTreeNodeList.add(menuTreeNode);
|
||||
});
|
||||
|
||||
|
@ -218,7 +230,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
}
|
||||
|
||||
this.list(wrapper).forEach(sysMenu -> {
|
||||
MenuSelectTreeNode menuTreeNode = MenuFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
MenuSelectTreeNode menuTreeNode = AntdMenusFactory.parseMenuBaseTreeNode(sysMenu);
|
||||
menuTreeNodeList.add(menuTreeNode);
|
||||
});
|
||||
|
||||
|
|
|
@ -158,4 +158,13 @@ public interface SysUserService extends IService<SysUser>, UserServiceApi {
|
|||
*/
|
||||
SysUser getUserByAccount(String account);
|
||||
|
||||
/**
|
||||
* 获取用户头像的url
|
||||
*
|
||||
* @param fileId 文件id
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/27 19:13
|
||||
*/
|
||||
String getUserAvatarUrl(Long fileId);
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,10 @@ import cn.stylefeng.roses.kernel.auth.api.expander.AuthConfigExpander;
|
|||
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.file.FileInfoApi;
|
||||
import cn.stylefeng.roses.kernel.file.FileOperatorApi;
|
||||
import cn.stylefeng.roses.kernel.file.expander.FileConfigExpander;
|
||||
import cn.stylefeng.roses.kernel.file.pojo.response.SysFileInfoResponse;
|
||||
import cn.stylefeng.roses.kernel.office.api.OfficeExcelApi;
|
||||
import cn.stylefeng.roses.kernel.office.api.pojo.report.ExcelExportParam;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
|
@ -82,6 +86,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
@Resource
|
||||
private ResourceServiceApi resourceServiceApi;
|
||||
|
||||
@Resource
|
||||
private FileInfoApi fileInfoApi;
|
||||
|
||||
@Resource
|
||||
private FileOperatorApi fileOperatorApi;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void add(SysUserRequest sysUserRequest) {
|
||||
|
@ -350,6 +360,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
return list.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUserAvatarUrl(Long fileId) {
|
||||
|
||||
// 获取头像文件详细信息
|
||||
SysFileInfoResponse fileInfoWithoutContent = fileInfoApi.getFileInfoWithoutContent(fileId);
|
||||
|
||||
// 获取头像的访问地址
|
||||
return fileOperatorApi.getFileAuthUrl(
|
||||
fileInfoWithoutContent.getFileBucket(),
|
||||
fileInfoWithoutContent.getFileObjectName(),
|
||||
FileConfigExpander.getDefaultFileTimeoutSeconds() * 1000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserLoginInfoDTO getUserLoginInfo(String account) {
|
||||
|
||||
|
|
Loading…
Reference in New Issue