修改 get-routers 接口的相关方法,简单完成

This commit is contained in:
YunaiV
2021-01-06 01:45:32 +08:00
parent 823c26a567
commit c9372b0a5c
10 changed files with 310 additions and 427 deletions

View File

@ -0,0 +1,6 @@
/**
* 错误码组件
*
* 将错误码缓存在内存中,同时通过定时器每 n 分钟更新
*/
package cn.iocoder.dashboard.framework.errorcode;

View File

@ -0,0 +1,156 @@
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;
}
}
}

View File

@ -0,0 +1,18 @@
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();
}

View File

@ -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<SysAuthGetRouterRespVO> children;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class MetaVO {
/**

View File

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

View File

@ -11,7 +11,7 @@ import java.util.List;
public interface SysMenuService {
/**
*
* 初始化菜单
*/
void init();
@ -39,4 +39,6 @@ public interface SysMenuService {
List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds, Collection<String> menuTypes,
Collection<String> menusStatuses);
}

View File

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