zhangjie 2 vuotta sitten
vanhempi
commit
7eaae763d3

+ 7 - 4
src/modules/admin/components/ModifySchool.vue

@@ -28,13 +28,13 @@
         ></el-input> -->
         {{ modalForm.name }}
       </el-form-item>
-      <!-- <el-form-item prop="code" label="学校域名">
+      <el-form-item prop="initPassword" label="用户初始密码:">
         <el-input
-          v-model.trim="modalForm.code"
-          placeholder="请输入码"
+          v-model.trim="modalForm.initPassword"
+          placeholder="请输入码"
           clearable
         ></el-input>
-      </el-form-item> -->
+      </el-form-item>
       <el-form-item prop="logo" label="学校logo:">
         <UploadFetchFile
           ref="UploadFetchFile"
@@ -67,6 +67,7 @@
 <script>
 import { updateSchool } from "../api";
 import UploadFetchFile from "../../../components/UploadFetchFile.vue";
+import { password } from "@/plugins/formRules";
 
 const initModalForm = {
   id: "",
@@ -74,6 +75,7 @@ const initModalForm = {
   code: "",
   logo: "",
   logoMd5: "",
+  initPassword: "",
 };
 
 export default {
@@ -128,6 +130,7 @@ export default {
             },
           },
         ],
+        initPassword: password,
       },
     };
   },

+ 5 - 0
src/modules/admin/views/SchoolManage.vue

@@ -61,6 +61,11 @@
           label="accessSecret"
           width="300"
         ></el-table-column>
+        <el-table-column
+          prop="initPassword"
+          label="用户初始密码"
+          width="100"
+        ></el-table-column>
         <el-table-column
           class-name="action-column"
           label="操作"

+ 14 - 3
src/modules/base/components/ResetPwd.vue

@@ -89,7 +89,7 @@
 <script>
 import { updatePwd } from "../api";
 import { getSmsCodeForBind } from "@/modules/login/api";
-import { password, phone, smscode } from "@/plugins/formRules";
+import { password, strictPassword, phone, smscode } from "@/plugins/formRules";
 import { Base64 } from "@/plugins/crypto";
 import fetchSmsMixins from "@/modules/login/fetchSmsMixins";
 
@@ -121,6 +121,17 @@ export default {
   },
   mixins: [fetchSmsMixins],
   data() {
+    const passwordRule = [
+      ...strictPassword,
+      {
+        validator: (rule, value, callback) => {
+          if (value === this.userInfo.loginName) {
+            return callback(new Error("禁止使用用户账户号作为密码"));
+          }
+          return callback();
+        },
+      },
+    ];
     const equalToOldPswd = (rule, value, callback) => {
       if (value === this.modalForm.oldPassword) {
         callback(new Error("新旧密码不可以相同"));
@@ -146,14 +157,14 @@ export default {
         mobileNumber: phone,
         oldPassword: password,
         password: [
-          ...password,
+          ...passwordRule,
           {
             validator: equalToOldPswd,
             trigger: "change",
           },
         ],
         rePassword: [
-          ...password,
+          ...passwordRule,
           {
             validator: equalToPswd,
             trigger: "change",

+ 2 - 2
src/modules/login/views/Login.vue

@@ -137,7 +137,7 @@
 </template>
 
 <script>
-import { password, phone, smscode } from "@/plugins/formRules";
+import { strictPassword, phone, smscode } from "@/plugins/formRules";
 import { login, getSmsCode, getSchoolInfo, getAccountSmsCode } from "../api";
 import { Base64 } from "@/plugins/crypto";
 import ResetPwd from "@/modules/base/components/ResetPwd";
@@ -161,7 +161,7 @@ export default {
       },
       loginRules: {
         code: smscode,
-        password,
+        password: strictPassword,
         loginName: [
           {
             required: true,

+ 48 - 0
src/plugins/formRules.js

@@ -38,6 +38,53 @@ const password = [
     trigger: "change",
   },
 ];
+const strictPassword = [
+  {
+    required: true,
+    validator: (rule, value, callback) => {
+      if (!value) {
+        return callback(new Error(`请输入密码`));
+      }
+      // 禁止使用相同的数字或字符作为密码
+      const reg2 = /^[a-zA-Z0-9].+$/;
+      const vals = new Set(value.split(""));
+      if (reg2.test(value) && vals.size === 1) {
+        return callback(new Error(`禁止使用相同的数字或字符作为密码`));
+      }
+      // 禁止使用连续升序或降序的数字或字母作为密码
+      const valCharCodes = value.split("").map((item) => item.charCodeAt());
+      let intervals = [];
+      for (let i = 0; i < valCharCodes.length; i++) {
+        const element = valCharCodes[i];
+        if (i === 0) continue;
+        intervals.push(element - valCharCodes[i - 1]);
+      }
+      const interVals = Array.from(new Set(intervals));
+      if (
+        reg2.test(value) &&
+        interVals.length === 1 &&
+        Math.abs(interVals[0]) === 1
+      ) {
+        return callback(
+          new Error(`禁止使用连续升序或降序的数字或字母作为密码`)
+        );
+      }
+      // 密码应至少包含数字、大小写字母及特殊宇符中的两种;
+      const reg1 =
+        /^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)(?![!#$%^&*]+$)[\da-zA-Z!#$%^&*]{8,20}$/g;
+      if (!reg1.test(value)) {
+        return callback(
+          new Error(
+            `密码应至少包含数字、大小写字母及特殊宇符中的两种,长度8-20位;`
+          )
+        );
+      }
+
+      return callback();
+    },
+    trigger: "change",
+  },
+];
 
 const phone = [
   {
@@ -86,6 +133,7 @@ export {
   commonCode,
   email,
   password,
+  strictPassword,
   phone,
   smscode,
   numberValidator,