From 2af1fbd254995a0240afbd9bef3022e5bbbc603f Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 04 三月 2024 09:39:56 +0800
Subject: [PATCH] 初始化

---
 src/permission.js                          |    6 ++
 src/api/system/user.js                     |    6 +
 src/views/login.vue                        |   91 ++++++++++++++++++++++++++---
 src/views/system/user/profile/resetPwd.vue |   19 +++++-
 4 files changed, 106 insertions(+), 16 deletions(-)

diff --git a/src/api/system/user.js b/src/api/system/user.js
index f2f76ef..d2f9d92 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -88,10 +88,11 @@
 }
 
 // 鐢ㄦ埛瀵嗙爜閲嶇疆
-export function updateUserPwd(oldPassword, newPassword) {
+export function updateUserPwd(oldPassword, newPassword, firstLogin) {
   const data = {
     oldPassword,
-    newPassword
+    newPassword,
+    firstLogin
   }
   return request({
     url: '/system/user/profile/updatePwd',
@@ -133,3 +134,4 @@
     method: 'get'
   })
 }
+
diff --git a/src/permission.js b/src/permission.js
index c568979..45c6285 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -16,6 +16,12 @@
     to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
     /* has token*/
     if (to.path === '/login') {
+      // 鏂板鍒ゆ柇鈥斺�斿綋鍓嶄綅缃湭鐧诲綍椤甸潰鏃讹細濡傛灉firstLogin鍊间负0
+      if(localStorage.getItem("firstLogin") == 0) {
+        // 鍘绘帀token
+        setToken("")
+      }
+      // 涓嶄负true鏃朵笉鍙�
       next({ path: '/' })
       NProgress.done()
     } else if (whiteList.indexOf(to.path) !== -1) {
diff --git a/src/views/login.vue b/src/views/login.vue
index 95cff50..cf7c897 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -2,6 +2,7 @@
   <div class="login">
     <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
       <h3 class="title">鑻ヤ緷鍚庡彴绠$悊绯荤粺</h3>
+
       <el-form-item prop="username">
         <el-input
           v-model="loginForm.username"
@@ -54,21 +55,53 @@
         </div>
       </el-form-item>
     </el-form>
-    <!--  搴曢儴  -->
-    <div class="el-login-footer">
-      <span>Copyright 漏 2018-2023 ruoyi.vip All Rights Reserved.</span>
-    </div>
+
+    <el-dialog title="涓轰簡鎮ㄧ殑璐﹀彿瀹夊叏,棣栨鐧婚檰璇蜂慨鏀瑰瘑鐮�" :visible.sync="loginInfo.firstLogin==0?true:false">
+         <el-form>
+           <el-form-item label="鏂板瘑鐮�">
+               <el-input v-model="newPassword" autocomplete="off"></el-input>
+           </el-form-item>
+            <el-form-item label="璇风‘璁ゅ瘑鐮�">
+               <el-input v-model="confirmPassword" autocomplete="off"></el-input>
+            </el-form-item>
+         </el-form>
+         <div slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="updatePwd">纭� 瀹�</el-button>
+         </div>
+    </el-dialog>
   </div>
+
+
 </template>
 
 <script>
-import { getCodeImg } from "@/api/login";
+import { getCodeImg ,getInfo} from "@/api/login";
 import Cookies from "js-cookie";
 import { encrypt, decrypt } from '@/utils/jsencrypt'
+import { updateUserPwd } from "@/api/system/user";
 
 export default {
+  //鏂板瀵硅薄銆佸彉閲�
   name: "Login",
   data() {
+    const equalToPassword = (rule, value, callback) => {
+          if (this.newPassword !== value) {
+            callback(new Error("涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"));
+          } else {
+            callback();
+          }
+        };
+    const validatePassword = (rule, value, callback) => {
+          var regex = /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[\W_])/;
+              if (value.length < 8 || value.length > 10) {
+                callback(new Error('璇疯緭鍏�8-10浣嶅ぇ鍐欏瓧姣�+灏忓啓瀛楁瘝+鏁板瓧+鐗规畩瀛楃'));
+              }
+              else if (!regex.test(value)) {
+                callback(new Error("璇疯緭鍏�8-10浣嶅ぇ鍐欏瓧姣�+灏忓啓瀛楁瘝+鏁板瓧+鐗规畩瀛楃"));
+              } else {
+                callback();
+              }
+            };
     return {
       codeUrl: "",
       loginForm: {
@@ -78,6 +111,11 @@
         code: "",
         uuid: ""
       },
+      loginInfo: {
+          firstLogin: 1
+      },
+      newPassword: undefined,
+      confirmPassword: undefined,
       loginRules: {
         username: [
           { required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勮处鍙�" }
@@ -86,6 +124,16 @@
           { required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勫瘑鐮�" }
         ],
         code: [{ required: true, trigger: "change", message: "璇疯緭鍏ラ獙璇佺爜" }]
+      },
+      rules: {
+        newPassword: [
+          { required: true, message: "鏂板瘑鐮佷笉鑳戒负绌�", trigger: "blur" },
+          { required: true, validator: validatePassword, trigger: "blur" }
+        ],
+        confirmPassword: [
+          { required: true, message: "纭瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
+          { required: true, validator: equalToPassword, trigger: "blur" }
+        ]
       },
       loading: false,
       // 楠岃瘉鐮佸紑鍏�
@@ -131,6 +179,7 @@
       this.$refs.loginForm.validate(valid => {
         if (valid) {
           this.loading = true;
+
           if (this.loginForm.rememberMe) {
             Cookies.set("username", this.loginForm.username, { expires: 30 });
             Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
@@ -140,19 +189,39 @@
             Cookies.remove("password");
             Cookies.remove('rememberMe');
           }
-          this.$store.dispatch("Login", this.loginForm).then(() => {
-            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
+
+          this.$store.dispatch("Login", this.loginForm).then((res) => {
+              getInfo().then(loginInfo => {
+              this.loginInfo = loginInfo.user
+              //濡傛灉杩斿洖涓�1姝e父璺宠浆
+              if(this.loginInfo.firstLogin == 1){
+                this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
+              } else {
+                 localStorage.setItem('firstLogin',0)
+              }
+              }).catch(()=>{})
           }).catch(() => {
             this.loading = false;
             if (this.captchaEnabled) {
               this.getCode();
             }
           });
+         }
+       });
+      },
+    // 鏂板淇敼鏂规硶
+    updatePwd(){
+      updateUserPwd("", this.newPassword, 0).then(response => {
+      	// 淇敼瀹屾垚灏唂irstLogin鏀逛负1
+        localStorage.setItem('firstLogin', 1)
+        this.$modal.msgSuccess("淇敼鎴愬姛");
+        this.$router.push({ path: this.redirect || "/" }).catch(() => {});
+      }).catch((e) => {
+        console.info(e)
+          });
         }
-      });
-    }
-  }
-};
+       }
+     };
 </script>
 
 <style rel="stylesheet/scss" lang="scss">
diff --git a/src/views/system/user/profile/resetPwd.vue b/src/views/system/user/profile/resetPwd.vue
index 64e8f8c..1a729dd 100644
--- a/src/views/system/user/profile/resetPwd.vue
+++ b/src/views/system/user/profile/resetPwd.vue
@@ -28,6 +28,17 @@
         callback();
       }
     };
+    const validatePassword = (rule, value, callback) => {
+      var regex = /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[\W_])/;
+          if (value.length < 8 || value.length > 10) {
+            callback(new Error('璇疯緭鍏�8-10浣嶅ぇ鍐欏瓧姣�+灏忓啓瀛楁瘝+鏁板瓧+鐗规畩瀛楃'));
+          }
+          else if (!regex.test(value)) {
+            callback(new Error("璇疯緭鍏�8-10浣嶅ぇ鍐欏瓧姣�+灏忓啓瀛楁瘝+鏁板瓧+鐗规畩瀛楃"));
+          } else {
+            callback();
+          }
+        };
     return {
       user: {
         oldPassword: undefined,
@@ -41,7 +52,7 @@
         ],
         newPassword: [
           { required: true, message: "鏂板瘑鐮佷笉鑳戒负绌�", trigger: "blur" },
-          { min: 6, max: 20, message: "闀垮害鍦� 6 鍒� 20 涓瓧绗�", trigger: "blur" }
+          { required: true, validator: validatePassword, trigger: "blur" }
         ],
         confirmPassword: [
           { required: true, message: "纭瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" },
@@ -54,8 +65,10 @@
     submit() {
       this.$refs["form"].validate(valid => {
         if (valid) {
-          updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => {
-            this.$modal.msgSuccess("淇敼鎴愬姛");
+        // 淇敼updateUserPwd鏂规硶鐨勫叆鍙�
+        // firstLogin鍊间负0鏃朵笉鏍¢獙鏃у瘑鐮侊紝浼犲叆1鏍¢獙锛屼笉褰卞搷鍔熻兘
+        updateUserPwd(this.user.oldPassword, this.user.newPassword, 1).then(response => {
+        this.$modal.msgSuccess("淇敼鎴愬姛");
           });
         }
       });

--
Gitblit v1.8.0