Browse Source

优化修改密码

lighter 1 year ago
parent
commit
49bd59d443

+ 7 - 5
src/components/system/password-layer/PasswordLayer.vue

@@ -6,11 +6,11 @@
              :close-on-press-escape="false"
              :show-close="false"
              @closed="closeLayout"
-             width="460px">
+             width="500px">
 
     <div v-if="!closable" style="margin-bottom: 12px; margin-top: -8px">
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-      根据4级电子病历评审要求,密码长度需<span style="color: red">至少8位,且同时包含大小写字母和数字。</span>
+      根据4级电子病历评审要求,密码长度需<span style="color: red">至少8位,且包含大写字母、小写字母、数字、特殊符号中的两种。</span>
     </div>
 
     <el-form :model="form" :rules="rules" ref="ruleForm" label-width="120px" style="margin-right: 30px">
@@ -18,9 +18,12 @@
       <el-form-item label="原密码:" prop="old">
         <el-input v-model="form.old" placeholder="请输入原密码" class="security"></el-input>
       </el-form-item>
+
+      <div v-if="closable" style="font-size: 12px; text-align: right; margin-bottom: 4px; color: #0d84ff">
+        新密码至少8位,且包含大写字母、小写字母、数字、特殊符号中的两种。
+      </div>
       <el-form-item label="新密码" prop="new">
         <el-input v-model.trim="form.new"
-                  placeholder="至少8位,包含大小写字母和数字"
                   class="security"
                   show-word-limit
                   maxlength="16"
@@ -28,7 +31,6 @@
       </el-form-item>
       <el-form-item label="再次确认" prop="newConfirm">
         <el-input v-model.trim="form.newConfirm"
-                  placeholder="至少8位,包含大小写字母和数字"
                   class="security"
                   show-word-limit
                   maxlength="16"
@@ -109,7 +111,7 @@ function submit() {
     ruleForm.value.validate((valid) => {
       if (valid) {
         if (!checkPasswordStrength(form.value.new)) {
-          xcMessage.warning('密码强度太弱(至少8位,包含大小写字母和数字)')
+          xcMessage.warning('密码强度太弱(至少8位,包含大写字母、小写字母、数字、特殊符号中的两种。)')
           return
         }
 

+ 24 - 2
src/components/system/password-layer/index.ts

@@ -18,9 +18,31 @@ const changePassword = (closable: boolean = true) => {
     })
 }
 
+
 export function checkPasswordStrength(password) {
-    const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/;
-    return passwordRegex.test(password);
+    if (password.length < 8) {
+        return false
+    }
+    var upperCaseRegex = /[A-Z]/g;
+    var lowerCaseRegex = /[a-z]/g;
+    var digitRegex = /\d/g;
+    var specialCharRegex = /.*[!@#$%^&*()_,+.=?-].*/;
+
+    var matchList = [
+        upperCaseRegex.test(password),
+        lowerCaseRegex.test(password),
+        digitRegex.test(password),
+        specialCharRegex.test(password)
+    ]
+
+    var matchCount = 0;
+    matchList.forEach(match => {
+        if (match) {
+            matchCount += 1
+        }
+    })
+
+    return matchCount > 1
 }
 
 export default changePassword