diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index fd9084e9e..a598a0e75 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -26,7 +26,7 @@ import com.ruoyi.system.service.ISysMenuService; /** * 菜单 业务层处理 - * + * * @author ruoyi */ @Service @@ -45,7 +45,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户查询系统菜单列表 - * + * * @param userId 用户ID * @return 菜单列表 */ @@ -57,7 +57,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 查询系统菜单列表 - * + * * @param menu 菜单信息 * @return 菜单列表 */ @@ -80,7 +80,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户ID查询权限 - * + * * @param userId 用户ID * @return 权限列表 */ @@ -101,7 +101,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据用户ID查询菜单 - * + * * @param userId 用户名称 * @return 菜单列表 */ @@ -122,7 +122,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据角色ID查询菜单树信息 - * + * * @param roleId 角色ID * @return 选中菜单列表 */ @@ -133,82 +133,9 @@ public class SysMenuServiceImpl implements ISysMenuService return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); } - /** - * 构建前端路由所需要的菜单 - * - * @param menus 菜单列表 - * @return 路由列表 - */ - @Override - public List buildMenus(List menus) - { - List routers = new LinkedList(); - for (SysMenu menu : menus) - { - RouterVo router = new RouterVo(); - router.setHidden("1".equals(menu.getVisible())); - router.setName(getRouteName(menu)); - router.setPath(getRouterPath(menu)); - router.setComponent(getComponent(menu)); - router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()))); - List cMenus = menu.getChildren(); - if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) - { - router.setAlwaysShow(true); - router.setRedirect("noRedirect"); - router.setChildren(buildMenus(cMenus)); - } - else if (isMeunFrame(menu)) - { - List childrenList = new ArrayList(); - RouterVo children = new RouterVo(); - children.setPath(menu.getPath()); - children.setComponent(menu.getComponent()); - children.setName(StringUtils.capitalize(menu.getPath())); - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()))); - childrenList.add(children); - router.setChildren(childrenList); - } - routers.add(router); - } - return routers; - } - - /** - * 构建前端所需要树结构 - * - * @param menus 菜单列表 - * @return 树结构列表 - */ - @Override - public List buildMenuTree(List menus) - { - List returnList = new ArrayList(); - List tempList = new ArrayList(); - for (SysMenu dept : menus) - { - tempList.add(dept.getMenuId()); - } - for (Iterator iterator = menus.iterator(); iterator.hasNext();) - { - SysMenu menu = (SysMenu) iterator.next(); - // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.contains(menu.getParentId())) - { - recursionFn(menus, menu); - returnList.add(menu); - } - } - if (returnList.isEmpty()) - { - returnList = menus; - } - return returnList; - } - /** * 构建前端所需要下拉树结构 - * + * * @param menus 菜单列表 * @return 下拉树结构列表 */ @@ -221,7 +148,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 根据菜单ID查询信息 - * + * * @param menuId 菜单ID * @return 菜单信息 */ @@ -233,7 +160,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 是否存在菜单子节点 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -246,7 +173,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 查询菜单使用数量 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -259,7 +186,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 新增保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -271,7 +198,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 修改保存菜单信息 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -283,7 +210,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 删除菜单管理信息 - * + * * @param menuId 菜单ID * @return 结果 */ @@ -295,7 +222,7 @@ public class SysMenuServiceImpl implements ISysMenuService /** * 校验菜单名称是否唯一 - * + * * @param menu 菜单信息 * @return 结果 */ @@ -311,155 +238,4 @@ public class SysMenuServiceImpl implements ISysMenuService return UserConstants.UNIQUE; } - /** - * 获取路由名称 - * - * @param menu 菜单信息 - * @return 路由名称 - */ - public String getRouteName(SysMenu menu) - { - String routerName = StringUtils.capitalize(menu.getPath()); - // 非外链并且是一级目录(类型为目录) - if (isMeunFrame(menu)) - { - routerName = StringUtils.EMPTY; - } - return routerName; - } - - /** - * 获取路由地址 - * - * @param menu 菜单信息 - * @return 路由地址 - */ - public String getRouterPath(SysMenu menu) - { - String routerPath = menu.getPath(); - // 非外链并且是一级目录(类型为目录) - if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) - && UserConstants.NO_FRAME.equals(menu.getIsFrame())) - { - routerPath = "/" + menu.getPath(); - } - // 非外链并且是一级目录(类型为菜单) - else if (isMeunFrame(menu)) - { - routerPath = "/"; - } - return routerPath; - } - - /** - * 获取组件信息 - * - * @param menu 菜单信息 - * @return 组件信息 - */ - public String getComponent(SysMenu menu) - { - String component = UserConstants.LAYOUT; - if (StringUtils.isNotEmpty(menu.getComponent()) && !isMeunFrame(menu)) - { - component = menu.getComponent(); - } - else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) - { - component = UserConstants.PARENT_VIEW; - } - return component; - } - - /** - * 是否为菜单内部跳转 - * - * @param menu 菜单信息 - * @return 结果 - */ - public boolean isMeunFrame(SysMenu menu) - { - return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) - && menu.getIsFrame().equals(UserConstants.NO_FRAME); - } - - /** - * 是否为parent_view组件 - * - * @param menu 菜单信息 - * @return 结果 - */ - public boolean isParentView(SysMenu menu) - { - return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); - } - - /** - * 根据父节点的ID获取所有子节点 - * - * @param list 分类表 - * @param parentId 传入的父节点ID - * @return String - */ - public List getChildPerms(List list, int parentId) - { - List returnList = new ArrayList(); - for (Iterator iterator = list.iterator(); iterator.hasNext();) - { - SysMenu t = (SysMenu) iterator.next(); - // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 - if (t.getParentId() == parentId) - { - recursionFn(list, t); - returnList.add(t); - } - } - return returnList; - } - - /** - * 递归列表 - * - * @param list - * @param t - */ - private void recursionFn(List list, SysMenu t) - { - // 得到子节点列表 - List childList = getChildList(list, t); - t.setChildren(childList); - for (SysMenu tChild : childList) - { - if (hasChild(list, tChild)) - { - recursionFn(list, tChild); - } - } - } - - /** - * 得到子节点列表 - */ - private List getChildList(List list, SysMenu t) - { - List tlist = new ArrayList(); - Iterator it = list.iterator(); - while (it.hasNext()) - { - SysMenu n = (SysMenu) it.next(); - if (n.getParentId().longValue() == t.getMenuId().longValue()) - { - tlist.add(n); - } - } - return tlist; - } - - /** - * 判断是否有子节点 - */ - private boolean hasChild(List list, SysMenu t) - { - return getChildList(list, t).size() > 0 ? true : false; - } } diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js index ab109fcc0..18ad8e0e8 100644 --- a/ruoyi-ui/src/store/modules/permission.js +++ b/ruoyi-ui/src/store/modules/permission.js @@ -24,8 +24,10 @@ const permission = { return new Promise(resolve => { // 向后端请求路由数据 getRouters().then(res => { - const sdata = JSON.parse(JSON.stringify(res.data)) - const rdata = JSON.parse(JSON.stringify(res.data)) + // const sdata = JSON.parse(JSON.stringify(res.data)) + // const rdata = JSON.parse(JSON.stringify(res.data)) + const sdata = JSON.parse(JSON.stringify(res)) + const rdata = JSON.parse(JSON.stringify(res)) const sidebarRoutes = filterAsyncRouter(sdata) const rewriteRoutes = filterAsyncRouter(rdata, true) rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) diff --git a/src/main/java/cn/iocoder/dashboard/framework/errorcode/package-info.java b/src/main/java/cn/iocoder/dashboard/framework/errorcode/package-info.java new file mode 100644 index 000000000..18ec4ebd1 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/errorcode/package-info.java @@ -0,0 +1,6 @@ +/** + * 错误码组件 + * + * 将错误码缓存在内存中,同时通过定时器每 n 分钟更新 + */ +package cn.iocoder.dashboard.framework.errorcode; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/src/main/java/cn/iocoder/dashboard/framework/excel/Excel.java similarity index 73% rename from ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java rename to src/main/java/cn/iocoder/dashboard/framework/excel/Excel.java index 50482c572..6b793269d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java +++ b/src/main/java/cn/iocoder/dashboard/framework/excel/Excel.java @@ -1,165 +1,156 @@ -package com.ruoyi.common.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.math.BigDecimal; - -/** - * 自定义导出Excel数据注解 - * - * @author ruoyi - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface Excel -{ - /** - * 导出时在excel中排序 - */ - public int sort() default Integer.MAX_VALUE; - - /** - * 导出到Excel中的名字. - */ - public String name() default ""; - - /** - * 日期格式, 如: yyyy-MM-dd - */ - public String dateFormat() default ""; - - /** - * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) - */ - public String dictType() default ""; - - /** - * 读取内容转表达式 (如: 0=男,1=女,2=未知) - */ - public String readConverterExp() default ""; - - /** - * 分隔符,读取字符串组内容 - */ - public String separator() default ","; - - /** - * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) - */ - public int scale() default -1; - - /** - * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN - */ - public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; - - /** - * 导出类型(0数字 1字符串) - */ - public ColumnType cellType() default ColumnType.STRING; - - /** - * 导出时在excel中每个列的高度 单位为字符 - */ - public double height() default 14; - - /** - * 导出时在excel中每个列的宽 单位为字符 - */ - public double width() default 16; - - /** - * 文字后缀,如% 90 变成90% - */ - public String suffix() default ""; - - /** - * 当值为空时,字段的默认值 - */ - public String defaultValue() default ""; - - /** - * 提示信息 - */ - public String prompt() default ""; - - /** - * 设置只能选择不能输入的列内容. - */ - public String[] combo() default {}; - - /** - * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. - */ - public boolean isExport() default true; - - /** - * 另一个类中的属性名称,支持多级获取,以小数点隔开 - */ - public String targetAttr() default ""; - - /** - * 是否自动统计数据,在最后追加一行统计数据总和 - */ - public boolean isStatistics() default false; - - /** - * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右) - */ - Align align() default Align.AUTO; - - public enum Align - { - AUTO(0), LEFT(1), CENTER(2), RIGHT(3); - private final int value; - - Align(int value) - { - this.value = value; - } - - public int value() - { - return this.value; - } - } - - /** - * 字段类型(0:导出导入;1:仅导出;2:仅导入) - */ - Type type() default Type.ALL; - - public enum Type - { - ALL(0), EXPORT(1), IMPORT(2); - private final int value; - - Type(int value) - { - this.value = value; - } - - public int value() - { - return this.value; - } - } - - public enum ColumnType - { - NUMERIC(0), STRING(1), IMAGE(2); - private final int value; - - ColumnType(int value) - { - this.value = value; - } - - public int value() - { - return this.value; - } - } -} \ No newline at end of file +package cn.iocoder.dashboard.framework.excel; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 自定义导出Excel数据注解 + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel { + + /** + * 导出时在excel中排序 + */ + int sort() default Integer.MAX_VALUE; + + /** + * 导出到Excel中的名字. + */ + String name() default ""; + + /** + * 日期格式, 如: yyyy-MM-dd + */ + String dateFormat() default ""; + + /** + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) + */ + String dictType() default ""; + + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + public String readConverterExp() default ""; + + /** + * 分隔符,读取字符串组内容 + */ + public String separator() default ","; + + /** + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) + */ + public int scale() default -1; + + /** + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 导出类型(0数字 1字符串) + */ + public ColumnType cellType() default ColumnType.STRING; + + /** + * 导出时在excel中每个列的高度 单位为字符 + */ + public double height() default 14; + + /** + * 导出时在excel中每个列的宽 单位为字符 + */ + public double width() default 16; + + /** + * 文字后缀,如% 90 变成90% + */ + String suffix() default ""; + + /** + * 当值为空时,字段的默认值 + */ + String defaultValue() default ""; + + /** + * 提示信息 + */ + String prompt() default ""; + + /** + * 设置只能选择不能输入的列内容. + */ + String[] combo() default {}; + + /** + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. + */ + boolean isExport() default true; + + /** + * 另一个类中的属性名称,支持多级获取,以小数点隔开 + */ + String targetAttr() default ""; + + /** + * 是否自动统计数据,在最后追加一行统计数据总和 + */ + boolean isStatistics() default false; + + /** + * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右) + */ + Align align() default Align.AUTO; + + enum Align { + AUTO(0), LEFT(1), CENTER(2), RIGHT(3); + private final int value; + + Align(int value) { + this.value = value; + } + + public int value() { + return this.value; + } + } + + /** + * 字段类型(0:导出导入;1:仅导出;2:仅导入) + */ + Type type() default Type.ALL; + + enum Type { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) { + this.value = value; + } + + public int value() { + return this.value; + } + } + + enum ColumnType { + NUMERIC(0), STRING(1), IMAGE(2); + private final int value; + + ColumnType(int value) { + this.value = value; + } + + public int value() { + return this.value; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java b/src/main/java/cn/iocoder/dashboard/framework/excel/Excels.java similarity index 84% rename from ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java rename to src/main/java/cn/iocoder/dashboard/framework/excel/Excels.java index 940763f06..3264f7148 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java +++ b/src/main/java/cn/iocoder/dashboard/framework/excel/Excels.java @@ -1,18 +1,18 @@ -package com.ruoyi.common.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Excel注解集 - * - * @author ruoyi - */ -@Target(ElementType.FIELD) -@Retention(RetentionPolicy.RUNTIME) -public @interface Excels -{ - Excel[] value(); -} +package cn.iocoder.dashboard.framework.excel; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel注解集 + * + * @author ruoyi + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels +{ + Excel[] value(); +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetRouterRespVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetRouterRespVO.java index 54d8ee81c..91da9af88 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetRouterRespVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetRouterRespVO.java @@ -1,6 +1,9 @@ package cn.iocoder.dashboard.modules.system.controller.auth.vo; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @@ -10,6 +13,9 @@ import java.util.List; * @author ruoyi */ @Data +@NoArgsConstructor +@AllArgsConstructor +@Builder public class SysAuthGetRouterRespVO { /** @@ -62,6 +68,9 @@ public class SysAuthGetRouterRespVO { private List children; @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder public static class MetaVO { /** diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java b/src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java index 0f3af8e02..8967d7fb1 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java @@ -1,12 +1,17 @@ package cn.iocoder.dashboard.modules.system.convert.auth; +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; import cn.iocoder.dashboard.framework.security.core.LoginUser; import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO; import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO; import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; +import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum; +import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum; import cn.iocoder.dashboard.util.collection.CollectionUtils; +import jodd.util.StringUtil; +import org.apache.commons.lang3.StringUtils; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @@ -16,6 +21,12 @@ import java.util.List; @Mapper public interface SysAuthConvert { + /** Layout组件标识 */ + public final static String LAYOUT = "Layout"; + + /** ParentView组件标识 */ + public final static String PARENT_VIEW = "ParentView"; + SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class); @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略 @@ -29,6 +40,88 @@ public interface SysAuthConvert { .build(); } - SysAuthGetRouterRespVO convertTreeNode(SysMenuDO menu); + default SysAuthGetRouterRespVO convertTreeNode(SysMenuDO menu) { + SysAuthGetRouterRespVO.SysAuthGetRouterRespVOBuilder respVOBuilder = SysAuthGetRouterRespVO.builder(); + respVOBuilder.menuId(menu.getMenuId()).parentId(menu.getParentId()) + .hidden("1".equals(menu.getVisible())) // TODO 芋艿:需要处理 + .name(getRouteName(menu)).path(menu.getPath()).component(getComponent(menu)) + .meta(SysAuthGetRouterRespVO.MetaVO.builder().title(menu.getMenuName()).icon(menu.getIcon()) + .noCache("1".equals(menu.getIsCache())).build()) + ; + return respVOBuilder.build(); + } + + + + // TODO 芋艿:需要预处理。存储的时候 + default String getRouteName(SysMenuDO menu) { + String routerName = StringUtil.capitalize(menu.getPath()); // TODO 芋艿:看看怎么去除掉 + // 非外链并且是一级目录(类型为目录) + if (isMenuFrame(menu)) { + routerName = StringUtils.EMPTY; + } + return routerName; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * @return 是否 + */ + // TODO 芋艿:思考下是不是可以重构下 + default boolean isMenuFrame(SysMenuDO menu) { + return MenuIdEnum.ROOT.getId().equals(menu.getParentId()) + && MenuTypeEnum.MENU.getType().equals(menu.getMenuType()) + && CommonStatusEnum.ENABLE.getStatus().equals(menu.getIsFrame()); // TODO 芋艿:思考是不是用这个好 + } + +// /** // TODO 芋艿:后面重构下 +// * 获取路由地址 +// * +// * @param menu 菜单信息 +// * @return 路由地址 +// */ +// default String getRouterPath(SysMenuDO menu) { +// String routerPath = menu.getPath(); +// // 非外链并且是一级目录(类型为目录) +// if (MenuIdEnum.ROOT.getId().equals(menu.getParentId()) +// && MenuTypeEnum.MENU.getType().equals(menu.getMenuType()) +// && CommonStatusEnum.DISABLE.getStatus().equals(menu.getIsFrame())) { +// routerPath = "/" + menu.getPath(); +// } +// // 非外链并且是一级目录(类型为菜单) +// else if (isMenuFrame(menu)) { +// routerPath = "/"; +// } +// return routerPath; +// } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * @return 组件信息 + */ + default String getComponent(SysMenuDO menu) { + String component = LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { + component = menu.getComponent(); + } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { + component = PARENT_VIEW; + } + return component; + } + + /** + * 是否为parent_view组件 + * + * @param menu 菜单信息 + * @return 结果 + */ + default boolean isParentView(SysMenuDO menu) { + return !MenuIdEnum.ROOT.getId().equals(menu.getParentId()) + && MenuTypeEnum.DIR.getType().equals(menu.getMenuType()); + } } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuService.java index b574fe8be..d81e7ee30 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuService.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuService.java @@ -11,7 +11,7 @@ import java.util.List; public interface SysMenuService { /** - * + * 初始化菜单 */ void init(); @@ -39,4 +39,6 @@ public interface SysMenuService { List listMenusFromCache(Collection menuIds, Collection menuTypes, Collection menusStatuses); + + } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java index 605ed6439..6fbaf7f04 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java @@ -12,7 +12,10 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -83,4 +86,5 @@ public class SysMenuServiceImpl implements SysMenuService { && menusStatuses.contains(menu.getStatus())) .collect(Collectors.toList()); } + } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 0e82dca16..e36dd6039 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -3,7 +3,7 @@ spring: name: dashboard # 数据源配置项 TODO 多数据源;TODO 监控配置 datasource: - url: jdbc:mysql://127.0.1:3306/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT + url: jdbc:mysql://127.0.1:33061/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT driver-class-name: com.mysql.jdbc.Driver username: root password: 123456