!11sync -- 同步 RuoYi-Vue-Plus 更新

update 更新uuid去除默认值 漏改
fix 修复 insertOrUpdateBatch 获取模板错误
update 更新 所有 oss 均支持 https 配置
fix 修复分页组件请求两次问题(I4SQOR)
update 去除编译器警告 规范写法

update 更新uuid去除默认值 漏改
fix 修复 insertOrUpdateBatch 获取模板错误
update 更新 所有 oss 均支持 https 配置
fix 修复分页组件请求两次问题(I4SQOR)
update 去除编译器警告 规范写法
add 增加页面更新说明
fix 修复 minio 适配 https 导致的问题
update 更新 多用户多设备的注释说明
发布 4.0.0
This commit is contained in:
konbai
2022-02-19 19:19:37 +08:00
parent fca8d8f99e
commit 863aa2fa33
26 changed files with 151 additions and 50 deletions

View File

@@ -6,15 +6,15 @@
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<version>3.5.0</version> <version>4.0.0</version>
<name>RuoYi-Flowable-Plus</name> <name>RuoYi-Flowable-Plus</name>
<url>https://gitee.com/KonBAI-Q/ruoyi-flowable-plus</url> <url>https://gitee.com/KonBAI-Q/ruoyi-flowable-plus</url>
<description>RuoYi-Flowable-Plus后台管理系统</description> <description>RuoYi-Flowable-Plus后台管理系统</description>
<properties> <properties>
<ruoyi-flowable-plus.version>3.5.0</ruoyi-flowable-plus.version> <ruoyi-flowable-plus.version>4.0.0</ruoyi-flowable-plus.version>
<spring-boot.version>2.5.8</spring-boot.version> <spring-boot.version>2.6.3</spring-boot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> <java.version>1.8</java.version>
@@ -273,7 +273,7 @@
<version>${ruoyi-flowable-plus.version}</version> <version>${ruoyi-flowable-plus.version}</version>
</dependency> </dependency>
<!-- 工作流模块 -->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-flowable</artifactId> <artifactId>ruoyi-flowable</artifactId>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -108,7 +108,7 @@ public interface BaseMapperPlus<M, T, V> extends BaseMapper<T> {
Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!"); Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!");
return SqlHelper.saveOrUpdateBatch(this.currentModelClass(), this.currentMapperClass(), log, entityList, batchSize, (sqlSession, entity) -> { return SqlHelper.saveOrUpdateBatch(this.currentModelClass(), this.currentMapperClass(), log, entityList, batchSize, (sqlSession, entity) -> {
Object idVal = tableInfo.getPropertyValue(entity, keyProperty); Object idVal = tableInfo.getPropertyValue(entity, keyProperty);
String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.INSERT_ONE); String sqlStatement = SqlHelper.getSqlStatement(this.currentMapperClass(), SqlMethod.SELECT_BY_ID);
return StringUtils.checkValNull(idVal) return StringUtils.checkValNull(idVal)
|| CollectionUtils.isEmpty(sqlSession.selectList(sqlStatement, entity)); || CollectionUtils.isEmpty(sqlSession.selectList(sqlStatement, entity));
}, (sqlSession, entity) -> { }, (sqlSession, entity) -> {

View File

@@ -12,7 +12,13 @@ import lombok.NoArgsConstructor;
/** /**
* 登录鉴权助手 * 登录鉴权助手
* 为适配多端登录而封装 *
* user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app
* deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios
* 可以组成 用户类型与设备类型多对多的 权限灵活控制
*
* 多用户体系 针对 多种用户类型 但权限控制不一致
* 可以组成 多用户类型表与多设备类型 分别控制权限
* *
* @author Lion Li * @author Lion Li
*/ */
@@ -26,7 +32,6 @@ public class LoginHelper {
/** /**
* 登录系统 * 登录系统
* 针对两套用户体系
* *
* @param loginUser 登录用户信息 * @param loginUser 登录用户信息
*/ */
@@ -38,7 +43,7 @@ public class LoginHelper {
/** /**
* 登录系统 基于 设备类型 * 登录系统 基于 设备类型
* 针对一套用户体系 * 针对相同用户体系不同设备
* *
* @param loginUser 登录用户信息 * @param loginUser 登录用户信息
*/ */

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-extend</artifactId> <artifactId>ruoyi-extend</artifactId>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-extend</artifactId> <artifactId>ruoyi-extend</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@@ -4,7 +4,7 @@
<parent> <parent>
<artifactId>ruoyi-extend</artifactId> <artifactId>ruoyi-extend</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<artifactId>ruoyi-xxl-job-admin</artifactId> <artifactId>ruoyi-xxl-job-admin</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -382,12 +382,13 @@ public class GenTableServiceImpl implements IGenTableService {
@Override @Override
public void validateEdit(GenTable genTable) { public void validateEdit(GenTable genTable) {
if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) {
Map<String, Object> paramsObj = genTable.getParams(); String options = JsonUtils.toJsonString(genTable.getParams());
if (ObjectUtil.isEmpty(paramsObj.get(GenConstants.TREE_CODE))) { Dict paramsObj = JsonUtils.parseMap(options);
if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_CODE))) {
throw new ServiceException("树编码字段不能为空"); throw new ServiceException("树编码字段不能为空");
} else if (ObjectUtil.isEmpty(paramsObj.get(GenConstants.TREE_PARENT_CODE))) { } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_PARENT_CODE))) {
throw new ServiceException("树父编码字段不能为空"); throw new ServiceException("树父编码字段不能为空");
} else if (ObjectUtil.isEmpty(paramsObj.get(GenConstants.TREE_NAME))) { } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_NAME))) {
throw new ServiceException("树名称字段不能为空"); throw new ServiceException("树名称字段不能为空");
} else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) { } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) {
if (StringUtils.isEmpty(genTable.getSubTableName())) { if (StringUtils.isEmpty(genTable.getSubTableName())) {

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -8,31 +8,36 @@ import java.util.List;
* *
* @author Lion Li * @author Lion Li
*/ */
public class OssConstant { public interface OssConstant {
/** /**
* OSS模块KEY * OSS模块KEY
*/ */
public static final String SYS_OSS_KEY = "sys_oss:"; String SYS_OSS_KEY = "sys_oss:";
/** /**
* 对象存储配置KEY * 对象存储配置KEY
*/ */
public static final String OSS_CONFIG_KEY = "OssConfig"; String OSS_CONFIG_KEY = "OssConfig";
/** /**
* 缓存配置KEY * 缓存配置KEY
*/ */
public static final String CACHE_CONFIG_KEY = SYS_OSS_KEY + OSS_CONFIG_KEY; String CACHE_CONFIG_KEY = SYS_OSS_KEY + OSS_CONFIG_KEY;
/** /**
* 预览列表资源开关Key * 预览列表资源开关Key
*/ */
public static final String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource"; String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource";
/** /**
* 系统数据ids * 系统数据ids
*/ */
public static final List<Integer> SYSTEM_DATA_IDS = Arrays.asList(1, 2, 3, 4); List<Integer> SYSTEM_DATA_IDS = Arrays.asList(1, 2, 3, 4);
/**
* https 状态
*/
String IS_HTTPS = "Y";
} }

View File

@@ -3,11 +3,13 @@ package com.ruoyi.oss.service.impl;
import com.aliyun.oss.ClientConfiguration; import com.aliyun.oss.ClientConfiguration;
import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSClient;
import com.aliyun.oss.common.auth.DefaultCredentialProvider; import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.Protocol;
import com.aliyun.oss.model.CannedAccessControlList; import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest; import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectRequest;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.exception.OssException; import com.ruoyi.oss.exception.OssException;
@@ -33,6 +35,9 @@ public class AliyunOssStrategy extends AbstractOssStrategy {
super.init(ossProperties); super.init(ossProperties);
try { try {
ClientConfiguration configuration = new ClientConfiguration(); ClientConfiguration configuration = new ClientConfiguration();
if (OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) {
configuration.setProtocol(Protocol.HTTPS);
}
DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider( DefaultCredentialProvider credentialProvider = new DefaultCredentialProvider(
properties.getAccessKey(), properties.getSecretKey()); properties.getAccessKey(), properties.getSecretKey());
client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration); client = new OSSClient(properties.getEndpoint(), credentialProvider, configuration);

View File

@@ -1,6 +1,7 @@
package com.ruoyi.oss.service.impl; package com.ruoyi.oss.service.impl;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.enumd.PolicyType; import com.ruoyi.oss.enumd.PolicyType;
@@ -8,6 +9,8 @@ import com.ruoyi.oss.exception.OssException;
import com.ruoyi.oss.properties.OssProperties; import com.ruoyi.oss.properties.OssProperties;
import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import com.ruoyi.oss.service.abstractd.AbstractOssStrategy;
import io.minio.*; import io.minio.*;
import io.minio.http.HttpUtils;
import okhttp3.HttpUrl;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -28,10 +31,15 @@ public class MinioOssStrategy extends AbstractOssStrategy {
public void init(OssProperties ossProperties) { public void init(OssProperties ossProperties) {
super.init(ossProperties); super.init(ossProperties);
try { try {
minioClient = MinioClient.builder() MinioClient.Builder builder = MinioClient.builder();
.endpoint(properties.getEndpoint()) if (OssConstant.IS_HTTPS.equals(ossProperties.getIsHttps())) {
.credentials(properties.getAccessKey(), properties.getSecretKey()) HttpUrl url = HttpUtils.getBaseUrl(properties.getEndpoint())
.build(); .newBuilder().scheme("https").build();
builder.endpoint(url);
} else {
builder.endpoint(properties.getEndpoint());
}
minioClient = builder.credentials(properties.getAccessKey(), properties.getSecretKey()).build();
createBucket(); createBucket();
} catch (Exception e) { } catch (Exception e) {
throw new OssException("Minio存储配置错误! 请检查系统配置:[" + e.getMessage() + "]"); throw new OssException("Minio存储配置错误! 请检查系统配置:[" + e.getMessage() + "]");

View File

@@ -8,6 +8,7 @@ import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.*; import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region; import com.qcloud.cos.region.Region;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.exception.OssException; import com.ruoyi.oss.exception.OssException;
@@ -38,7 +39,7 @@ public class QcloudOssStrategy extends AbstractOssStrategy {
ClientConfig clientConfig = new ClientConfig(); ClientConfig clientConfig = new ClientConfig();
// 设置bucket所在的区域华南gz 华北tj 华东sh // 设置bucket所在的区域华南gz 华北tj 华东sh
clientConfig.setRegion(new Region(properties.getRegion())); clientConfig.setRegion(new Region(properties.getRegion()));
if ("Y".equals(properties.getIsHttps())) { if (OssConstant.IS_HTTPS.equals(properties.getIsHttps())) {
clientConfig.setHttpProtocol(HttpProtocol.https); clientConfig.setHttpProtocol(HttpProtocol.https);
} else { } else {
clientConfig.setHttpProtocol(HttpProtocol.http); clientConfig.setHttpProtocol(HttpProtocol.http);

View File

@@ -7,6 +7,7 @@ import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region; import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager; import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth; import com.qiniu.util.Auth;
import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.entity.UploadResult;
import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.enumd.OssEnumd;
import com.ruoyi.oss.exception.OssException; import com.ruoyi.oss.exception.OssException;
@@ -35,8 +36,7 @@ public class QiniuOssStrategy extends AbstractOssStrategy {
try { try {
Configuration config = new Configuration(getRegion(properties.getRegion())); Configuration config = new Configuration(getRegion(properties.getRegion()));
// https设置 // https设置
config.useHttpsDomains = false; config.useHttpsDomains = OssConstant.IS_HTTPS.equals(properties.getIsHttps());
config.useHttpsDomains = "Y".equals(properties.getIsHttps());
uploadManager = new UploadManager(config); uploadManager = new UploadManager(config);
auth = Auth.create(properties.getAccessKey(), properties.getSecretKey()); auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
bucketManager = new BucketManager(auth, config); bucketManager = new BucketManager(auth, config);

View File

@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>ruoyi-flowable-plus</artifactId> <artifactId>ruoyi-flowable-plus</artifactId>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<version>3.5.0</version> <version>4.0.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@@ -1,6 +1,6 @@
{ {
"name": "ruoyi-flowable-plus", "name": "ruoyi-flowable-plus",
"version": "3.5.0", "version": "4.0.0",
"description": "RuoYi-Flowable-Plus后台管理系统", "description": "RuoYi-Flowable-Plus后台管理系统",
"author": "KonBAI", "author": "KonBAI",
"license": "MIT", "license": "MIT",

View File

@@ -1,6 +1,7 @@
<template> <template>
<div :class="{'hidden':hidden}" class="pagination-container"> <div :class="{'hidden':hidden}" class="pagination-container">
<el-pagination <el-pagination
v-if="pageShow"
:background="background" :background="background"
:current-page.sync="currentPage" :current-page.sync="currentPage"
:page-size.sync="pageSize" :page-size.sync="pageSize"
@@ -61,6 +62,11 @@ export default {
default: false default: false
} }
}, },
data() {
return {
pageShow: true
};
},
computed: { computed: {
currentPage: { currentPage: {
get() { get() {
@@ -81,6 +87,12 @@ export default {
}, },
methods: { methods: {
handleSizeChange(val) { handleSizeChange(val) {
if (this.currentPage * val > this.total) {
this.pageShow = false;
this.$nextTick(() => {
this.pageShow = true
})
}
this.$emit('pagination', { page: this.currentPage, limit: val }) this.$emit('pagination', { page: this.currentPage, limit: val })
if (this.autoScroll) { if (this.autoScroll) {
scrollTo(0, 800) scrollTo(0, 800)

View File

@@ -101,6 +101,70 @@
<span>更新日志</span> <span>更新日志</span>
</div> </div>
<el-collapse accordion> <el-collapse accordion>
<el-collapse-item title="v4.0.0 - 2022-02-18">
<ol>
<li>[重大更新] 重写项目整体结构 数据处理下沉至Mapper符合MVC规范 减少循环依赖</li>
<li>[重磅更新] 主分支与satoken分支合并 权限统一使用 sa-token</li>
<li>[重磅更新] 适配升级 SpringBoot 2.6</li>
<li>[重磅更新] EasyExcel大版本升级3.X</li>
<li>[重磅更新] 移除链式调用注解 因链式调用不符合java规范 导致很多问题</li>
<li>[重磅更新] 增加 轻量级 分布式队列 支持</li>
<li>[重磅更新] 增加 数据脱敏注解 使用序列化控制脱敏 支持多种表达式</li>
<li>[重磅更新] 重构 使用 Spring 简化 oss 模块代码</li>
<li>[重磅更新] 重构 调整返回类型为 R 精简 Controller 代码</li>
<li>update springboot 2.5.8 => 2.6.3</li>
<li>update mybatis-plus 3.4.3.4 => 3.5.1</li>
<li>update maven-jar-plugin 3.2.0 => 3.2.2</li>
<li>update maven-war-plugin 3.2.0 => 3.2.2</li>
<li>update maven-compiler-plugin 3.1 => 3.9.0</li>
<li>update hutool 5.7.18 => 5.7.20</li>
<li>update springboot-admin 2.6.0 => 2.6.2</li>
<li>update redisson 3.16.7 => 3.16.8</li>
<li>update qiniu 7.9.0 => 7.9.2</li>
<li>update aliyun 3.13.1 => 3.14.0</li>
<li>update qcloud 5.6.58 => 5.6.68</li>
<li>update minio 8.3.4 => 8.3.5</li>
<li>update 用户管理部门查询选择节点后分页参数初始</li>
<li>update 防重复提交标识组合key + url + header</li>
<li>update 接口文档增加 basic 账号密码验证</li>
<li>update 用户修改减少一次角色列表关联查询</li>
<li>update 优化部门修改缩放后出现的错位问题</li>
<li>update 指定 maven 资源过滤为具体文件 防止错误过滤</li>
<li>update hutool 引入改为 bom 依赖项引入</li>
<li>update 降低开发环境 redis连接池数量</li>
<li>update 升级 springboot 2.6.X 解决 springfox 兼容性问题</li>
<li>update 优化多用户体系处理 更名 LoginUtils LoginHelper 支持 LoginUser 多级缓存</li>
<li>update 优化加载字典缓存数据</li>
<li>update 数据库更改 对接多用户体系</li>
<li>update 移除掉 StringUtils 语义不明确的api方法 使用特定工具替换</li>
<li>update 优化登录注册在接口通过`@Validated`注解进行数据基础校验</li>
<li>update 优化 查询登录用户数据 统一走缓存</li>
<li>update 优化 redisson 配置 去除掉不常用的配置 使用默认配置</li>
<li>update 用户访问控制时校验数据权限防止越权</li>
<li>update 修改用户注册报未登录警告</li>
<li>update 调整oss预览开关 使用前端直接调用更改配置参数</li>
<li>update 使用 satoken 自带的 BCrypt 工具 替换 Security 加密工具 减少依赖</li>
<li>update 优化 TreeBuildUtils 工具 使用反射自动获取顶级父id</li>
<li>update 使用 hutool Dict 优化 JsonUtils 防止类型解析异常</li>
<li>update 优化代码生成 使用新 JsonUtils.parseMap 方法</li>
<li>update 更新 所有 oss 均支持 https 配置</li>
<li>add 增加 RedisUtils 工具 hasKey 检查key存在方法</li>
<li>add 增加 监控中心 自定义事件通知</li>
<li>add 增加 3.X update 4.0 更新sql</li>
<li>fix 修复登录失效后多次请求提示多次弹窗问题</li>
<li>fix 修复 StringUtils 通配符匹配无效</li>
<li>fix 修复选项卡点击右键刷新丢失参数问题</li>
<li>fix 修复 数据权限 缓存方法名错误问题</li>
<li>fix 修复自定义组件`file-upload`无法显示第一个文件列表显示的文件比实际文件少一个的问题</li>
<li>fix 修复因升级 sa-token 导致 doLogin 无法获取 token 问题</li>
<li>fix 修复分页组件请求两次问题</li>
<li>remove 移除过期代码 分页工具相关</li>
<li>remove 移除过期代码 多数据源切换</li>
<li>remove 移除过期代码 数据权限</li>
<li>3.X 版本进入维护阶段 不进行更新 只修复bug 持续维护到2022年10月</li>
<li>4.X 版本公测将近一个月 大部分bug已修复 官网主分支更改为 4.X 版本 推荐使用</li>
</ol>
</el-collapse-item>
<el-collapse-item title="v3.5.0 - 2021-12-28"> <el-collapse-item title="v3.5.0 - 2021-12-28">
<ol> <ol>
<li>[重大更新] 重写数据权限实现</li> <li>[重大更新] 重写数据权限实现</li>
@@ -644,7 +708,7 @@ export default {
data() { data() {
return { return {
// 版本号 // 版本号
version: "3.5.0", version: "4.0.0",
}; };
}, },
methods: { methods: {

View File

@@ -56,7 +56,7 @@
</el-form> </el-form>
<!-- 底部 --> <!-- 底部 -->
<div class="el-login-footer"> <div class="el-login-footer">
<span>Copyright © 2018-2021 konbai.work All Rights Reserved.</span> <span>Copyright © 2021-2022 konbai.work All Rights Reserved.</span>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -12,7 +12,7 @@ services:
# 初始化数据库(后续的初始化sql会在这个库执行) # 初始化数据库(后续的初始化sql会在这个库执行)
MYSQL_DATABASE: ry-vue MYSQL_DATABASE: ry-vue
ports: ports:
- 3306:3306 - "3306:3306"
volumes: volumes:
# 数据挂载 # 数据挂载
- /docker/mysql/data/:/var/lib/mysql/ - /docker/mysql/data/:/var/lib/mysql/
@@ -38,8 +38,8 @@ services:
# 时区上海 # 时区上海
TZ: Asia/Shanghai TZ: Asia/Shanghai
ports: ports:
- 80:80 - "80:80"
- 443:443 - "443:443"
volumes: volumes:
# 证书映射 # 证书映射
- /docker/nginx/cert:/etc/nginx/cert - /docker/nginx/cert:/etc/nginx/cert
@@ -58,7 +58,7 @@ services:
image: redis:6.2.6 image: redis:6.2.6
container_name: redis container_name: redis
ports: ports:
- 6379:6379 - "6379:6379"
environment: environment:
# 时区上海 # 时区上海
TZ: Asia/Shanghai TZ: Asia/Shanghai
@@ -79,9 +79,9 @@ services:
container_name: minio container_name: minio
ports: ports:
# api 端口 # api 端口
- 9000:9000 - "9000:9000"
# 控制台端口 # 控制台端口
- 9001:9001 - "9001:9001"
environment: environment:
# 时区上海 # 时区上海
TZ: Asia/Shanghai TZ: Asia/Shanghai
@@ -102,7 +102,7 @@ services:
ipv4_address: 172.30.0.54 ipv4_address: 172.30.0.54
ruoyi-server1: ruoyi-server1:
image: "ruoyi/ruoyi-server:3.5.0" image: ruoyi/ruoyi-server:4.0.0
container_name: ruoyi-server1 container_name: ruoyi-server1
environment: environment:
# 时区上海 # 时区上海
@@ -117,7 +117,7 @@ services:
ipv4_address: 172.30.0.60 ipv4_address: 172.30.0.60
ruoyi-server2: ruoyi-server2:
image: "ruoyi/ruoyi-server:3.5.0" image: "ruoyi/ruoyi-server:4.0.0"
container_name: ruoyi-server2 container_name: ruoyi-server2
environment: environment:
# 时区上海 # 时区上海
@@ -132,7 +132,7 @@ services:
ipv4_address: 172.30.0.61 ipv4_address: 172.30.0.61
ruoyi-monitor-admin: ruoyi-monitor-admin:
image: "ruoyi/ruoyi-monitor-admin:3.5.0" image: ruoyi/ruoyi-monitor-admin:4.0.0
container_name: ruoyi-monitor-admin container_name: ruoyi-monitor-admin
environment: environment:
# 时区上海 # 时区上海
@@ -147,7 +147,7 @@ services:
ipv4_address: 172.30.0.90 ipv4_address: 172.30.0.90
ruoyi-xxl-job-admin: ruoyi-xxl-job-admin:
image: "ruoyi/ruoyi-xxl-job-admin:3.5.0" image: ruoyi/ruoyi-xxl-job-admin:4.0.0
container_name: ruoyi-xxl-job-admin container_name: ruoyi-xxl-job-admin
environment: environment:
# 时区上海 # 时区上海