From f7dd7d1e424e2b776eb8d85d725aaa52989d738c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 11 Jul 2023 17:25:23 +0800 Subject: [PATCH 01/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20token=20?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E7=99=BB=E5=87=BA=E6=97=A0=E6=B3=95=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=9C=A8=E7=BA=BF=E7=94=A8=E6=88=B7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/system/service/SysLoginService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 1fa41b805..c2627445b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -143,9 +143,13 @@ public class SysLoginService { public void logout() { try { LoginUser loginUser = LoginHelper.getLoginUser(); - StpUtil.logout(); recordLogininfor(loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); } catch (NotLoginException ignored) { + } finally { + try { + StpUtil.logout(); + } catch (NotLoginException ignored) { + } } } From e9cc7c3058751d15c7fb57189f5b11cf3d399bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 11 Jul 2023 17:38:20 +0800 Subject: [PATCH 02/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=AE=BE=E7=BD=AE=20token=20=E6=9C=89=E6=95=88?= =?UTF-8?q?=E6=9C=9F=E4=B8=8D=E7=94=9F=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index da4154526..199a096a9 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -107,6 +107,8 @@ sa-token: # 多端不同 token 有效期 可查看 LoginHelper.loginByDevice 方法自定义 # token最低活跃时间 (指定时间无操作就过期) 单位: 秒 active-timeout: 1800 + # 允许动态设置 token 有效期 + dynamic-active-timeout: true # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) is-concurrent: true # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) From 8a86c5bdc5e029c72d643fda8d730383e6af2fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 11 Jul 2023 18:13:28 +0800 Subject: [PATCH 03/34] =?UTF-8?q?remove=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/StreamUtils.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java index 0f57122eb..72c2f939b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StreamUtils.java @@ -30,7 +30,6 @@ public class StreamUtils { if (CollUtil.isEmpty(collection)) { return CollUtil.newArrayList(); } - // 注意此处不要使用 .toList() 新语法 因为返回的是不可变List 会导致序列化问题 return collection.stream().filter(function).collect(Collectors.toList()); } @@ -71,7 +70,6 @@ public class StreamUtils { if (CollUtil.isEmpty(collection)) { return CollUtil.newArrayList(); } - // 注意此处不要使用 .toList() 新语法 因为返回的是不可变List 会导致序列化问题 return collection.stream().filter(Objects::nonNull).sorted(comparing).collect(Collectors.toList()); } @@ -190,7 +188,6 @@ public class StreamUtils { .stream() .map(function) .filter(Objects::nonNull) - // 注意此处不要使用 .toList() 新语法 因为返回的是不可变List 会导致序列化问题 .collect(Collectors.toList()); } From d4ab8a8e22b8bef87db82bcead8337f748842307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 13 Jul 2023 19:12:51 +0800 Subject: [PATCH 04/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java | 3 ++- .../com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java index 90b313340..65624a87f 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisDecryptInterceptor.java @@ -1,6 +1,7 @@ package com.ruoyi.framework.encrypt; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.annotation.EncryptField; import com.ruoyi.common.encrypt.EncryptContext; @@ -76,7 +77,7 @@ public class MybatisDecryptInterceptor implements Interceptor { Set fields = encryptorManager.getFieldCache(sourceObject.getClass()); try { for (Field field : fields) { - field.set(sourceObject, this.decryptField(String.valueOf(field.get(sourceObject)), field)); + field.set(sourceObject, this.decryptField(Convert.toStr(field.get(sourceObject)), field)); } } catch (Exception e) { log.error("处理解密字段时出错", e); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java index f5ffb2b12..ec4243282 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/encrypt/MybatisEncryptInterceptor.java @@ -1,6 +1,7 @@ package com.ruoyi.framework.encrypt; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.annotation.EncryptField; import com.ruoyi.common.encrypt.EncryptContext; @@ -86,7 +87,7 @@ public class MybatisEncryptInterceptor implements Interceptor { Set fields = encryptorManager.getFieldCache(sourceObject.getClass()); try { for (Field field : fields) { - field.set(sourceObject, this.encryptField(String.valueOf(field.get(sourceObject)), field)); + field.set(sourceObject, this.encryptField(Convert.toStr(field.get(sourceObject)), field)); } } catch (Exception e) { log.error("处理加密字段时出错", e); From 8a5cc7f76cfe50536d997f4ed5724b10dfe6555d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 13 Jul 2023 19:30:54 +0800 Subject: [PATCH 05/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20powerjob=20?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E9=9A=8F=E7=9D=80=E4=B8=BB=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E9=A3=98=E9=80=B8=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E9=9B=86=E7=BE=A4=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 4 ++-- ruoyi-admin/src/main/resources/application-prod.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index ffbc1c81a..c1cca7e9c 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -19,8 +19,8 @@ xxl.job: executor: # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册 appname: xxl-job-executor - # 执行器端口号 执行器从9101开始往后写 - port: 9101 + # 28080 端口 随着主应用端口飘逸 避免集群冲突 + port: 2${server.port} # 执行器注册:默认IP:PORT address: # 执行器IP:默认自动获取IP diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 6292ceab6..ca9072ef5 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -22,8 +22,8 @@ xxl.job: executor: # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册 appname: xxl-job-executor - # 执行器端口号 执行器从9101开始往后写 - port: 9101 + # 28080 端口 随着主应用端口飘逸 避免集群冲突 + port: 2${server.port} # 执行器注册:默认IP:PORT address: # 执行器IP:默认自动获取IP From 1d106111721b11c86b1202ea285384ec30d63b2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 13 Jul 2023 19:30:54 +0800 Subject: [PATCH 06/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20xxljob=20?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E9=9A=8F=E7=9D=80=E4=B8=BB=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E9=A3=98=E9=80=B8=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E9=9B=86=E7=BE=A4=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 4 ++-- ruoyi-admin/src/main/resources/application-prod.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index ffbc1c81a..c1cca7e9c 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -19,8 +19,8 @@ xxl.job: executor: # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册 appname: xxl-job-executor - # 执行器端口号 执行器从9101开始往后写 - port: 9101 + # 28080 端口 随着主应用端口飘逸 避免集群冲突 + port: 2${server.port} # 执行器注册:默认IP:PORT address: # 执行器IP:默认自动获取IP diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 6292ceab6..ca9072ef5 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -22,8 +22,8 @@ xxl.job: executor: # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册 appname: xxl-job-executor - # 执行器端口号 执行器从9101开始往后写 - port: 9101 + # 28080 端口 随着主应用端口飘逸 避免集群冲突 + port: 2${server.port} # 执行器注册:默认IP:PORT address: # 执行器IP:默认自动获取IP From 13d468d8cc2491efd8810afb3be15e8e548dc1b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=97=E8=BE=89?= <1179307527@qq.com> Date: Mon, 17 Jul 2023 14:40:02 +0800 Subject: [PATCH 07/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20RedisCacheC?= =?UTF-8?q?ontroller=20=E6=B3=A8=E9=87=8A=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/demo/controller/RedisCacheController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java index 7342cba98..7da724ac6 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java @@ -34,7 +34,7 @@ public class RedisCacheController { * 如果没有,就调用方法,然后把结果缓存起来 * 这个注解「一般用在查询方法上」 *

- * 重点说明: 缓存注解严谨与其他筛选数据功能一起使用 + * 重点说明: 缓存注解严禁与其他筛选数据功能一起使用 * 例如: 数据权限注解 会造成 缓存击穿 与 数据不一致问题 *

* cacheNames 命名规则 查看 {@link CacheNames} 注释 支持多参数 From db0c882f1bff5bdc2b4f4f79f68eb3a4e6ab94d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 17 Jul 2023 14:41:16 +0800 Subject: [PATCH 08/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E6=9D=83=E9=99=90=E6=94=AF=E6=8C=81=E4=BB=85=E6=9C=AC?= =?UTF-8?q?=E4=BA=BA=E6=9D=83=E9=99=90=E6=9F=A5=E7=9C=8B=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=97=A0=E6=B3=95=E6=9F=A5=E7=9C=8B=E8=87=AA=E5=B7=B1?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=9A=84=E8=A7=92=E8=89=B2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/system/mapper/SysRoleMapper.java | 6 ++++-- .../src/main/resources/mapper/system/SysRoleMapper.xml | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java index e2b3c0190..d741cdf9e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -19,7 +19,8 @@ import java.util.List; public interface SysRoleMapper extends BaseMapperPlus { @DataPermission({ - @DataColumn(key = "deptName", value = "d.dept_id") + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "us.user_id") }) Page selectPageRoleList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); @@ -30,7 +31,8 @@ public interface SysRoleMapper extends BaseMapperPlus selectRoleList(@Param(Constants.WRAPPER) Wrapper queryWrapper); diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 90dff5051..c6464cb84 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -36,6 +36,7 @@ from sys_role r left join sys_user_role sur on sur.role_id = r.role_id left join sys_user u on u.user_id = sur.user_id + left join sys_user us on us.user_name = r.create_by left join sys_dept d on u.dept_id = d.dept_id From ec6704181f7febdb2218f2e543b8140d0f8a4ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 25 Jul 2023 12:58:31 +0800 Subject: [PATCH 09/34] =?UTF-8?q?update=20=E5=88=A0=E9=99=A4=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E8=B7=9Fswagger=E6=9C=89=E5=85=B3=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E7=9C=BC=20=E9=81=BF=E5=85=8D=E8=AF=AF=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 17 +++++++-------- ...waggerConfig.java => SpringDocConfig.java} | 21 +++++++++---------- ...operties.java => SpringDocProperties.java} | 4 ++-- 3 files changed, 19 insertions(+), 23 deletions(-) rename ruoyi-framework/src/main/java/com/ruoyi/framework/config/{SwaggerConfig.java => SpringDocConfig.java} (86%) rename ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/{SwaggerProperties.java => SpringDocProperties.java} (95%) diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 199a096a9..627bb79d6 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -199,8 +199,13 @@ mybatis-encryptor: publicKey: privateKey: -# Swagger配置 -swagger: +springdoc: + api-docs: + # 是否开启接口文档 + enabled: true +# swagger-ui: +# # 持久化认证数据 +# persistAuthorization: true info: # 标题 title: '标题:${ruoyi.name}后台管理系统_接口文档' @@ -220,14 +225,6 @@ swagger: type: APIKEY in: HEADER name: ${sa-token.token-name} - -springdoc: - api-docs: - # 是否开启接口文档 - enabled: true - swagger-ui: - # 持久化认证数据 - persistAuthorization: true #这里定义了两个分组,可定义多个,也可以不定义 group-configs: - group: 1.演示模块 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SpringDocConfig.java similarity index 86% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/SpringDocConfig.java index 88af7e725..b10e35dca 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SpringDocConfig.java @@ -1,7 +1,7 @@ package com.ruoyi.framework.config; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.framework.config.properties.SwaggerProperties; +import com.ruoyi.framework.config.properties.SpringDocProperties; import com.ruoyi.framework.handler.OpenApiHandler; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Paths; @@ -34,25 +34,24 @@ import java.util.Set; @Configuration @AutoConfigureBefore(SpringDocConfiguration.class) @ConditionalOnProperty(name = "springdoc.api-docs.enabled", havingValue = "true", matchIfMissing = true) -public class SwaggerConfig { +public class SpringDocConfig { - private final SwaggerProperties swaggerProperties; private final ServerProperties serverProperties; @Bean @ConditionalOnMissingBean(OpenAPI.class) - public OpenAPI openApi() { + public OpenAPI openApi(SpringDocProperties properties) { OpenAPI openApi = new OpenAPI(); // 文档基本信息 - SwaggerProperties.InfoProperties infoProperties = swaggerProperties.getInfo(); + SpringDocProperties.InfoProperties infoProperties = properties.getInfo(); Info info = convertInfo(infoProperties); openApi.info(info); // 扩展文档信息 - openApi.externalDocs(swaggerProperties.getExternalDocs()); - openApi.tags(swaggerProperties.getTags()); - openApi.paths(swaggerProperties.getPaths()); - openApi.components(swaggerProperties.getComponents()); - Set keySet = swaggerProperties.getComponents().getSecuritySchemes().keySet(); + openApi.externalDocs(properties.getExternalDocs()); + openApi.tags(properties.getTags()); + openApi.paths(properties.getPaths()); + openApi.components(properties.getComponents()); + Set keySet = properties.getComponents().getSecuritySchemes().keySet(); List list = new ArrayList<>(); SecurityRequirement securityRequirement = new SecurityRequirement(); keySet.forEach(securityRequirement::addList); @@ -62,7 +61,7 @@ public class SwaggerConfig { return openApi; } - private Info convertInfo(SwaggerProperties.InfoProperties infoProperties) { + private Info convertInfo(SpringDocProperties.InfoProperties infoProperties) { Info info = new Info(); info.setTitle(infoProperties.getTitle()); info.setDescription(infoProperties.getDescription()); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SpringDocProperties.java similarity index 95% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SpringDocProperties.java index ac6fc4249..93ecefb06 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SpringDocProperties.java @@ -20,8 +20,8 @@ import java.util.List; */ @Data @Component -@ConfigurationProperties(prefix = "swagger") -public class SwaggerProperties { +@ConfigurationProperties(prefix = "springdoc") +public class SpringDocProperties { /** * 文档基本信息 From fea9fdaa5f4d0e2c49cb86b2e48a2b8f9234a8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 28 Jul 2023 20:08:53 +0800 Subject: [PATCH 10/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20excel=20?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=AD=97=E5=85=B8=E9=BB=98=E8=AE=A4=E8=BD=AC?= =?UTF-8?q?=E4=B8=BA=E4=B8=8B=E6=8B=89=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/core/domain/entity/SysDictData.java | 4 ++-- .../com/ruoyi/common/core/domain/entity/SysDictType.java | 2 +- .../java/com/ruoyi/common/core/domain/entity/SysRole.java | 4 ++-- .../main/java/com/ruoyi/common/excel/ExcelDownHandler.java | 3 +++ .../src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 6 ++---- .../src/main/java/com/ruoyi/system/domain/SysConfig.java | 2 +- .../main/java/com/ruoyi/system/domain/SysLogininfor.java | 2 +- .../src/main/java/com/ruoyi/system/domain/SysOperLog.java | 6 +++--- .../src/main/java/com/ruoyi/system/domain/SysPost.java | 2 +- .../java/com/ruoyi/system/domain/vo/SysUserExportVo.java | 4 ++-- 10 files changed, 18 insertions(+), 17 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java index 4ed2c5483..373be368d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java @@ -77,14 +77,14 @@ public class SysDictData extends BaseEntity { /** * 是否默认(Y是 N否) */ - @ExcelProperty(value = "是否默认", converter = ExcelDictConvert.class) + @ExcelProperty(value = "是否默认", index = 5, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_yes_no") private String isDefault; /** * 状态(0正常 1停用) */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", index = 6, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java index 76c20e102..d16c3a20d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java @@ -53,7 +53,7 @@ public class SysDictType extends BaseEntity { /** * 状态(0正常 1停用) */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", index = 3, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java index 594956998..99edf328e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -64,7 +64,7 @@ public class SysRole extends BaseEntity { /** * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ - @ExcelProperty(value = "数据范围", converter = ExcelDictConvert.class) + @ExcelProperty(value = "数据范围", index = 4, converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") private String dataScope; @@ -81,7 +81,7 @@ public class SysRole extends BaseEntity { /** * 角色状态(0正常 1停用) */ - @ExcelProperty(value = "角色状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "角色状态", index = 5, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java b/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java index 442e353dd..554e2fef5 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java @@ -128,6 +128,9 @@ public class ExcelDownHandler implements SheetWriteHandler { } } } + if (CollUtil.isEmpty(dropDownOptions)) { + return; + } dropDownOptions.forEach(everyOptions -> { // 如果传递了下拉框选择器参数 if (!everyOptions.getNextOptions().isEmpty()) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 8459e1478..78cf0e72d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -196,10 +196,8 @@ public class ExcelUtil { // 合并处理器 builder.registerWriteHandler(new CellMergeStrategy(list, true)); } - if (CollUtil.isNotEmpty(options)) { - // 添加下拉框操作 - builder.registerWriteHandler(new ExcelDownHandler(options)); - } + // 添加下拉框操作 + builder.registerWriteHandler(new ExcelDownHandler(options)); builder.doWrite(list); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java index ca9a77ce3..4fe1001b2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -59,7 +59,7 @@ public class SysConfig extends BaseEntity { /** * 系统内置(Y是 N否) */ - @ExcelProperty(value = "系统内置", converter = ExcelDictConvert.class) + @ExcelProperty(value = "系统内置", index = 4, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_yes_no") private String configType; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java index f95b332e7..ec2c72e41 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -42,7 +42,7 @@ public class SysLogininfor implements Serializable { /** * 登录状态 0成功 1失败 */ - @ExcelProperty(value = "登录状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "登录状态", index = 2, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_common_status") private String status; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java index 84af07b91..221033f8a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -43,7 +43,7 @@ public class SysOperLog implements Serializable { /** * 业务类型(0其它 1新增 2修改 3删除) */ - @ExcelProperty(value = "业务类型", converter = ExcelDictConvert.class) + @ExcelProperty(value = "业务类型", index = 2, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_oper_type") private Integer businessType; @@ -68,7 +68,7 @@ public class SysOperLog implements Serializable { /** * 操作类别(0其它 1后台用户 2手机端用户) */ - @ExcelProperty(value = "操作类别", converter = ExcelDictConvert.class) + @ExcelProperty(value = "操作类别", index = 5, converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "0=其它,1=后台用户,2=手机端用户") private Integer operatorType; @@ -117,7 +117,7 @@ public class SysOperLog implements Serializable { /** * 操作状态(0正常 1异常) */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", index = 13, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_common_status") private Integer status; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java index ecb84f4b4..3484616e0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -60,7 +60,7 @@ public class SysPost extends BaseEntity { /** * 状态(0正常 1停用) */ - @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", index = 4, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java index a50283d28..b2d299919 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java @@ -53,14 +53,14 @@ public class SysUserExportVo implements Serializable { /** * 用户性别 */ - @ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class) + @ExcelProperty(value = "用户性别", index = 5, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_user_sex") private String sex; /** * 帐号状态(0正常 1停用) */ - @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) + @ExcelProperty(value = "帐号状态", index = 6, converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; From e82a031dd0156e50309dc2fe5e1a01ccd39eb31b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 1 Aug 2023 11:00:22 +0800 Subject: [PATCH 11/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20vue3=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=B3=A8=E5=86=8C=E9=A1=B5=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E4=B8=8D=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui-vue3/src/views/register.vue | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ruoyi-ui-vue3/src/views/register.vue b/ruoyi-ui-vue3/src/views/register.vue index 89bb530ec..4948cff6b 100644 --- a/ruoyi-ui-vue3/src/views/register.vue +++ b/ruoyi-ui-vue3/src/views/register.vue @@ -3,11 +3,11 @@

RuoYi-Vue-Plus后台管理系统

- @@ -17,7 +17,7 @@ { - captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled; + captchaEnabled.value = res.data.captchaEnabled === undefined ? true : res.data.captchaEnabled; if (captchaEnabled.value) { - codeUrl.value = "data:image/gif;base64," + res.img; - registerForm.value.uuid = res.uuid; + codeUrl.value = "data:image/gif;base64," + res.data.img; + registerForm.value.uuid = res.data.uuid; } }); } From 7d209aeb41ac365a80b6481f7760ba249715e8c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 1 Aug 2023 13:22:00 +0800 Subject: [PATCH 12/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20excel?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=AD=97=E5=85=B8=E8=BD=AC=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86=20=E6=97=A0=E9=9C=80=E6=A0=87=E8=AE=B0index=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=A4=84=E7=90=86(=E6=84=9F=E8=B0=A2=E4=B8=80?= =?UTF-8?q?=E5=A4=8Fcoco)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/domain/entity/SysDictData.java | 4 +-- .../core/domain/entity/SysDictType.java | 2 +- .../common/core/domain/entity/SysRole.java | 4 +-- .../ruoyi/common/excel/ExcelDownHandler.java | 26 +++++++++---------- .../com/ruoyi/system/domain/SysConfig.java | 2 +- .../ruoyi/system/domain/SysLogininfor.java | 2 +- .../com/ruoyi/system/domain/SysOperLog.java | 6 ++--- .../java/com/ruoyi/system/domain/SysPost.java | 2 +- .../system/domain/vo/SysUserExportVo.java | 4 +-- 9 files changed, 25 insertions(+), 27 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java index 373be368d..4ed2c5483 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java @@ -77,14 +77,14 @@ public class SysDictData extends BaseEntity { /** * 是否默认(Y是 N否) */ - @ExcelProperty(value = "是否默认", index = 5, converter = ExcelDictConvert.class) + @ExcelProperty(value = "是否默认", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_yes_no") private String isDefault; /** * 状态(0正常 1停用) */ - @ExcelProperty(value = "状态", index = 6, converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java index d16c3a20d..76c20e102 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java @@ -53,7 +53,7 @@ public class SysDictType extends BaseEntity { /** * 状态(0正常 1停用) */ - @ExcelProperty(value = "状态", index = 3, converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java index 99edf328e..594956998 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -64,7 +64,7 @@ public class SysRole extends BaseEntity { /** * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ - @ExcelProperty(value = "数据范围", index = 4, converter = ExcelDictConvert.class) + @ExcelProperty(value = "数据范围", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") private String dataScope; @@ -81,7 +81,7 @@ public class SysRole extends BaseEntity { /** * 角色状态(0正常 1停用) */ - @ExcelProperty(value = "角色状态", index = 5, converter = ExcelDictConvert.class) + @ExcelProperty(value = "角色状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java b/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java index 554e2fef5..09f038886 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/excel/ExcelDownHandler.java @@ -5,7 +5,9 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.EnumUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.metadata.FieldCache; +import com.alibaba.excel.metadata.FieldWrapper; +import com.alibaba.excel.util.ClassUtils; import com.alibaba.excel.write.handler.SheetWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; @@ -83,16 +85,18 @@ public class ExcelDownHandler implements SheetWriteHandler { Sheet sheet = writeSheetHolder.getSheet(); // 开始设置下拉框 HSSFWorkbook DataValidationHelper helper = sheet.getDataValidationHelper(); - Field[] fields = writeWorkbookHolder.getClazz().getDeclaredFields(); Workbook workbook = writeWorkbookHolder.getWorkbook(); - int length = fields.length; - for (int i = 0; i < length; i++) { + FieldCache fieldCache = ClassUtils.declaredFields(writeWorkbookHolder.getClazz(), writeWorkbookHolder); + for (Map.Entry entry : fieldCache.getSortedFieldMap().entrySet()) { + Integer index = entry.getKey(); + FieldWrapper wrapper = entry.getValue(); + Field field = wrapper.getField(); // 循环实体中的每个属性 // 可选的下拉值 List options = new ArrayList<>(); - if (fields[i].isAnnotationPresent(ExcelDictFormat.class)) { + if (field.isAnnotationPresent(ExcelDictFormat.class)) { // 如果指定了@ExcelDictFormat,则使用字典的逻辑 - ExcelDictFormat format = fields[i].getDeclaredAnnotation(ExcelDictFormat.class); + ExcelDictFormat format = field.getDeclaredAnnotation(ExcelDictFormat.class); String dictType = format.dictType(); String converterExp = format.readConverterExp(); if (StrUtil.isNotBlank(dictType)) { @@ -105,20 +109,14 @@ public class ExcelDownHandler implements SheetWriteHandler { // 如果指定了确切的值,则直接解析确切的值 options = StrUtil.split(converterExp, format.separator(), true, true); } - } else if (fields[i].isAnnotationPresent(ExcelEnumFormat.class)) { + } else if (field.isAnnotationPresent(ExcelEnumFormat.class)) { // 否则如果指定了@ExcelEnumFormat,则使用枚举的逻辑 - ExcelEnumFormat format = fields[i].getDeclaredAnnotation(ExcelEnumFormat.class); + ExcelEnumFormat format = field.getDeclaredAnnotation(ExcelEnumFormat.class); List values = EnumUtil.getFieldValues(format.enumClass(), format.textField()); options = StreamUtils.toList(values, String::valueOf); } if (ObjectUtil.isNotEmpty(options)) { // 仅当下拉可选项不为空时执行 - // 获取列下标,默认为当前循环次数 - int index = i; - if (fields[i].isAnnotationPresent(ExcelProperty.class)) { - // 如果指定了列下标,以指定的为主 - index = fields[i].getDeclaredAnnotation(ExcelProperty.class).index(); - } if (options.size() > 20) { // 这里限制如果可选项大于20,则使用额外表形式 dropDownWithSheet(helper, workbook, sheet, index, options); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java index 4fe1001b2..ca9a77ce3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -59,7 +59,7 @@ public class SysConfig extends BaseEntity { /** * 系统内置(Y是 N否) */ - @ExcelProperty(value = "系统内置", index = 4, converter = ExcelDictConvert.class) + @ExcelProperty(value = "系统内置", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_yes_no") private String configType; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java index ec2c72e41..f95b332e7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -42,7 +42,7 @@ public class SysLogininfor implements Serializable { /** * 登录状态 0成功 1失败 */ - @ExcelProperty(value = "登录状态", index = 2, converter = ExcelDictConvert.class) + @ExcelProperty(value = "登录状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_common_status") private String status; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java index 221033f8a..84af07b91 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -43,7 +43,7 @@ public class SysOperLog implements Serializable { /** * 业务类型(0其它 1新增 2修改 3删除) */ - @ExcelProperty(value = "业务类型", index = 2, converter = ExcelDictConvert.class) + @ExcelProperty(value = "业务类型", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_oper_type") private Integer businessType; @@ -68,7 +68,7 @@ public class SysOperLog implements Serializable { /** * 操作类别(0其它 1后台用户 2手机端用户) */ - @ExcelProperty(value = "操作类别", index = 5, converter = ExcelDictConvert.class) + @ExcelProperty(value = "操作类别", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "0=其它,1=后台用户,2=手机端用户") private Integer operatorType; @@ -117,7 +117,7 @@ public class SysOperLog implements Serializable { /** * 操作状态(0正常 1异常) */ - @ExcelProperty(value = "状态", index = 13, converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_common_status") private Integer status; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java index 3484616e0..ecb84f4b4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -60,7 +60,7 @@ public class SysPost extends BaseEntity { /** * 状态(0正常 1停用) */ - @ExcelProperty(value = "状态", index = 4, converter = ExcelDictConvert.class) + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java index b2d299919..a50283d28 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java @@ -53,14 +53,14 @@ public class SysUserExportVo implements Serializable { /** * 用户性别 */ - @ExcelProperty(value = "用户性别", index = 5, converter = ExcelDictConvert.class) + @ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_user_sex") private String sex; /** * 帐号状态(0正常 1停用) */ - @ExcelProperty(value = "帐号状态", index = 6, converter = ExcelDictConvert.class) + @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; From ebef89be62b8d41c2c23a4b17232153374be7703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 7 Aug 2023 12:40:16 +0800 Subject: [PATCH 13/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=E5=AE=9E=E7=8E=B0=20=E4=BD=BF=E7=94=A8=20EncryptUtils?= =?UTF-8?q?=20=E7=BB=9F=E4=B8=80=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../encrypt/encryptor/AesEncryptor.java | 26 ++----- .../encrypt/encryptor/Base64Encryptor.java | 6 +- .../encrypt/encryptor/RsaEncryptor.java | 15 ++-- .../encrypt/encryptor/Sm2Encryptor.java | 15 ++-- .../encrypt/encryptor/Sm4Encryptor.java | 24 ++----- .../com/ruoyi/common/utils/EncryptUtils.java | 68 +++++++++++++++++++ 6 files changed, 95 insertions(+), 59 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java index ee4d82665..72521454d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/AesEncryptor.java @@ -1,14 +1,9 @@ package com.ruoyi.common.encrypt.encryptor; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.crypto.SecureUtil; -import cn.hutool.crypto.symmetric.AES; import com.ruoyi.common.encrypt.EncryptContext; import com.ruoyi.common.enums.AlgorithmType; import com.ruoyi.common.enums.EncodeType; - -import java.nio.charset.StandardCharsets; +import com.ruoyi.common.utils.EncryptUtils; /** * AES算法实现 @@ -18,20 +13,11 @@ import java.nio.charset.StandardCharsets; */ public class AesEncryptor extends AbstractEncryptor { - private final AES aes; + private final EncryptContext context; public AesEncryptor(EncryptContext context) { super(context); - String password = context.getPassword(); - if (StrUtil.isBlank(password)) { - throw new IllegalArgumentException("AES没有获得秘钥信息"); - } - // aes算法的秘钥要求是16位、24位、32位 - int[] array = {16, 24, 32}; - if (!ArrayUtil.contains(array, password.length())) { - throw new IllegalArgumentException("AES秘钥长度应该为16位、24位、32位,实际为" + password.length() + "位"); - } - aes = SecureUtil.aes(context.getPassword().getBytes(StandardCharsets.UTF_8)); + this.context = context; } /** @@ -51,9 +37,9 @@ public class AesEncryptor extends AbstractEncryptor { @Override public String encrypt(String value, EncodeType encodeType) { if (encodeType == EncodeType.HEX) { - return aes.encryptHex(value); + return EncryptUtils.encryptByAesHex(value, context.getPassword()); } else { - return aes.encryptBase64(value); + return EncryptUtils.encryptByAes(value, context.getPassword()); } } @@ -64,6 +50,6 @@ public class AesEncryptor extends AbstractEncryptor { */ @Override public String decrypt(String value) { - return this.aes.decryptStr(value); + return EncryptUtils.decryptByAes(value, context.getPassword()); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java index 519158d00..3bd4149a6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Base64Encryptor.java @@ -1,9 +1,9 @@ package com.ruoyi.common.encrypt.encryptor; -import cn.hutool.core.codec.Base64; import com.ruoyi.common.encrypt.EncryptContext; import com.ruoyi.common.enums.AlgorithmType; import com.ruoyi.common.enums.EncodeType; +import com.ruoyi.common.utils.EncryptUtils; /** * Base64算法实现 @@ -33,7 +33,7 @@ public class Base64Encryptor extends AbstractEncryptor { */ @Override public String encrypt(String value, EncodeType encodeType) { - return Base64.encode(value); + return EncryptUtils.encryptByBase64(value); } /** @@ -43,6 +43,6 @@ public class Base64Encryptor extends AbstractEncryptor { */ @Override public String decrypt(String value) { - return Base64.decodeStr(value); + return EncryptUtils.decryptByBase64(value); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java index 2563fc214..9e0776422 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/RsaEncryptor.java @@ -1,12 +1,9 @@ package com.ruoyi.common.encrypt.encryptor; -import cn.hutool.core.codec.Base64; -import cn.hutool.crypto.SecureUtil; -import cn.hutool.crypto.asymmetric.KeyType; -import cn.hutool.crypto.asymmetric.RSA; import com.ruoyi.common.encrypt.EncryptContext; import com.ruoyi.common.enums.AlgorithmType; import com.ruoyi.common.enums.EncodeType; +import com.ruoyi.common.utils.EncryptUtils; import com.ruoyi.common.utils.StringUtils; @@ -18,7 +15,7 @@ import com.ruoyi.common.utils.StringUtils; */ public class RsaEncryptor extends AbstractEncryptor { - private final RSA rsa; + private final EncryptContext context; public RsaEncryptor(EncryptContext context) { super(context); @@ -27,7 +24,7 @@ public class RsaEncryptor extends AbstractEncryptor { if (StringUtils.isAnyEmpty(privateKey, publicKey)) { throw new IllegalArgumentException("RSA公私钥均需要提供,公钥加密,私钥解密。"); } - this.rsa = SecureUtil.rsa(Base64.decode(privateKey), Base64.decode(publicKey)); + this.context = context; } /** @@ -47,9 +44,9 @@ public class RsaEncryptor extends AbstractEncryptor { @Override public String encrypt(String value, EncodeType encodeType) { if (encodeType == EncodeType.HEX) { - return rsa.encryptHex(value, KeyType.PublicKey); + return EncryptUtils.encryptByRsaHex(value, context.getPublicKey()); } else { - return rsa.encryptBase64(value, KeyType.PublicKey); + return EncryptUtils.encryptByRsa(value, context.getPublicKey()); } } @@ -60,6 +57,6 @@ public class RsaEncryptor extends AbstractEncryptor { */ @Override public String decrypt(String value) { - return this.rsa.decryptStr(value, KeyType.PrivateKey); + return EncryptUtils.decryptByRsa(value, context.getPrivateKey()); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java index a84f7f7ea..ec4714aa4 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm2Encryptor.java @@ -1,13 +1,10 @@ package com.ruoyi.common.encrypt.encryptor; -import cn.hutool.core.codec.Base64; -import cn.hutool.crypto.SmUtil; -import cn.hutool.crypto.asymmetric.KeyType; -import cn.hutool.crypto.asymmetric.SM2; import com.ruoyi.common.encrypt.EncryptContext; import com.ruoyi.common.enums.AlgorithmType; import com.ruoyi.common.enums.EncodeType; +import com.ruoyi.common.utils.EncryptUtils; import com.ruoyi.common.utils.StringUtils; /** @@ -18,7 +15,7 @@ import com.ruoyi.common.utils.StringUtils; */ public class Sm2Encryptor extends AbstractEncryptor { - private final SM2 sm2; + private final EncryptContext context; public Sm2Encryptor(EncryptContext context) { super(context); @@ -27,7 +24,7 @@ public class Sm2Encryptor extends AbstractEncryptor { if (StringUtils.isAnyEmpty(privateKey, publicKey)) { throw new IllegalArgumentException("SM2公私钥均需要提供,公钥加密,私钥解密。"); } - this.sm2 = SmUtil.sm2(Base64.decode(privateKey), Base64.decode(publicKey)); + this.context = context; } /** @@ -47,9 +44,9 @@ public class Sm2Encryptor extends AbstractEncryptor { @Override public String encrypt(String value, EncodeType encodeType) { if (encodeType == EncodeType.HEX) { - return sm2.encryptHex(value, KeyType.PublicKey); + return EncryptUtils.encryptBySm2Hex(value, context.getPublicKey()); } else { - return sm2.encryptBase64(value, KeyType.PublicKey); + return EncryptUtils.encryptBySm2(value, context.getPublicKey()); } } @@ -60,6 +57,6 @@ public class Sm2Encryptor extends AbstractEncryptor { */ @Override public String decrypt(String value) { - return this.sm2.decryptStr(value, KeyType.PrivateKey); + return EncryptUtils.decryptBySm2(value, context.getPrivateKey()); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java index 7d2e50974..80a57df67 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/encrypt/encryptor/Sm4Encryptor.java @@ -1,13 +1,9 @@ package com.ruoyi.common.encrypt.encryptor; -import cn.hutool.core.util.StrUtil; -import cn.hutool.crypto.SmUtil; -import cn.hutool.crypto.symmetric.SM4; import com.ruoyi.common.encrypt.EncryptContext; import com.ruoyi.common.enums.AlgorithmType; import com.ruoyi.common.enums.EncodeType; - -import java.nio.charset.StandardCharsets; +import com.ruoyi.common.utils.EncryptUtils; /** * sm4算法实现 @@ -17,19 +13,11 @@ import java.nio.charset.StandardCharsets; */ public class Sm4Encryptor extends AbstractEncryptor { - private final SM4 sm4; + private final EncryptContext context; public Sm4Encryptor(EncryptContext context) { super(context); - String password = context.getPassword(); - if (StrUtil.isBlank(password)) { - throw new IllegalArgumentException("SM4没有获得秘钥信息"); - } - // sm4算法的秘钥要求是16位长度 - if (16 != password.length()) { - throw new IllegalArgumentException("SM4秘钥长度应该为16位,实际为" + password.length() + "位"); - } - this.sm4 = SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8)); + this.context = context; } /** @@ -49,9 +37,9 @@ public class Sm4Encryptor extends AbstractEncryptor { @Override public String encrypt(String value, EncodeType encodeType) { if (encodeType == EncodeType.HEX) { - return sm4.encryptHex(value); + return EncryptUtils.encryptBySm4Hex(value, context.getPassword()); } else { - return sm4.encryptBase64(value); + return EncryptUtils.encryptBySm4(value, context.getPassword()); } } @@ -62,6 +50,6 @@ public class Sm4Encryptor extends AbstractEncryptor { */ @Override public String decrypt(String value) { - return this.sm4.decryptStr(value); + return EncryptUtils.decryptBySm4(value, context.getPassword()); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java index 691b6c0f4..ab213b71e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EncryptUtils.java @@ -67,6 +67,25 @@ public class EncryptUtils { return SecureUtil.aes(password.getBytes(StandardCharsets.UTF_8)).encryptBase64(data, StandardCharsets.UTF_8); } + /** + * AES加密 + * + * @param data 待解密数据 + * @param password 秘钥字符串 + * @return 加密后字符串, 采用Hex编码 + */ + public static String encryptByAesHex(String data, String password) { + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("AES需要传入秘钥信息"); + } + // aes算法的秘钥要求是16位、24位、32位 + int[] array = {16, 24, 32}; + if (!ArrayUtil.contains(array, password.length())) { + throw new IllegalArgumentException("AES秘钥长度要求为16位、24位、32位"); + } + return SecureUtil.aes(password.getBytes(StandardCharsets.UTF_8)).encryptHex(data, StandardCharsets.UTF_8); + } + /** * AES解密 * @@ -105,6 +124,25 @@ public class EncryptUtils { return SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8)).encryptBase64(data, StandardCharsets.UTF_8); } + /** + * sm4加密 + * + * @param data 待加密数据 + * @param password 秘钥字符串 + * @return 加密后字符串, 采用Base64编码 + */ + public static String encryptBySm4Hex(String data, String password) { + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("SM4需要传入秘钥信息"); + } + // sm4算法的秘钥要求是16位长度 + int sm4PasswordLength = 16; + if (sm4PasswordLength != password.length()) { + throw new IllegalArgumentException("SM4秘钥长度要求为16位"); + } + return SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8)).encryptHex(data, StandardCharsets.UTF_8); + } + /** * sm4解密 * @@ -152,6 +190,21 @@ public class EncryptUtils { return sm2.encryptBase64(data, StandardCharsets.UTF_8, KeyType.PublicKey); } + /** + * sm2公钥加密 + * + * @param data 待加密数据 + * @param publicKey 公钥 + * @return 加密后字符串, 采用Hex编码 + */ + public static String encryptBySm2Hex(String data, String publicKey) { + if (StrUtil.isBlank(publicKey)) { + throw new IllegalArgumentException("SM2需要传入公钥进行加密"); + } + SM2 sm2 = SmUtil.sm2(null, publicKey); + return sm2.encryptHex(data, StandardCharsets.UTF_8, KeyType.PublicKey); + } + /** * sm2私钥解密 * @@ -195,6 +248,21 @@ public class EncryptUtils { return rsa.encryptBase64(data, StandardCharsets.UTF_8, KeyType.PublicKey); } + /** + * rsa公钥加密 + * + * @param data 待加密数据 + * @param publicKey 公钥 + * @return 加密后字符串, 采用Hex编码 + */ + public static String encryptByRsaHex(String data, String publicKey) { + if (StrUtil.isBlank(publicKey)) { + throw new IllegalArgumentException("RSA需要传入公钥进行加密"); + } + RSA rsa = SecureUtil.rsa(null, publicKey); + return rsa.encryptHex(data, StandardCharsets.UTF_8, KeyType.PublicKey); + } + /** * rsa私钥解密 * From dc752ade257d9e16336d283ae7055a7f535f90b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 7 Aug 2023 18:13:49 +0800 Subject: [PATCH 14/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E4=B8=8E=E8=A7=92=E8=89=B2=E5=A6=82=E6=9E=9C=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E4=BA=86=E7=94=A8=E6=88=B7=E5=88=99=E4=B8=8D=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E7=A6=81=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/web/controller/system/SysDeptController.java | 9 ++++++--- .../ruoyi/system/service/impl/SysRoleServiceImpl.java | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java index 512c644c4..a54483cfd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java @@ -91,9 +91,12 @@ public class SysDeptController extends BaseController { return R.fail("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); } else if (dept.getParentId().equals(deptId)) { return R.fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); - } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) - && deptService.selectNormalChildrenDeptById(deptId) > 0) { - return R.fail("该部门包含未停用的子部门!"); + } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus())) { + if (deptService.selectNormalChildrenDeptById(deptId) > 0) { + return R.fail("该部门包含未停用的子部门!"); + } else if (deptService.checkDeptExistUser(deptId)) { + return R.fail("该部门下存在已分配用户,不能禁用!"); + } } return toAjax(deptService.updateDept(dept)); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index 84e762175..4f05d5ee7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -268,6 +268,9 @@ public class SysRoleServiceImpl implements ISysRoleService { */ @Override public int updateRoleStatus(SysRole role) { + if (UserConstants.ROLE_DISABLE.equals(role.getStatus()) && this.countUserRoleByRoleId(role.getRoleId()) > 0) { + throw new ServiceException("角色已分配,不能禁用!"); + } return baseMapper.updateById(role); } @@ -360,7 +363,7 @@ public class SysRoleServiceImpl implements ISysRoleService { checkRoleAllowed(role); checkRoleDataScope(roleId); if (countUserRoleByRoleId(roleId) > 0) { - throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); + throw new ServiceException(String.format("%1$s已分配,不能删除!", role.getRoleName())); } } List ids = Arrays.asList(roleIds); From 2f3dbbfe32d20467067e1ba379ce6b97e99f8943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 7 Aug 2023 18:14:03 +0800 Subject: [PATCH 15/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E5=A6=82=E6=9E=9C=E7=BB=91=E5=AE=9A=E4=BA=86=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=88=99=E4=B8=8D=E5=85=81=E8=AE=B8=E7=A6=81=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/web/controller/system/SysPostController.java | 7 ++++++- .../java/com/ruoyi/common/constant/UserConstants.java | 10 ++++++++++ .../ruoyi/system/service/impl/SysPostServiceImpl.java | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java index 4036364fa..429256a47 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java @@ -88,6 +88,9 @@ public class SysPostController extends BaseController { return R.fail("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); } else if (!postService.checkPostCodeUnique(post)) { return R.fail("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + } else if (UserConstants.POST_DISABLE.equals(post.getStatus()) + && postService.countUserPostById(post.getPostId()) > 0) { + return R.fail("该岗位下存在已分配用户,不能禁用!"); } return toAjax(postService.updatePost(post)); } @@ -109,7 +112,9 @@ public class SysPostController extends BaseController { */ @GetMapping("/optionselect") public R> optionselect() { - List posts = postService.selectPostAll(); + SysPost post = new SysPost(); + post.setStatus(UserConstants.POST_NORMAL); + List posts = postService.selectPostList(post); return R.ok(posts); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java index 569c5dafa..61552f8fc 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java @@ -52,6 +52,16 @@ public interface UserConstants { */ String DEPT_DISABLE = "1"; + /** + * 岗位正常状态 + */ + String POST_NORMAL = "0"; + + /** + * 岗位停用状态 + */ + String POST_DISABLE = "1"; + /** * 字典正常状态 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java index 79edef7f9..f41a2d01d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -147,7 +147,7 @@ public class SysPostServiceImpl implements ISysPostService { for (Long postId : postIds) { SysPost post = selectPostById(postId); if (countUserPostById(postId) > 0) { - throw new ServiceException(String.format("%1$s已分配,不能删除", post.getPostName())); + throw new ServiceException(String.format("%1$s已分配,不能删除!", post.getPostName())); } } return baseMapper.deleteBatchIds(Arrays.asList(postIds)); From ed4df162012eb680abfc21f02da0759bd3cb3f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 7 Aug 2023 18:14:11 +0800 Subject: [PATCH 16/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=AE=A1=E7=90=86=20=E5=8F=AA=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9C=AA=E7=A6=81=E7=94=A8=E7=9A=84=E9=83=A8=E9=97=A8=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E5=B2=97=E4=BD=8D=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/web/controller/system/SysUserController.java | 9 +++++++-- .../ruoyi/system/service/impl/SysDeptServiceImpl.java | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 0b91c50b9..e1f4288ba 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -21,6 +21,7 @@ import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StreamUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.vo.SysUserExportVo; import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.listener.SysUserImportListener; @@ -117,9 +118,13 @@ public class SysUserController extends BaseController { public R> getInfo(@PathVariable(value = "userId", required = false) Long userId) { userService.checkUserDataScope(userId); Map ajax = new HashMap<>(); - List roles = roleService.selectRoleAll(); + SysRole role = new SysRole(); + role.setStatus(UserConstants.ROLE_NORMAL); + SysPost post = new SysPost(); + post.setStatus(UserConstants.POST_NORMAL); + List roles = roleService.selectRoleList(role); ajax.put("roles", LoginHelper.isAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isAdmin())); - ajax.put("posts", postService.selectPostAll()); + ajax.put("posts", postService.selectPostList(post)); if (ObjectUtil.isNotNull(userId)) { SysUser sysUser = userService.selectUserById(userId); ajax.put("user", sysUser); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index 8af6cabdb..aba3d99e0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -72,6 +72,8 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { */ @Override public List> selectDeptTreeList(SysDept dept) { + // 只查询未禁用部门 + dept.setStatus(UserConstants.DEPT_NORMAL); List depts = this.selectDeptList(dept); return buildDeptTreeSelect(depts); } From 8311454342bf20cefe13f6e7bb6c1779a68a4b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 9 Aug 2023 12:37:00 +0800 Subject: [PATCH 17/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8=20?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=BC=82=E5=B8=B8=E4=B8=8D=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E5=85=B7=E4=BD=93=E5=A0=86=E6=A0=88=E4=BF=A1=E6=81=AF=20?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E6=97=A0=E7=94=A8=E6=97=A5=E5=BF=97=E5=AD=98?= =?UTF-8?q?=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/exception/GlobalExceptionHandler.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java index f1cbff22a..e44ce90c9 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java @@ -8,6 +8,7 @@ import cn.hutool.http.HttpStatus; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.exception.DemoModeException; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.StreamUtils; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.MyBatisSystemException; @@ -105,18 +106,27 @@ public class GlobalExceptionHandler { */ @ExceptionHandler(ServiceException.class) public R handleServiceException(ServiceException e, HttpServletRequest request) { - log.error(e.getMessage(), e); + log.error(e.getMessage()); Integer code = e.getCode(); return ObjectUtil.isNotNull(code) ? R.fail(code, e.getMessage()) : R.fail(e.getMessage()); } + /** + * 业务异常 + */ + @ExceptionHandler(BaseException.class) + public R handleBaseException(BaseException e, HttpServletRequest request) { + log.error(e.getMessage()); + return R.fail(e.getMessage()); + } + /** * 请求路径中缺少必需的路径变量 */ @ExceptionHandler(MissingPathVariableException.class) public R handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); - log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI, e); + log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI); return R.fail(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName())); } @@ -126,7 +136,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentTypeMismatchException.class) public R handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); - log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI, e); + log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI); return R.fail(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), e.getValue())); } @@ -155,7 +165,7 @@ public class GlobalExceptionHandler { */ @ExceptionHandler(BindException.class) public R handleBindException(BindException e) { - log.error(e.getMessage(), e); + log.error(e.getMessage()); String message = StreamUtils.join(e.getAllErrors(), DefaultMessageSourceResolvable::getDefaultMessage, ", "); return R.fail(message); } @@ -165,7 +175,7 @@ public class GlobalExceptionHandler { */ @ExceptionHandler(ConstraintViolationException.class) public R constraintViolationException(ConstraintViolationException e) { - log.error(e.getMessage(), e); + log.error(e.getMessage()); String message = StreamUtils.join(e.getConstraintViolations(), ConstraintViolation::getMessage, ", "); return R.fail(message); } @@ -175,7 +185,7 @@ public class GlobalExceptionHandler { */ @ExceptionHandler(MethodArgumentNotValidException.class) public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - log.error(e.getMessage(), e); + log.error(e.getMessage()); String message = e.getBindingResult().getFieldError().getDefaultMessage(); return R.fail(message); } From f71b8110a922292202b0812e5d8c9a1a5f110bcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 9 Aug 2023 12:47:01 +0800 Subject: [PATCH 18/34] update springboot 2.7.13 => 2.7.14 update mybatis-plus 3.5.3.1 => 3.5.3.2 update easyexcel 3.3.1 => 3.3.2 update hutool 5.8.18 => 5.8.20 --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 9184209d5..d8053766b 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ 4.8.0 - 2.7.13 + 2.7.14 UTF-8 UTF-8 1.8 @@ -22,12 +22,12 @@ 2.2.2 1.6.15 5.2.3 - 3.3.1 + 3.3.2 2.3 1.35.0.RC - 3.5.3.1 + 3.5.3.2 3.9.1 - 5.8.18 + 5.8.20 4.10.0 2.7.10 3.20.1 From acfa39369e7a6fd18d0d7bd9f96b736f07a91d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Tue, 15 Aug 2023 10:57:36 +0800 Subject: [PATCH 19/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=20mp=20=E7=89=88=E6=9C=AC=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/core/mapper/BaseMapperPlus.java | 8 ++++---- .../main/java/com/ruoyi/demo/mapper/TestDemoMapper.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mapper/BaseMapperPlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mapper/BaseMapperPlus.java index 0a8539ad6..20b05d82f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mapper/BaseMapperPlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mapper/BaseMapperPlus.java @@ -180,12 +180,12 @@ public interface BaseMapperPlus extends BaseMapper { * 分页查询VO */ default > P selectVoPage(IPage page, Wrapper wrapper, Class voClass) { - IPage pageData = this.selectPage(page, wrapper); - IPage voPage = new Page<>(pageData.getCurrent(), pageData.getSize(), pageData.getTotal()); - if (CollUtil.isEmpty(pageData.getRecords())) { + List list = this.selectList(page, wrapper); + IPage voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + if (CollUtil.isEmpty(list)) { return (P) voPage; } - voPage.setRecords(BeanCopyUtils.copyList(pageData.getRecords(), voClass)); + voPage.setRecords(BeanCopyUtils.copyList(list, voClass)); return (P) voPage; } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java index 11a3d50e2..6d3a47fe7 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java @@ -33,7 +33,7 @@ public interface TestDemoMapper extends BaseMapperPlus> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + List selectList(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper); @Override @DataPermission({ From c319579c0b476ebb916e79ca5b9fa2eb96fef410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 19 Aug 2023 22:58:21 +0800 Subject: [PATCH 20/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=9C=89?= =?UTF-8?q?=E7=95=8C=E9=98=9F=E5=88=97=E4=B8=8E=E4=BC=98=E5=85=88=E9=98=9F?= =?UTF-8?q?=E5=88=97=20=E9=94=99=E8=AF=AF=E4=BD=BF=E7=94=A8=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/utils/redis/QueueUtils.java | 52 +++++++++++++++++++ .../queue/BoundedQueueController.java | 6 +-- .../queue/PriorityQueueController.java | 6 +-- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java index 7a4bce4b3..842e4565b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/redis/QueueUtils.java @@ -131,6 +131,32 @@ public class QueueUtils { return priorityBlockingQueue.offer(data); } + /** + * 优先队列获取一个队列数据 没有数据返回 null(不支持延迟队列) + * + * @param queueName 队列名 + */ + public static T getPriorityQueueObject(String queueName) { + RPriorityBlockingQueue queue = CLIENT.getPriorityBlockingQueue(queueName); + return queue.poll(); + } + + /** + * 优先队列删除队列数据(不支持延迟队列) + */ + public static boolean removePriorityQueueObject(String queueName, T data) { + RPriorityBlockingQueue queue = CLIENT.getPriorityBlockingQueue(queueName); + return queue.remove(data); + } + + /** + * 优先队列销毁队列 所有阻塞监听 报错(不支持延迟队列) + */ + public static boolean destroyPriorityQueue(String queueName) { + RPriorityBlockingQueue queue = CLIENT.getPriorityBlockingQueue(queueName); + return queue.delete(); + } + /** * 尝试设置 有界队列 容量 用于限制数量 * @@ -169,6 +195,32 @@ public class QueueUtils { return boundedBlockingQueue.offer(data); } + /** + * 有界队列获取一个队列数据 没有数据返回 null(不支持延迟队列) + * + * @param queueName 队列名 + */ + public static T getBoundedQueueObject(String queueName) { + RBoundedBlockingQueue queue = CLIENT.getBoundedBlockingQueue(queueName); + return queue.poll(); + } + + /** + * 有界队列删除队列数据(不支持延迟队列) + */ + public static boolean removeBoundedQueueObject(String queueName, T data) { + RBoundedBlockingQueue queue = CLIENT.getBoundedBlockingQueue(queueName); + return queue.remove(data); + } + + /** + * 有界队列销毁队列 所有阻塞监听 报错(不支持延迟队列) + */ + public static boolean destroyBoundedQueue(String queueName) { + RBoundedBlockingQueue queue = CLIENT.getBoundedBlockingQueue(queueName); + return queue.delete(); + } + /** * 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 等) */ diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java index 968a4193f..584111415 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/BoundedQueueController.java @@ -35,7 +35,7 @@ public class BoundedQueueController { @GetMapping("/add") public R add(String queueName, int capacity) { // 用完了一定要销毁 否则会一直存在 - boolean b = QueueUtils.destroyQueue(queueName); + boolean b = QueueUtils.destroyBoundedQueue(queueName); log.info("通道: {} , 删除: {}", queueName, b); // 初始化设置一次即可 if (QueueUtils.trySetBoundedQueueCapacity(queueName, capacity)) { @@ -64,7 +64,7 @@ public class BoundedQueueController { @GetMapping("/remove") public R remove(String queueName) { String data = "data-" + 5; - if (QueueUtils.removeQueueObject(queueName, data)) { + if (QueueUtils.removeBoundedQueueObject(queueName, data)) { log.info("通道: {} , 删除数据: {}", queueName, data); } else { return R.fail("操作失败"); @@ -81,7 +81,7 @@ public class BoundedQueueController { public R get(String queueName) { String data; do { - data = QueueUtils.getQueueObject(queueName); + data = QueueUtils.getBoundedQueueObject(queueName); log.info("通道: {} , 获取数据: {}", queueName, data); } while (data != null); return R.ok("操作成功"); diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java index 4a60232c7..0bc37d971 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/queue/PriorityQueueController.java @@ -34,7 +34,7 @@ public class PriorityQueueController { @GetMapping("/add") public R add(String queueName) { // 用完了一定要销毁 否则会一直存在 - boolean b = QueueUtils.destroyQueue(queueName); + boolean b = QueueUtils.destroyPriorityQueue(queueName); log.info("通道: {} , 删除: {}", queueName, b); for (int i = 0; i < 10; i++) { @@ -63,7 +63,7 @@ public class PriorityQueueController { PriorityDemo data = new PriorityDemo(); data.setName(name); data.setOrderNum(orderNum); - if (QueueUtils.removeQueueObject(queueName, data)) { + if (QueueUtils.removePriorityQueueObject(queueName, data)) { log.info("通道: {} , 删除数据: {}", queueName, data); } else { return R.fail("操作失败"); @@ -80,7 +80,7 @@ public class PriorityQueueController { public R get(String queueName) { PriorityDemo data; do { - data = QueueUtils.getQueueObject(queueName); + data = QueueUtils.getPriorityQueueObject(queueName); log.info("通道: {} , 获取数据: {}", queueName, data); } while (data != null); return R.ok("操作成功"); From 3a82fb82e809a1ab70be2d9522aa64086122dd29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sat, 19 Aug 2023 22:59:17 +0800 Subject: [PATCH 21/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=A0=91=E6=A8=A1=E6=9D=BF=E7=88=B6=E7=BA=A7=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E5=8F=98=E9=87=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm | 2 +- ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm index fd07e4d72..601ee583c 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm @@ -434,7 +434,7 @@ export default { this.reset(); this.getTreeselect(); if (row != null && row.${treeCode}) { - this.form.${treeParentCode} = row.${treeCode}; + this.form.${treeParentCode} = row.${treeParentCode}; } else { this.form.${treeParentCode} = 0; } diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm index 4f109531b..79a17b210 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm @@ -398,7 +398,7 @@ function handleAdd(row) { reset(); getTreeselect(); if (row != null && row.${treeCode}) { - form.value.${treeParentCode} = row.${treeCode}; + form.value.${treeParentCode} = row.${treeParentCode}; } else { form.value.${treeParentCode} = 0; } From 148c7c588e83d9c730839f7c1565e735d752bec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 23 Aug 2023 22:21:03 +0800 Subject: [PATCH 22/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E7=BC=93=E5=AD=98=E5=88=A0=E9=99=A4=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/store/modules/dict.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/store/modules/dict.js b/ruoyi-ui/src/store/modules/dict.js index f48df4228..8b044b602 100644 --- a/ruoyi-ui/src/store/modules/dict.js +++ b/ruoyi-ui/src/store/modules/dict.js @@ -14,7 +14,7 @@ const mutations = { try { for (let i = 0; i < state.dict.length; i++) { if (state.dict[i].key == key) { - state.dict.splice(i, i) + state.dict.splice(i, 1) return true } } From 0d9b1c2e8242b888cf13b87e8e6bce01a9812ee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 24 Aug 2023 19:46:35 +0800 Subject: [PATCH 23/34] =?UTF-8?q?remove=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application.yml | 6 +----- .../com/ruoyi/common/config/RuoYiConfig.java | 16 ---------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 627bb79d6..77a9ea2ce 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -5,11 +5,7 @@ ruoyi: # 版本 version: ${ruoyi-vue-plus.version} # 版权年份 - copyrightYear: 2022 - # 实例演示开关 - demoEnabled: true - # 获取ip地址开关 - addressEnabled: true + copyrightYear: 2023 # 缓存懒加载 cacheLazy: false diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java index 8ce7a8c4f..70c3d2946 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java @@ -1,7 +1,6 @@ package com.ruoyi.common.config; import lombok.Data; -import lombok.Getter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -31,24 +30,9 @@ public class RuoYiConfig { */ private String copyrightYear; - /** - * 实例演示开关 - */ - private boolean demoEnabled; - /** * 缓存懒加载 */ private boolean cacheLazy; - /** - * 获取地址开关 - */ - @Getter - private static boolean addressEnabled; - - public void setAddressEnabled(boolean addressEnabled) { - RuoYiConfig.addressEnabled = addressEnabled; - } - } From 2e3b0683419df280671aaaaf96b65ac70f77d7db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 25 Aug 2023 12:30:34 +0800 Subject: [PATCH 24/34] update springboot 2.7.14 => 2.7.15 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d8053766b..110f7476d 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ 4.8.0 - 2.7.14 + 2.7.15 UTF-8 UTF-8 1.8 From f8d551e226a951a802b1af142b1265ed58d70d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Wed, 30 Aug 2023 21:49:19 +0800 Subject: [PATCH 25/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E7=94=A8=E6=88=B7=E5=8F=AF=E8=83=BD=E4=BC=9A=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=9A=84=E8=B6=8A=E6=9D=83=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/web/controller/system/SysUserController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index e1f4288ba..d055e713a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -141,6 +141,7 @@ public class SysUserController extends BaseController { @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysUser user) { + deptService.checkDeptDataScope(user.getDeptId()); if (!userService.checkUserNameUnique(user)) { return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { @@ -161,6 +162,7 @@ public class SysUserController extends BaseController { public R edit(@Validated @RequestBody SysUser user) { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); + deptService.checkDeptDataScope(user.getDeptId()); if (!userService.checkUserNameUnique(user)) { return R.fail("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { From 23bf8406845fafe46060b67105ccab4fffdabd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 1 Sep 2023 11:41:00 +0800 Subject: [PATCH 26/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=8F=B0debuger=E4=BD=8D=E7=BD=AE=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20update=20=E4=BC=98=E5=8C=96=20TopNav=20?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=A0=B7=E5=BC=8F=20fix=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20=E5=B8=83=E5=B1=80=E9=85=8D=E7=BD=AE=E5=A4=B1=E6=95=88?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui-vue3/package.json | 2 +- ruoyi-ui-vue3/src/components/TopNav/index.vue | 38 +++++++++++++++---- .../src/layout/components/Navbar.vue | 2 +- .../src/layout/components/TagsView/index.vue | 4 +- ruoyi-ui-vue3/src/settings.js | 2 +- .../src/views/system/user/profile/index.vue | 2 +- ruoyi-ui-vue3/vite/plugins/setup-extend.js | 4 +- ruoyi-ui/src/components/TopNav/index.vue | 20 ++++++---- .../src/views/system/user/profile/index.vue | 2 +- .../views/system/user/profile/userAvatar.vue | 5 --- 10 files changed, 51 insertions(+), 30 deletions(-) diff --git a/ruoyi-ui-vue3/package.json b/ruoyi-ui-vue3/package.json index b570f1c64..d6390b733 100644 --- a/ruoyi-ui-vue3/package.json +++ b/ruoyi-ui-vue3/package.json @@ -38,6 +38,6 @@ "vite": "3.2.3", "vite-plugin-compression": "0.5.1", "vite-plugin-svg-icons": "2.0.1", - "vite-plugin-vue-setup-extend": "0.4.0" + "unplugin-vue-setup-extend-plus": "0.4.9" } } diff --git a/ruoyi-ui-vue3/src/components/TopNav/index.vue b/ruoyi-ui-vue3/src/components/TopNav/index.vue index 811cd9f1e..52b40ea13 100644 --- a/ruoyi-ui-vue3/src/components/TopNav/index.vue +++ b/ruoyi-ui-vue3/src/components/TopNav/index.vue @@ -6,10 +6,12 @@ :ellipsis="false" > @@ -19,10 +21,12 @@ - {{ item.meta.title }} + v-if="index >= visibleNumber"> + + {{ item.meta.title }} + @@ -189,4 +193,22 @@ onMounted(() => { padding: 0 5px !important; margin: 0 10px !important; } + +/* 背景色隐藏 */ +.topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus, .topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover, .topmenu-container.el-menu--horizontal>.el-submenu .el-submenu__title:hover { + background-color: #ffffff !important; +} + +/* 图标右间距 */ +.topmenu-container .svg-icon { + margin-right: 4px; +} + +/* topmenu more arrow */ +.topmenu-container .el-sub-menu .el-sub-menu__icon-arrow { + position: static; + vertical-align: middle; + margin-left: 8px; + margin-top: 0px; +} diff --git a/ruoyi-ui-vue3/src/layout/components/Navbar.vue b/ruoyi-ui-vue3/src/layout/components/Navbar.vue index c46ebe24c..202282983 100644 --- a/ruoyi-ui-vue3/src/layout/components/Navbar.vue +++ b/ruoyi-ui-vue3/src/layout/components/Navbar.vue @@ -33,7 +33,7 @@ 个人中心 - + 布局设置 diff --git a/ruoyi-ui-vue3/src/layout/components/TagsView/index.vue b/ruoyi-ui-vue3/src/layout/components/TagsView/index.vue index 1f996234f..91138ad10 100644 --- a/ruoyi-ui-vue3/src/layout/components/TagsView/index.vue +++ b/ruoyi-ui-vue3/src/layout/components/TagsView/index.vue @@ -280,7 +280,7 @@ function handleScroll() { height: 8px; border-radius: 50%; position: relative; - margin-right: 2px; + margin-right: 5px; } } } @@ -335,4 +335,4 @@ function handleScroll() { } } } - \ No newline at end of file + diff --git a/ruoyi-ui-vue3/src/settings.js b/ruoyi-ui-vue3/src/settings.js index 10e1db414..08a010826 100644 --- a/ruoyi-ui-vue3/src/settings.js +++ b/ruoyi-ui-vue3/src/settings.js @@ -10,7 +10,7 @@ export default { /** * 是否系统布局配置 */ - showSettings: false, + showSettings: true, /** * 是否显示顶部导航 diff --git a/ruoyi-ui-vue3/src/views/system/user/profile/index.vue b/ruoyi-ui-vue3/src/views/system/user/profile/index.vue index 09e4c326a..006893ab2 100644 --- a/ruoyi-ui-vue3/src/views/system/user/profile/index.vue +++ b/ruoyi-ui-vue3/src/views/system/user/profile/index.vue @@ -10,7 +10,7 @@
- +
  • diff --git a/ruoyi-ui-vue3/vite/plugins/setup-extend.js b/ruoyi-ui-vue3/vite/plugins/setup-extend.js index a4980f300..ed8342e98 100644 --- a/ruoyi-ui-vue3/vite/plugins/setup-extend.js +++ b/ruoyi-ui-vue3/vite/plugins/setup-extend.js @@ -1,5 +1,5 @@ -import setupExtend from 'vite-plugin-vue-setup-extend' +import setupExtend from 'unplugin-vue-setup-extend-plus/vite' export default function createSetupExtend() { - return setupExtend() + return setupExtend({}) } diff --git a/ruoyi-ui/src/components/TopNav/index.vue b/ruoyi-ui/src/components/TopNav/index.vue index 9fb8dd81d..cbed27339 100644 --- a/ruoyi-ui/src/components/TopNav/index.vue +++ b/ruoyi-ui/src/components/TopNav/index.vue @@ -5,10 +5,12 @@ @select="handleSelect" > @@ -18,10 +20,12 @@ - {{ item.meta.title }} + v-if="index >= visibleNumber"> + + {{ item.meta.title }} + diff --git a/ruoyi-ui/src/views/system/user/profile/index.vue b/ruoyi-ui/src/views/system/user/profile/index.vue index 2cc7c2f71..2520eb27f 100644 --- a/ruoyi-ui/src/views/system/user/profile/index.vue +++ b/ruoyi-ui/src/views/system/user/profile/index.vue @@ -8,7 +8,7 @@
- +
  • diff --git a/ruoyi-ui/src/views/system/user/profile/userAvatar.vue b/ruoyi-ui/src/views/system/user/profile/userAvatar.vue index 18b23a4b7..bc2991e59 100644 --- a/ruoyi-ui/src/views/system/user/profile/userAvatar.vue +++ b/ruoyi-ui/src/views/system/user/profile/userAvatar.vue @@ -61,11 +61,6 @@ import { debounce } from '@/utils' export default { components: { VueCropper }, - props: { - user: { - type: Object - } - }, data() { return { // 是否显示弹出层 From 2cead2c5fd75a6c6f63daea525c0aa037934e13a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8A=93=E8=9B=99=E5=B8=88?= <770492966@qq.com> Date: Fri, 8 Sep 2023 12:03:42 +0800 Subject: [PATCH 27/34] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=94=AF=E6=8C=81=E4=BC=A0=E5=88=86=E9=9A=94?= =?UTF-8?q?=E7=AC=A6=E5=88=86=E9=9A=94=E7=9A=84=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E7=BB=84=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/components/DictTag/index.vue | 41 +++++++++++------------ 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/ruoyi-ui/src/components/DictTag/index.vue b/ruoyi-ui/src/components/DictTag/index.vue index 279b6137c..c3429e559 100644 --- a/ruoyi-ui/src/components/DictTag/index.vue +++ b/ruoyi-ui/src/components/DictTag/index.vue @@ -40,6 +40,10 @@ export default { showValue: { type: Boolean, default: true, + }, + separator: { + type: String, + default: "," } }, data() { @@ -49,35 +53,28 @@ export default { }, computed: { values() { - if (this.value !== null && typeof this.value !== 'undefined') { - return Array.isArray(this.value) ? this.value : [String(this.value)]; - } else { - return []; - } + if (this.value === null || typeof this.value !== 'undefined' || this.value === '') return [] + return Array.isArray(this.value) ? this.value.map(item => '' + item) : String(this.value).split(this.separator) }, - unmatch(){ - this.unmatchArray = []; - if (this.value !== null && typeof this.value !== 'undefined') { - // 传入值为非数组 - if(!Array.isArray(this.value)){ - if(this.options.some(v=> v.value == this.value )) return false; - this.unmatchArray.push(this.value); - return true; - } - // 传入值为Array - this.value.forEach(item => { - if (!this.options.some(v=> v.value == item )) this.unmatchArray.push(item) - }); - return true; - } + unmatch() { + this.unmatchArray = [] // 没有value不显示 - return false; + if (this.value === null || typeof this.value !== 'undefined' || this.value === '' || this.options.length === 0) return false + // 传入值为数组 + let unmatch = false // 添加一个标志来判断是否有未匹配项 + this.values.forEach(item => { + if (!this.options.some(v => v.value === item)) { + this.unmatchArray.push(item) + unmatch = true // 如果有未匹配项,将标志设置为true + } + }) + return unmatch // 返回标志的值 }, }, filters: { handleArray(array) { - if(array.length===0) return ''; + if (array.length === 0) return ''; return array.reduce((pre, cur) => { return pre + ' ' + cur; }) From f2200df15a02721126de2bc9ab665c0508554ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 8 Sep 2023 17:41:14 +0800 Subject: [PATCH 28/34] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20!pr417=20?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=83=A8=E5=88=86=E9=97=AE=E9=A2=98=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81vue3=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/DictTag/index.vue | 36 +++++++++---------- ruoyi-ui/src/components/DictTag/index.vue | 4 +-- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/ruoyi-ui-vue3/src/components/DictTag/index.vue b/ruoyi-ui-vue3/src/components/DictTag/index.vue index 3b9511796..e2b40f5ec 100644 --- a/ruoyi-ui-vue3/src/components/DictTag/index.vue +++ b/ruoyi-ui-vue3/src/components/DictTag/index.vue @@ -41,34 +41,30 @@ const props = defineProps({ type: Boolean, default: true, }, + separator: { + type: String, + default: ",", + } }); const values = computed(() => { - if (props.value !== null && typeof props.value !== 'undefined') { - return Array.isArray(props.value) ? props.value : [String(props.value)]; - } else { - return []; - } + if (props.value === null || typeof props.value === 'undefined' || props.value === '') return []; + return Array.isArray(props.value) ? props.value.map(item => '' + item) : String(props.value).split(props.separator); }); const unmatch = computed(() => { unmatchArray.value = []; - if (props.value !== null && typeof props.value !== "undefined") { - // 传入值为非数组 - if (!Array.isArray(props.value)) { - if (props.options.some((v) => v.value == props.value)) return false; - unmatchArray.value.push(props.value); - return true; - } - // 传入值为Array - props.value.forEach((item) => { - if (!props.options.some((v) => v.value == item)) - unmatchArray.value.push(item); - }); - return true; - } // 没有value不显示 - return false; + if (props.value === null || typeof props.value === 'undefined' || props.value === '' || props.options.length === 0) return false + // 传入值为数组 + let unmatch = false // 添加一个标志来判断是否有未匹配项 + values.value.forEach(item => { + if (!props.options.some(v => v.value === item)) { + unmatchArray.value.push(item) + unmatch = true // 如果有未匹配项,将标志设置为true + } + }) + return unmatch // 返回标志的值 }); function handleArray(array) { diff --git a/ruoyi-ui/src/components/DictTag/index.vue b/ruoyi-ui/src/components/DictTag/index.vue index c3429e559..417b97aa4 100644 --- a/ruoyi-ui/src/components/DictTag/index.vue +++ b/ruoyi-ui/src/components/DictTag/index.vue @@ -53,13 +53,13 @@ export default { }, computed: { values() { - if (this.value === null || typeof this.value !== 'undefined' || this.value === '') return [] + if (this.value === null || typeof this.value === 'undefined' || this.value === '') return [] return Array.isArray(this.value) ? this.value.map(item => '' + item) : String(this.value).split(this.separator) }, unmatch() { this.unmatchArray = [] // 没有value不显示 - if (this.value === null || typeof this.value !== 'undefined' || this.value === '' || this.options.length === 0) return false + if (this.value === null || typeof this.value === 'undefined' || this.value === '' || this.options.length === 0) return false // 传入值为数组 let unmatch = false // 添加一个标志来判断是否有未匹配项 this.values.forEach(item => { From 2a36ce43024a72d993619a0847658d16805d191e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 14 Sep 2023 17:26:33 +0800 Subject: [PATCH 29/34] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=AD=97=E5=85=B8=E6=A0=B7=E5=BC=8F=E4=B8=8D?= =?UTF-8?q?=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui-vue3/src/components/DictTag/index.vue | 2 +- ruoyi-ui-vue3/src/views/system/dict/data.vue | 8 ++++---- ruoyi-ui/src/components/DictTag/index.vue | 2 +- ruoyi-ui/src/views/system/dict/data.vue | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ruoyi-ui-vue3/src/components/DictTag/index.vue b/ruoyi-ui-vue3/src/components/DictTag/index.vue index e2b40f5ec..7d0888cf0 100644 --- a/ruoyi-ui-vue3/src/components/DictTag/index.vue +++ b/ruoyi-ui-vue3/src/components/DictTag/index.vue @@ -3,7 +3,7 @@