From 96783deec8d19e03d4484751df0a2ccd252a9716 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 17 十月 2024 18:40:00 +0800
Subject: [PATCH] 密碼失效修改密碼

---
 src/views/login/index.vue |  107 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 90 insertions(+), 17 deletions(-)

diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 544195b..f0d0e6c 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -14,37 +14,67 @@
                 <el-form-item prop="userName">
                   <label>鐢ㄦ埛鍚� </label>
                   <el-input ref="userName" v-model="loginForm.userName" class="lowin-input" placeholder="鐢ㄦ埛鍚�"
-                    name="userName" type="text" tabindex="1" auto-complete="on" />
+                            name="userName" type="text" tabindex="1" auto-complete="on"/>
                 </el-form-item>
               </div>
               <div class="lowin-group password-group">
                 <el-form-item prop="password">
                   <!-- <label>瀵嗙爜 <a href="#" class="forgot-link">蹇樿瀵嗙爜?</a></label> -->
                   <el-input class="lowin-input" :key="passwordType" ref="password" v-model="loginForm.password"
-                    :type="passwordType" placeholder="瀵嗙爜" name="password" tabindex="2" auto-complete="on"
-                    @keyup.native="checkCapslock" @blur="capsTooltip = false" @keyup.enter.native="handleLogin" />
+                            :type="passwordType" placeholder="瀵嗙爜" name="password" tabindex="2" auto-complete="on"
+                            @keyup.native="checkCapslock" @blur="capsTooltip = false"
+                            @keyup.enter.native="handleLogin"/>
                 </el-form-item>
               </div>
 
               <el-button :loading="loading" class="lowin-btn login-btn" @click="handleLogin">鐧诲綍</el-button>
             </el-form>
+
           </div>
         </div>
       </div>
     </div>
   </div>
 
+  <el-dialog
+      title="淇敼瀵嗙爜"
+      v-model="forceUpdateShow"
+      width="400px"
+  >
+    <div style="margin-bottom: 10px; color: #aa1111">鎮ㄧ殑瀵嗙爜宸茬粡杩囨湡锛岃閲嶆柊璁剧疆~</div>
+    <el-form ref="updatePasswordFormRef" :model="updatePasswordForm" :rules="updatePasswordRules">
+      <el-form-item label="鏂板瘑鐮�" prop="newPassword">
+        <el-input v-model="updatePasswordForm.newPassword" placeholder="搴斿寘鍚ぇ灏忓啓銆佹暟瀛�" show-password></el-input>
+      </el-form-item>
+      <el-form-item label="纭瀵嗙爜">
+        <el-input v-model="updatePasswordForm.confirmPassword" placeholder="纭瀵嗙爜" show-password></el-input>
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+              <el-button @click="forceUpdateShow = false">鍏� 闂�</el-button>
+               <el-button type="primary" @click="changePassword">淇� 鏀�</el-button>
+              </span>
+  </el-dialog>
 </template>
 
 <script setup>
-import { ref, reactive, onMounted, nextTick } from 'vue';
-import { useRouter } from 'vue-router';
-import { login } from '@/api/modules/user.js';
-import { useUserStore } from '@/store/index.js';
+import {ref, reactive, onMounted, nextTick} from 'vue';
+import {useRouter} from 'vue-router';
+import {ElMessage} from 'element-plus';
+import {login, updatePassword} from '@/api/modules/user.js';
+import {useUserStore} from '@/store/index.js';
 
 const userStore = useUserStore();
 
 const router = useRouter();
+
+const forceUpdateShow = ref(false);
+
+const updatePasswordForm = reactive({
+  userId: null,
+  newPassword: '',
+  confirmPassword: ''
+});
 
 const validateUsername = (rule, value, callback) => {
   if (value.length < 5) {
@@ -60,6 +90,19 @@
     callback();
   }
 };
+const validateNewPassword = (rule, value, callback) => {
+  if (value === '') {
+    callback(new Error('璇疯緭鍏ュ瘑鐮�'))
+  } else if (!/[A-Z]/.test(value)) {
+    callback(new Error('瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓ぇ鍐欏瓧姣�'))
+  } else if (!/[a-z]/.test(value)) {
+    callback(new Error('瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓皬鍐欏瓧姣�'))
+  } else if (!/[0-9]/.test(value)) {
+    callback(new Error('瀵嗙爜蹇呴』鍖呭惈鑷冲皯涓�涓暟瀛�'))
+  } else {
+    callback()
+  }
+}
 
 const loginForm = reactive({
   userName: '',
@@ -67,22 +110,25 @@
   remember: false
 });
 const loginRules = reactive({
-  userName: [{ required: true, trigger: 'blur', validator: validateUsername }],
-  password: [{ required: true, trigger: 'blur', validator: validatePassword }]
+  userName: [{required: true, trigger: 'blur', validator: validateUsername}],
+  password: [{required: true, trigger: 'blur', validator: validatePassword}]
+});
+const updatePasswordRules = reactive({
+  newPassword: [{required: true, trigger: 'blur', validator: validateNewPassword}]
 });
 const passwordType = ref('password');
 const capsTooltip = ref(false);
 const loading = ref(false);
 const showDialog = ref(false);
 
+
 const userName = ref(null);
 const password = ref(null);
 
 const loginFormRef = ref(null);
+const updatePasswordFormRef = ref(null);
 
-
-
-const checkCapslock = ({ shiftKey, key } = {}) => {
+const checkCapslock = ({shiftKey, key} = {}) => {
   if (key && key.length === 1) {
     if (shiftKey && (key >= 'a' && key <= 'z') || !shiftKey && (key >= 'A' && key <= 'Z')) {
       capsTooltip.value = true;
@@ -111,16 +157,43 @@
     if (valid) {
       loading.value = true;
       login(loginForm).then(res => {
-        loading.value = false;
-        userStore.setUserInfo(res.data);
-        router.push('/index');
+        // 濡傛灉code涓�205锛屽垯寮哄埗淇敼瀵嗙爜
+        if (res && res.code === 205) {
+          updatePasswordForm.userId = res.data
+          console.log(updatePasswordForm.userId)
+          forceUpdateShow.value = true;
+          console.log(forceUpdateShow.value)
+          loading.value = false
+        } else {
+          loading.value = false;
+          userStore.setUserInfo(res.data);
+          router.push('/index');
+        }
       }).catch(err => {
         loading.value = false;
       });
     }
   });
 };
-
+const changePassword = () => {
+  updatePasswordFormRef.value.validate((valid) => {
+    if (valid) {
+      if (updatePasswordForm.newPassword !== updatePasswordForm.confirmPassword) {
+        ElMessage.error('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�');
+        return;
+      }
+      updatePassword(updatePasswordForm).then(res => {
+        if (res.code === 1) {
+          ElMessage.success('瀵嗙爜淇敼鎴愬姛銆傝閲嶆柊鐧诲綍');
+          loginForm.password = '';
+          forceUpdateShow.value = false;
+        }
+      }).catch(error => {
+        ElMessage.error('瀵嗙爜淇敼澶辫触锛�' + error.message);
+      });
+    }
+  });
+};
 onMounted(() => {
   if (loginForm.userName === '') {
     userName.value.focus();
@@ -398,4 +471,4 @@
     padding: 0 10px;
   }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.8.0