Merge remote-tracking branch 'origin/fast' into fast

This commit is contained in:
疯狂的狮子li 2021-05-08 23:37:35 +08:00
commit 3fbf0a8e9e
9 changed files with 77 additions and 74 deletions

View File

@ -73,7 +73,9 @@ export default {
if(router.path === "/") { if(router.path === "/") {
router.children[item].path = "/redirect/" + router.children[item].path; router.children[item].path = "/redirect/" + router.children[item].path;
} else { } else {
router.children[item].path = router.path + "/" + router.children[item].path; if(!this.ishttp(router.children[item].path)) {
router.children[item].path = router.path + "/" + router.children[item].path;
}
} }
router.children[item].parentPath = router.path; router.children[item].parentPath = router.path;
} }
@ -122,7 +124,7 @@ export default {
// //
handleSelect(key, keyPath) { handleSelect(key, keyPath) {
this.currentIndex = key; this.currentIndex = key;
if (key.indexOf("http://") !== -1 || key.indexOf("https://") !== -1) { if (this.ishttp(key)) {
// http(s):// // http(s)://
window.open(key, "_blank"); window.open(key, "_blank");
} else if (key.indexOf("/redirect") !== -1) { } else if (key.indexOf("/redirect") !== -1) {
@ -147,6 +149,9 @@ export default {
this.$store.commit("SET_SIDEBAR_ROUTERS", routes); this.$store.commit("SET_SIDEBAR_ROUTERS", routes);
} }
return routes; return routes;
},
ishttp(url) {
return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1
} }
}, },
}; };

View File

@ -8,8 +8,8 @@
<artifactId>ruoyi</artifactId> <artifactId>ruoyi</artifactId>
<version>3.4.0</version> <version>3.4.0</version>
<name>ruoyi</name> <name>RuoYi-Vue-Plus</name>
<url>http://www.ruoyi.vip</url> <url>https://gitee.com/JavaLionLi/RuoYi-Vue-Plus</url>
<description>若依管理系统</description> <description>若依管理系统</description>
<properties> <properties>

View File

@ -73,11 +73,11 @@ public class SysUser implements Serializable
/** 用户头像 */ /** 用户头像 */
private String avatar; private String avatar;
/** 密码 */ /** 密码 */
@JsonProperty
private String password; private String password;
@JsonIgnore @JsonIgnore
@JsonProperty
public String getPassword() { public String getPassword() {
return password; return password;
} }

View File

@ -32,7 +32,7 @@ import java.util.stream.Collectors;
/** /**
* Excel相关处理 * Excel相关处理
* *
* @author ruoyi * @author ruoyi
*/ */
public class ExcelUtil<T> public class ExcelUtil<T>
@ -88,12 +88,12 @@ public class ExcelUtil<T>
* 统计列表 * 统计列表
*/ */
private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); private Map<Integer, Double> statistics = new HashMap<Integer, Double>();
/** /**
* 数字格式 * 数字格式
*/ */
private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00");
/** /**
* 实体对象 * 实体对象
*/ */
@ -119,7 +119,7 @@ public class ExcelUtil<T>
/** /**
* 对excel表单默认第一个索引名转换成list * 对excel表单默认第一个索引名转换成list
* *
* @param is 输入流 * @param is 输入流
* @return 转换后集合 * @return 转换后集合
*/ */
@ -130,7 +130,7 @@ public class ExcelUtil<T>
/** /**
* 对excel表单指定表格索引名转换成list * 对excel表单指定表格索引名转换成list
* *
* @param sheetName 表格索引名 * @param sheetName 表格索引名
* @param is 输入流 * @param is 输入流
* @return 转换后集合 * @return 转换后集合
@ -298,7 +298,7 @@ public class ExcelUtil<T>
/** /**
* 对list数据源将其里面的数据导入到excel表单 * 对list数据源将其里面的数据导入到excel表单
* *
* @param list 导出数据集合 * @param list 导出数据集合
* @param sheetName 工作表的名称 * @param sheetName 工作表的名称
* @return 结果 * @return 结果
@ -311,7 +311,7 @@ public class ExcelUtil<T>
/** /**
* 对list数据源将其里面的数据导入到excel表单 * 对list数据源将其里面的数据导入到excel表单
* *
* @param sheetName 工作表的名称 * @param sheetName 工作表的名称
* @return 结果 * @return 结果
*/ */
@ -323,7 +323,7 @@ public class ExcelUtil<T>
/** /**
* 对list数据源将其里面的数据导入到excel表单 * 对list数据源将其里面的数据导入到excel表单
* *
* @return 结果 * @return 结果
*/ */
public AjaxResult exportExcel() public AjaxResult exportExcel()
@ -391,7 +391,7 @@ public class ExcelUtil<T>
/** /**
* 填充excel数据 * 填充excel数据
* *
* @param index 序号 * @param index 序号
* @param row 单元格行 * @param row 单元格行
*/ */
@ -418,7 +418,7 @@ public class ExcelUtil<T>
/** /**
* 创建表格样式 * 创建表格样式
* *
* @param wb 工作薄对象 * @param wb 工作薄对象
* @return 样式列表 * @return 样式列表
*/ */
@ -456,7 +456,7 @@ public class ExcelUtil<T>
headerFont.setColor(IndexedColors.WHITE.getIndex()); headerFont.setColor(IndexedColors.WHITE.getIndex());
style.setFont(headerFont); style.setFont(headerFont);
styles.put("header", style); styles.put("header", style);
style = wb.createCellStyle(); style = wb.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER);
@ -500,7 +500,7 @@ public class ExcelUtil<T>
/** /**
* 设置单元格信息 * 设置单元格信息
* *
* @param value 单元格值 * @param value 单元格值
* @param attr 注解相关 * @param attr 注解相关
* @param cell 单元格信息 * @param cell 单元格信息
@ -513,7 +513,10 @@ public class ExcelUtil<T>
} }
else if (ColumnType.NUMERIC == attr.cellType()) else if (ColumnType.NUMERIC == attr.cellType())
{ {
cell.setCellValue(StrUtil.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); if (Validator.isNotNull(value))
{
cell.setCellValue(StrUtil.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value));
}
} }
else if (ColumnType.IMAGE == attr.cellType()) else if (ColumnType.IMAGE == attr.cellType())
{ {
@ -528,7 +531,7 @@ public class ExcelUtil<T>
} }
} }
} }
/** /**
* 获取画布 * 获取画布
*/ */
@ -643,7 +646,7 @@ public class ExcelUtil<T>
/** /**
* 设置 POI XSSFSheet 单元格提示 * 设置 POI XSSFSheet 单元格提示
* *
* @param sheet 表单 * @param sheet 表单
* @param promptTitle 提示标题 * @param promptTitle 提示标题
* @param promptContent 提示内容 * @param promptContent 提示内容
@ -653,7 +656,7 @@ public class ExcelUtil<T>
* @param endCol 结束列 * @param endCol 结束列
*/ */
public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow,
int firstCol, int endCol) int firstCol, int endCol)
{ {
DataValidationHelper helper = sheet.getDataValidationHelper(); DataValidationHelper helper = sheet.getDataValidationHelper();
DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); DataValidationConstraint constraint = helper.createCustomConstraint("DD1");
@ -666,7 +669,7 @@ public class ExcelUtil<T>
/** /**
* 设置某些列的值只能输入预制的数据,显示下拉框. * 设置某些列的值只能输入预制的数据,显示下拉框.
* *
* @param sheet 要设置的sheet. * @param sheet 要设置的sheet.
* @param textlist 下拉框显示的内容 * @param textlist 下拉框显示的内容
* @param firstRow 开始行 * @param firstRow 开始行
@ -700,7 +703,7 @@ public class ExcelUtil<T>
/** /**
* 解析导出值 0=,1=,2=未知 * 解析导出值 0=,1=,2=未知
* *
* @param propertyValue 参数值 * @param propertyValue 参数值
* @param converterExp 翻译注解 * @param converterExp 翻译注解
* @param separator 分隔符 * @param separator 分隔符
@ -737,7 +740,7 @@ public class ExcelUtil<T>
/** /**
* 反向解析值 =0,=1,未知=2 * 反向解析值 =0,=1,未知=2
* *
* @param propertyValue 参数值 * @param propertyValue 参数值
* @param converterExp 翻译注解 * @param converterExp 翻译注解
* @param separator 分隔符 * @param separator 分隔符
@ -771,10 +774,10 @@ public class ExcelUtil<T>
} }
return StrUtil.strip(propertyString.toString(), null,separator); return StrUtil.strip(propertyString.toString(), null,separator);
} }
/** /**
* 解析字典值 * 解析字典值
* *
* @param dictValue 字典值 * @param dictValue 字典值
* @param dictType 字典类型 * @param dictType 字典类型
* @param separator 分隔符 * @param separator 分隔符
@ -787,7 +790,7 @@ public class ExcelUtil<T>
/** /**
* 反向解析值字典值 * 反向解析值字典值
* *
* @param dictLabel 字典标签 * @param dictLabel 字典标签
* @param dictType 字典类型 * @param dictType 字典类型
* @param separator 分隔符 * @param separator 分隔符
@ -797,7 +800,7 @@ public class ExcelUtil<T>
{ {
return DictUtils.getDictValue(dictType, dictLabel, separator); return DictUtils.getDictValue(dictType, dictLabel, separator);
} }
/** /**
* 合计统计信息 * 合计统计信息
*/ */
@ -834,7 +837,7 @@ public class ExcelUtil<T>
cell = row.createCell(0); cell = row.createCell(0);
cell.setCellStyle(styles.get("total")); cell.setCellStyle(styles.get("total"));
cell.setCellValue("合计"); cell.setCellValue("合计");
for (Integer key : keys) for (Integer key : keys)
{ {
cell = row.createCell(key); cell = row.createCell(key);
@ -856,7 +859,7 @@ public class ExcelUtil<T>
/** /**
* 获取下载路径 * 获取下载路径
* *
* @param filename 文件名称 * @param filename 文件名称
*/ */
public String getAbsoluteFile(String filename) public String getAbsoluteFile(String filename)
@ -872,7 +875,7 @@ public class ExcelUtil<T>
/** /**
* 获取bean中的属性值 * 获取bean中的属性值
* *
* @param vo 实体对象 * @param vo 实体对象
* @param field 字段 * @param field 字段
* @param excel 注解 * @param excel 注解
@ -903,7 +906,7 @@ public class ExcelUtil<T>
/** /**
* 以类的属性的get方法方法形式获取值 * 以类的属性的get方法方法形式获取值
* *
* @param o * @param o
* @param name * @param name
* @return value * @return value
@ -952,7 +955,7 @@ public class ExcelUtil<T>
this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList());
this.maxHeight = getRowHeight(); this.maxHeight = getRowHeight();
} }
/** /**
* 根据注解获取最大行高 * 根据注解获取最大行高
*/ */
@ -988,7 +991,7 @@ public class ExcelUtil<T>
/** /**
* 创建工作表 * 创建工作表
* *
* @param sheetNo sheet数量 * @param sheetNo sheet数量
* @param index 序号 * @param index 序号
*/ */
@ -1009,7 +1012,7 @@ public class ExcelUtil<T>
/** /**
* 获取单元格值 * 获取单元格值
* *
* @param row 获取的行 * @param row 获取的行
* @param column 获取单元格列号 * @param column 获取单元格列号
* @return 单元格值 * @return 单元格值

View File

@ -7,49 +7,39 @@ import org.apache.ibatis.reflection.MetaObject;
import java.util.Date; import java.util.Date;
/** /**
* @author woo * MP注入处理器
* @date 2021/3/11 * @author Lion Li
* @date 2021/4/25
*/ */
public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
@Override @Override
public void insertFill(MetaObject metaObject) { public void insertFill(MetaObject metaObject) {
//region 处理创建人信息 //根据属性名字设置要填充的值
Object createBy = this.getFieldValByName("createBy", metaObject); if (metaObject.hasGetter("createTime")) {
Object createTime = this.getFieldValByName("createTime", metaObject); if (metaObject.getValue("createTime") == null) {
if (createBy == null) { this.setFieldValByName("createTime", new Date(), metaObject);
createBy = SecurityUtils.getUsername(); }
this.setFieldValByName("createBy", createBy, metaObject);
} }
if (createTime == null) { if (metaObject.hasGetter("createBy")) {
createTime = new Date(); if (metaObject.getValue("createBy") == null) {
this.setFieldValByName("createTime", createTime, metaObject); this.setFieldValByName("createBy", SecurityUtils.getUsername(), metaObject);
}
} }
//endregion
} }
@Override @Override
public void updateFill(MetaObject metaObject) { public void updateFill(MetaObject metaObject) {
//region 处理修改人信息 if (metaObject.hasGetter("updateBy")) {
Object updateBy = this.getFieldValByName("updateBy", metaObject); if (metaObject.getValue("updateBy") == null) {
Object updateTime = this.getFieldValByName("updateTime", metaObject); this.setFieldValByName("updateBy", SecurityUtils.getUsername(), metaObject);
if (updateBy == null) { }
updateBy = SecurityUtils.getUsername();
this.setFieldValByName("updateBy", updateBy, metaObject);
} }
if (updateTime == null) { if (metaObject.hasGetter("updateTime")) {
updateTime = new Date(); if (metaObject.getValue("updateTime") == null) {
this.setFieldValByName("updateTime", updateTime, metaObject); this.setFieldValByName("updateTime", new Date(), metaObject);
}
} }
//endregion
} }
@Override
public boolean openInsertFill() {
return true;
}
@Override
public boolean openUpdateFill() {
return true;
}
} }

View File

@ -10,6 +10,7 @@ import com.ruoyi.system.service.ISysLogininforService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -28,6 +29,7 @@ public class SysLogininforServiceImpl extends ServiceImpl<SysLogininforMapper, S
*/ */
@Override @Override
public void insertLogininfor(SysLogininfor logininfor) { public void insertLogininfor(SysLogininfor logininfor) {
logininfor.setLoginTime(new Date());
save(logininfor); save(logininfor);
} }
@ -45,10 +47,10 @@ public class SysLogininforServiceImpl extends ServiceImpl<SysLogininforMapper, S
.eq(StrUtil.isNotBlank(logininfor.getStatus()),SysLogininfor::getStatus,logininfor.getStatus()) .eq(StrUtil.isNotBlank(logininfor.getStatus()),SysLogininfor::getStatus,logininfor.getStatus())
.like(StrUtil.isNotBlank(logininfor.getUserName()),SysLogininfor::getUserName,logininfor.getUserName()) .like(StrUtil.isNotBlank(logininfor.getUserName()),SysLogininfor::getUserName,logininfor.getUserName())
.apply(Validator.isNotEmpty(params.get("beginTime")), .apply(Validator.isNotEmpty(params.get("beginTime")),
"date_format(login_time,'%y%m%d') &gt;= date_format({0},'%y%m%d')", "date_format(login_time,'%y%m%d') >= date_format({0},'%y%m%d')",
params.get("beginTime")) params.get("beginTime"))
.apply(Validator.isNotEmpty(params.get("endTime")), .apply(Validator.isNotEmpty(params.get("endTime")),
"date_format(login_time,'%y%m%d') &lt;= date_format({0},'%y%m%d'", "date_format(login_time,'%y%m%d') <= date_format({0},'%y%m%d')",
params.get("endTime")) params.get("endTime"))
.orderByDesc(SysLogininfor::getInfoId)); .orderByDesc(SysLogininfor::getInfoId));
} }

View File

@ -142,6 +142,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
router.setRedirect("noRedirect"); router.setRedirect("noRedirect");
router.setChildren(buildMenus(cMenus)); router.setChildren(buildMenus(cMenus));
} else if (isMenuFrame(menu)) { } else if (isMenuFrame(menu)) {
router.setMeta(null);
List<RouterVo> childrenList = new ArrayList<RouterVo>(); List<RouterVo> childrenList = new ArrayList<RouterVo>();
RouterVo children = new RouterVo(); RouterVo children = new RouterVo();
children.setPath(menu.getPath()); children.setPath(menu.getPath());

View File

@ -11,6 +11,7 @@ import com.ruoyi.system.service.ISysOperLogService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -29,6 +30,7 @@ public class SysOperLogServiceImpl extends ServiceImpl<SysOperLogMapper, SysOper
*/ */
@Override @Override
public void insertOperlog(SysOperLog operLog) { public void insertOperlog(SysOperLog operLog) {
operLog.setOperTime(new Date());
save(operLog); save(operLog);
} }
@ -54,10 +56,10 @@ public class SysOperLogServiceImpl extends ServiceImpl<SysOperLogMapper, SysOper
SysOperLog::getStatus,operLog.getStatus()) SysOperLog::getStatus,operLog.getStatus())
.like(StrUtil.isNotBlank(operLog.getOperName()),SysOperLog::getOperName,operLog.getOperName()) .like(StrUtil.isNotBlank(operLog.getOperName()),SysOperLog::getOperName,operLog.getOperName())
.apply(Validator.isNotEmpty(params.get("beginTime")), .apply(Validator.isNotEmpty(params.get("beginTime")),
"date_format(login_time,'%y%m%d') &gt;= date_format({0},'%y%m%d')", "date_format(oper_time,'%y%m%d') >= date_format({0},'%y%m%d')",
params.get("beginTime")) params.get("beginTime"))
.apply(Validator.isNotEmpty(params.get("endTime")), .apply(Validator.isNotEmpty(params.get("endTime")),
"date_format(login_time,'%y%m%d') &lt;= date_format({0},'%y%m%d'", "date_format(oper_time,'%y%m%d') <= date_format({0},'%y%m%d')",
params.get("endTime")) params.get("endTime"))
.orderByDesc(SysOperLog::getOperId)); .orderByDesc(SysOperLog::getOperId));
} }

View File

@ -198,11 +198,11 @@ mybatis-plus:
# NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断) # NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断)
# DEFAULT 默认的,一般只用于注解里 # DEFAULT 默认的,一般只用于注解里
# NEVER 不加入 SQL # NEVER 不加入 SQL
insertStrategy: NOT_NULL insertStrategy: NOT_EMPTY
# 字段验证策略之 update,在 update 的时候的字段验证策略 # 字段验证策略之 update,在 update 的时候的字段验证策略
updateStrategy: NOT_NULL updateStrategy: NOT_EMPTY
# 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件 # 字段验证策略之 select,在 select 的时候的字段验证策略既 wrapper 根据内部 entity 生成的 where 条件
selectStrategy: NOT_NULL selectStrategy: NOT_EMPTY
# PageHelper分页插件 # PageHelper分页插件
pagehelper: pagehelper: