From 76a2e7f8e5978e9ee13d7401c7153820b309cd6d Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期二, 28 九月 2021 09:46:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into satoken

---
 ruoyi-extend/ruoyi-monitor-admin/pom.xml                                        |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java     |   67 ++++--------
 ruoyi-framework/pom.xml                                                         |    2 
 ruoyi-admin/pom.xml                                                             |    4 
 ruoyi-system/pom.xml                                                            |    2 
 ruoyi-ui/src/views/index.vue                                                    |   41 ++++++++
 ruoyi-generator/pom.xml                                                         |    2 
 pom.xml                                                                         |    4 
 ruoyi-common/pom.xml                                                            |    2 
 README.md                                                                       |    2 
 docker/docker-compose.yml                                                       |    6 
 ruoyi-extend/pom.xml                                                            |    2 
 ruoyi-quartz/pom.xml                                                            |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java        |   72 ++++++--------
 ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java   |   34 ++----
 ruoyi-demo/pom.xml                                                              |    2 
 ruoyi-oss/pom.xml                                                               |    2 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java            |    2 
 ruoyi-ui/package.json                                                           |    6 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java |    2 
 ruoyi-ui/src/plugins/download.js                                                |    4 
 21 files changed, 133 insertions(+), 129 deletions(-)

diff --git a/README.md b/README.md
index c103879..c910560 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE)
 [![浣跨敤IntelliJ IDEA寮�鍙戠淮鎶(https://img.shields.io/badge/IntelliJ%20IDEA-鎻愪緵鏀寔-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
 <br>
-[![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-3.1.0-success.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
+[![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-3.2.0-success.svg)](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus)
 [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.5-blue.svg)]()
 [![JDK-8+](https://img.shields.io/badge/JDK-8-green.svg)]()
 [![JDK-11](https://img.shields.io/badge/JDK-11-green.svg)]()
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 1535f3d..e676d56 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -103,7 +103,7 @@
         ipv4_address: 172.30.0.54
 
   ruoyi-server1:
-    image: "ruoyi/ruoyi-server:3.1.0"
+    image: "ruoyi/ruoyi-server:3.2.0"
     container_name: ruoyi-server1
     environment:
       # 鏃跺尯涓婃捣
@@ -118,7 +118,7 @@
         ipv4_address: 172.30.0.60
 
   ruoyi-server2:
-    image: "ruoyi/ruoyi-server:3.1.0"
+    image: "ruoyi/ruoyi-server:3.2.0"
     container_name: ruoyi-server2
     environment:
       # 鏃跺尯涓婃捣
@@ -133,7 +133,7 @@
         ipv4_address: 172.30.0.61
 
   ruoyi-monitor-admin:
-    image: "ruoyi/ruoyi-monitor-admin:3.1.0"
+    image: "ruoyi/ruoyi-monitor-admin:3.2.0"
     container_name: ruoyi-monitor-admin
     environment:
       # 鏃跺尯涓婃捣
diff --git a/pom.xml b/pom.xml
index c6cb024..c6db868 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,14 +6,14 @@
 
     <groupId>com.ruoyi</groupId>
     <artifactId>ruoyi-vue-plus</artifactId>
-    <version>3.1.0</version>
+    <version>3.2.0</version>
 
     <name>RuoYi-Vue-Plus</name>
     <url>https://gitee.com/JavaLionLi/RuoYi-Vue-Plus</url>
     <description>RuoYi-Vue-Plus鍚庡彴绠$悊绯荤粺</description>
 
     <properties>
-        <ruoyi-vue-plus.version>3.1.0</ruoyi-vue-plus.version>
+        <ruoyi-vue-plus.version>3.2.0</ruoyi-vue-plus.version>
         <spring-boot.version>2.5.5</spring-boot.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 37cc33b..12327e3 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
@@ -87,7 +87,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.2.0</version>
                 <configuration>
                     <failOnMissingWebXml>false</failOnMissingWebXml>
                     <warName>${project.artifactId}</warName>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java
index 4acc311..bd1dcb6 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java
@@ -102,7 +102,7 @@
 		response.reset();
 		response.addHeader("Access-Control-Allow-Origin", "*");
 		response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
-		FileUtils.setAttachmentResponseHeader(response, URLEncoder.encode(sysOss.getOriginalName(), StandardCharsets.UTF_8.toString()));
+		FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName());
 		response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
 		long data;
 		try {
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 310e0ed..1d1bd80 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
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 4060b17..e3001c6 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
@@ -46,7 +46,7 @@
 			response.reset();
 			response.addHeader("Access-Control-Allow-Origin", "*");
 			response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
-			FileUtils.setAttachmentResponseHeader(response, URLEncoder.encode(filename, StandardCharsets.UTF_8.toString()));
+			FileUtils.setAttachmentResponseHeader(response, filename);
 			response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
 			ServletOutputStream os = response.getOutputStream();
 			EasyExcel.write(os, clazz)
diff --git a/ruoyi-demo/pom.xml b/ruoyi-demo/pom.xml
index 2eff3c2..339cbde 100644
--- a/ruoyi-demo/pom.xml
+++ b/ruoyi-demo/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/ruoyi-extend/pom.xml b/ruoyi-extend/pom.xml
index 2a348af..6378eb9 100644
--- a/ruoyi-extend/pom.xml
+++ b/ruoyi-extend/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>ruoyi-extend</artifactId>
diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
index dc08303..d63b110 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/pom.xml
+++ b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-extend</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 7010724..20176a0 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml
index d5bdc7e..e19cbb2 100644
--- a/ruoyi-generator/pom.xml
+++ b/ruoyi-generator/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/ruoyi-oss/pom.xml b/ruoyi-oss/pom.xml
index 51111c1..6c93df8 100644
--- a/ruoyi-oss/pom.xml
+++ b/ruoyi-oss/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml
index cba3e92..ee682f7 100644
--- a/ruoyi-quartz/pom.xml
+++ b/ruoyi-quartz/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index 8d1d85f..e7c12ef 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <artifactId>ruoyi-vue-plus</artifactId>
         <groupId>com.ruoyi</groupId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
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 e44d31b..fb8273a 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
@@ -13,7 +13,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -23,57 +23,48 @@
  * @author ruoyi
  */
 @Slf4j
-@Component
-public class SysLoginService
-{
+@Service
+public class SysLoginService {
 
-	@Autowired
+    @Autowired
     private ISysUserService userService;
 
-	@Autowired
-	private ISysConfigService configService;
+    @Autowired
+    private ISysConfigService configService;
 
-	@Autowired
-	private LogininforService asyncService;
+    @Autowired
+    private LogininforService asyncService;
 
     /**
      * 鐧诲綍楠岃瘉
      *
      * @param username 鐢ㄦ埛鍚�
      * @param password 瀵嗙爜
-     * @param code 楠岃瘉鐮�
-     * @param uuid 鍞竴鏍囪瘑
+     * @param code     楠岃瘉鐮�
+     * @param uuid     鍞竴鏍囪瘑
      * @return 缁撴灉
      */
-    public String login(String username, String password, String code, String uuid)
-    {
-		HttpServletRequest request = ServletUtils.getRequest();
-		boolean captchaOnOff = configService.selectCaptchaOnOff();
+    public String login(String username, String password, String code, String uuid) {
+        HttpServletRequest request = ServletUtils.getRequest();
+        boolean captchaOnOff = configService.selectCaptchaOnOff();
         // 楠岃瘉鐮佸紑鍏�
-        if (captchaOnOff)
-        {
+        if (captchaOnOff) {
             validateCaptcha(username, code, uuid, request);
         }
         SysUser user = userService.selectUserByUserName(username);
-        if (StringUtils.isNull(user))
-        {
+        if (StringUtils.isNull(user)) {
             log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", username);
             throw new ServiceException("鐧诲綍鐢ㄦ埛锛�" + username + " 涓嶅瓨鍦�");
-        }
-        else if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
-        {
+        } else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
             log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍒犻櫎.", username);
             throw new ServiceException("瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿锛�" + username + " 宸茶鍒犻櫎");
-        }
-        else if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
-        {
+        } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
             log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username);
             throw new ServiceException("瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿锛�" + username + " 宸插仠鐢�");
         }
         BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
         String encodePassword = passwordEncoder.encode(password);
-        if (SecurityUtils.matchesPassword(user.getPassword(), encodePassword))
-        {
+        if (SecurityUtils.matchesPassword(user.getPassword(), encodePassword)) {
             asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"), request);
             throw new UserPasswordNotMatchException();
         }
@@ -89,22 +80,22 @@
      * 鏍¢獙楠岃瘉鐮�
      *
      * @param username 鐢ㄦ埛鍚�
-     * @param code 楠岃瘉鐮�
-     * @param uuid 鍞竴鏍囪瘑
+     * @param code     楠岃瘉鐮�
+     * @param uuid     鍞竴鏍囪瘑
      * @return 缁撴灉
      */
     public void validateCaptcha(String username, String code, String uuid, HttpServletRequest request) {
-		String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
-		String captcha = RedisUtils.getCacheObject(verifyKey);
+        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+        String captcha = RedisUtils.getCacheObject(verifyKey);
         RedisUtils.deleteObject(verifyKey);
-		if (captcha == null) {
-			asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), request);
-			throw new CaptchaExpireException();
-		}
-		if (!code.equalsIgnoreCase(captcha)) {
-			asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"), request);
-			throw new CaptchaException();
-		}
+        if (captcha == null) {
+            asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), request);
+            throw new CaptchaExpireException();
+        }
+        if (!code.equalsIgnoreCase(captcha)) {
+            asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"), request);
+            throw new CaptchaException();
+        }
     }
 
     /**
@@ -112,8 +103,7 @@
      *
      * @param userId 鐢ㄦ埛ID
      */
-    public void recordLoginInfo(Long userId)
-    {
+    public void recordLoginInfo(Long userId) {
         SysUser sysUser = new SysUser();
         sysUser.setUserId(userId);
         sysUser.setLoginIp(ServletUtils.getClientIP());
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java
index d8c657b..095b3b5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java
@@ -2,19 +2,19 @@
 
 import com.ruoyi.common.core.domain.entity.SysUser;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 import java.util.HashSet;
 import java.util.Set;
 
 /**
  * 鐢ㄦ埛鏉冮檺澶勭悊
- * 
+ *
  * @author ruoyi
  */
-@Component
-public class SysPermissionService
-{
+@Service
+public class SysPermissionService {
+
     @Autowired
     private ISysRoleService roleService;
 
@@ -23,20 +23,16 @@
 
     /**
      * 鑾峰彇瑙掕壊鏁版嵁鏉冮檺
-     * 
+     *
      * @param user 鐢ㄦ埛淇℃伅
      * @return 瑙掕壊鏉冮檺淇℃伅
      */
-    public Set<String> getRolePermission(SysUser user)
-    {
+    public Set<String> getRolePermission(SysUser user) {
         Set<String> roles = new HashSet<String>();
         // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄�
-        if (user.isAdmin())
-        {
+        if (user.isAdmin()) {
             roles.add("admin");
-        }
-        else
-        {
+        } else {
             roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
         }
         return roles;
@@ -44,20 +40,16 @@
 
     /**
      * 鑾峰彇鑿滃崟鏁版嵁鏉冮檺
-     * 
+     *
      * @param user 鐢ㄦ埛淇℃伅
      * @return 鑿滃崟鏉冮檺淇℃伅
      */
-    public Set<String> getMenuPermission(SysUser user)
-    {
+    public Set<String> getMenuPermission(SysUser user) {
         Set<String> perms = new HashSet<String>();
         // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄�
-        if (user.isAdmin())
-        {
+        if (user.isAdmin()) {
             perms.add("*:*:*");
-        }
-        else
-        {
+        } else {
             perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
         }
         return perms;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java
index 8171cb0..045c680 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java
@@ -9,75 +9,59 @@
 import com.ruoyi.common.exception.user.CaptchaExpireException;
 import com.ruoyi.common.utils.*;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 /**
  * 娉ㄥ唽鏍¢獙鏂规硶
  *
  * @author ruoyi
  */
-@Component
-public class SysRegisterService
-{
+@Service
+public class SysRegisterService {
+
     @Autowired
     private ISysUserService userService;
 
     @Autowired
     private ISysConfigService configService;
 
-	@Autowired
-	private LogininforService asyncService;
+    @Autowired
+    private LogininforService asyncService;
 
     /**
      * 娉ㄥ唽
      */
-    public String register(RegisterBody registerBody)
-    {
+    public String register(RegisterBody registerBody) {
         String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword();
 
         boolean captchaOnOff = configService.selectCaptchaOnOff();
         // 楠岃瘉鐮佸紑鍏�
-        if (captchaOnOff)
-        {
+        if (captchaOnOff) {
             validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
         }
 
-        if (StringUtils.isEmpty(username))
-        {
+        if (StringUtils.isEmpty(username)) {
             msg = "鐢ㄦ埛鍚嶄笉鑳戒负绌�";
-        }
-        else if (StringUtils.isEmpty(password))
-        {
+        } else if (StringUtils.isEmpty(password)) {
             msg = "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖";
-        }
-        else if (username.length() < UserConstants.USERNAME_MIN_LENGTH
-                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
-        {
+        } else if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+                || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
             msg = "璐︽埛闀垮害蹇呴』鍦�2鍒�20涓瓧绗︿箣闂�";
-        }
-        else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
-                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
-        {
+        } else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+                || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
             msg = "瀵嗙爜闀垮害蹇呴』鍦�5鍒�20涓瓧绗︿箣闂�";
-        }
-        else if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(username)))
-        {
+        } else if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(username))) {
             msg = "淇濆瓨鐢ㄦ埛'" + username + "'澶辫触锛屾敞鍐岃处鍙峰凡瀛樺湪";
-        }
-        else
-        {
+        } else {
             SysUser sysUser = new SysUser();
             sysUser.setUserName(username);
             sysUser.setNickName(username);
             sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword()));
             boolean regFlag = userService.registerUser(sysUser);
-            if (!regFlag)
-            {
+            if (!regFlag) {
                 msg = "娉ㄥ唽澶辫触,璇疯仈绯荤郴缁熺鐞嗕汉鍛�";
-            }
-            else
-            {
-				asyncService.recordLogininfor(username, Constants.REGISTER,
+            } else {
+                asyncService.recordLogininfor(username, Constants.REGISTER,
                         MessageUtils.message("user.register.success"), ServletUtils.getRequest());
             }
         }
@@ -88,21 +72,18 @@
      * 鏍¢獙楠岃瘉鐮�
      *
      * @param username 鐢ㄦ埛鍚�
-     * @param code 楠岃瘉鐮�
-     * @param uuid 鍞竴鏍囪瘑
+     * @param code     楠岃瘉鐮�
+     * @param uuid     鍞竴鏍囪瘑
      * @return 缁撴灉
      */
-    public void validateCaptcha(String username, String code, String uuid)
-    {
+    public void validateCaptcha(String username, String code, String uuid) {
         String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
         String captcha = RedisUtils.getCacheObject(verifyKey);
         RedisUtils.deleteObject(verifyKey);
-        if (captcha == null)
-        {
+        if (captcha == null) {
             throw new CaptchaExpireException();
         }
-        if (!code.equalsIgnoreCase(captcha))
-        {
+        if (!code.equalsIgnoreCase(captcha)) {
             throw new CaptchaException();
         }
     }
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index d43aee1..1189455 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -1,6 +1,6 @@
 {
   "name": "ruoyi-vue-plus",
-  "version": "3.1.0",
+  "version": "3.2.0",
   "description": "RuoYi-Vue-Plus鍚庡彴绠$悊绯荤粺",
   "author": "LionLi",
   "license": "MIT",
@@ -71,8 +71,8 @@
     "eslint-plugin-vue": "7.2.0",
     "lint-staged": "10.5.3",
     "runjs": "4.4.2",
-    "sass": "1.42.1",
-    "sass-loader": "10.1.0",
+    "sass": "1.32.13",
+    "sass-loader": "10.1.1",
     "script-ext-html-webpack-plugin": "2.1.5",
     "svg-sprite-loader": "5.1.1",
     "vue-template-compiler": "2.6.12"
diff --git a/ruoyi-ui/src/plugins/download.js b/ruoyi-ui/src/plugins/download.js
index 248ed01..50f664a 100644
--- a/ruoyi-ui/src/plugins/download.js
+++ b/ruoyi-ui/src/plugins/download.js
@@ -40,7 +40,7 @@
       this.saveAs(blob, decodeURI(res.headers['download-filename']))
     })
   },
-  oss(ossId, name) {
+  oss(ossId) {
     var url = baseURL + '/system/oss/download/' + ossId
     axios({
       method: 'get',
@@ -49,7 +49,7 @@
       headers: { 'Authorization': 'Bearer ' + getToken() }
     }).then(res => {
       const blob = new Blob([res.data], { type: 'application/octet-stream' })
-      this.saveAs(blob, name)
+      this.saveAs(blob, decodeURI(res.headers['download-filename']))
     })
   },
   zip(url, name) {
diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue
index 3d90e45..ae96e99 100644
--- a/ruoyi-ui/src/views/index.vue
+++ b/ruoyi-ui/src/views/index.vue
@@ -93,6 +93,47 @@
             <span>鏇存柊鏃ュ織</span>
           </div>
           <el-collapse accordion>
+            <el-collapse-item title="v3.2.0 - 2021-9-28">
+              <ol>
+                <li>update [閲嶅ぇ鏀瑰姩]鎺ュ彛鏂囨。 鏀寔鍒嗙粍閰嶇疆</li>
+                <li>update [閲嶅ぇ鏀瑰姩]security 璺緞閰嶇疆鎶藉彇鍒伴厤缃枃浠�</li>
+                <li>update [閲嶅ぇ鏀瑰姩] 灏� framework 涓� system 妯″潡 瑙h�� 璋冩暣渚濊禆缁撴瀯 瑙e喅渚濊禆鍐茬獊</li>
+                <li>update [閲嶅ぇ鏀瑰姩]閲嶅啓 闃查噸鎻愪氦瀹炵幇 浣跨敤鍒嗗竷寮忛攣 瑙e喅骞跺彂闂 鍘嬫祴閫氳繃</li>
+                <li>update springboot 2.5.4 => 2.5.5 bugfix鐗堟湰</li>
+                <li>update mybatis-plus 3.4.3.3 => 3.4.3.4 bugfix鐗堟湰</li>
+                <li>update redisson 3.16.2 => 3.16.3 bugfix鐗堟湰</li>
+                <li>update easyexcel 2.2.10 => 2.2.11</li>
+                <li>update hutool 5.7.11 => 5.7.13</li>
+                <li>update file-saver 2.0.4 => 2.0.5</li>
+                <li>update dart-sass 1.32.0 => 1.32.13</li>
+                <li>update sass-loader 10.1.0 => 10.1.1</li>
+                <li>update 浼樺寲浠g爜鐢熸垚 鏍规嵁MP鐢熸垚鐗规�� 璋冩暣瀵煎叆琛ㄧ粨鏋勯粯璁ゅ�煎悎鐞嗗寲</li>
+                <li>update 灏嗘墍鏈� 浜戝瓨鍌ㄥ瓧鏍� 鏀逛负 瀵硅薄瀛樺偍 閬垮厤璇В</li>
+                <li>update 鏇存柊 @Cacheable 閿欒鐢ㄦ硶 娉ㄦ剰浜嬮」</li>
+                <li>update 浼樺寲 AddressUtils 绌烘牎楠屽鐞�</li>
+                <li>update 鑿滃崟绠$悊鏀寔閰嶇疆璺敱鍙傛暟</li>
+                <li>update 浼樺寲aop璇硶 浣跨敤spring鑷姩娉ㄥ叆娉ㄨВ</li>
+                <li>update 浣跨敤 Redisson 闄愭祦宸ュ叿 閲嶅啓闄愭祦瀹炵幇</li>
+                <li>update 浣跨敤 vue-data-dict 绠�鍖栨暟鎹瓧鍏镐娇鐢�</li>
+                <li>update 澧炲姞鏃ュ織娉ㄨВ鏂板鏄惁淇濆瓨鍝嶅簲鍙傛暟寮�鍏�</li>
+                <li>update 鐢ㄦ埛鏈櫥褰曟棩蹇楁敼涓� warn 绾у埆</li>
+                <li>update OSS妯″潡 鍏充簬涓嬭浇403鎶ラ敊淇℃伅浼樺寲</li>
+                <li>update 鏇存柊 Actuator prod 榛樿鏆存紡绔偣 澧炲姞鏆存紡 logfile 鏃ュ織绔偣</li>
+                <li>update 榛樿閫傞厤jdk11 娴嬭瘯 jdk17 鏃犲紓甯�</li>
+                <li>update 灏佽閫氱敤涓嬭浇鏂规硶绠�鍖栦笅杞戒娇鐢�</li>
+                <li>add 鏂板閫氱敤鏂规硶绠�鍖栨ā鎬�/缂撳瓨浣跨敤</li>
+                <li>add 澧炲姞 闄愭祦婕旂ず妗堜緥</li>
+                <li>add 澧炲姞 redis redisson 闆嗙兢閰嶇疆</li>
+                <li>fix Cron琛ㄨ揪寮忕敓鎴愬櫒鍏抽棴鏃堕攢姣侊紝閬垮厤鍐嶆鎵撳紑鏃跺瓨鍦ㄤ笂涓�娆′慨鏀圭殑鏁版嵁</li>
+                <li>fix 鍏ㄥ眬闄愭祦key浼氬鍑轰竴涓�"-" 灏嗗叾绉诲姩鍒癐P鍚庨潰 鍘婚櫎澶氫綑鐨勭┖鏍�</li>
+                <li>fix 淇澶氫富閿唬鐮佺敓鎴恇ug</li>
+                <li>fix 淇 @Cacheable 涓� @DataScope 鍐茬獊闂</li>
+                <li>fix 淇浠g爜鐢熸垚椤甸潰鏁版嵁缂栬緫淇濆瓨涔嬪悗鎬绘槸璺宠浆绗竴椤电殑闂</li>
+                <li>remove 绉婚櫎杩囨湡宸ュ叿 RedisCache</li>
+                <li>remove 绉婚櫎鏃犵敤閰嶇疆绫� ServerConfig</li>
+                <li>remove 绉婚櫎 SysUser 鏃犵敤瀛楁 salt</li>
+              </ol>
+            </el-collapse-item>
             <el-collapse-item title="v3.1.0 - 2021-9-7">
               <ol>
                 <li>add [閲嶅ぇ鏀瑰姩] 杩囨湡 RedisCache 鏂板 RedisUtils 宸ュ叿绫� 鏂板 鍙戝竷璁㈤槄鍔熻兘 鏇寸伒宸т究浜庝娇鐢�</li>

--
Gitblit v1.9.3