zhangjie 2 lat temu
rodzic
commit
f99ac86bff

+ 7 - 2
src/modules/admin/views/SchoolMenuManage.vue

@@ -25,6 +25,9 @@
 
     <div class="part-box part-box-pad">
       <el-form class="mb-2" label-width="80px">
+        <el-form-item label="用户/密码模式是否开启短信验证" label-width="225px">
+          <el-switch v-model="modalForm.accountSmsVerify"> </el-switch>
+        </el-form-item>
         <el-form-item label="PDF格式">
           <el-select
             v-model="modalForm.pdfSize"
@@ -71,7 +74,8 @@ export default {
       fetching: false,
       sysPdfSize: [],
       modalForm: {
-        pdfSize: []
+        pdfSize: [],
+        accountSmsVerify: false
       },
       defaultProps: {
         label: "name"
@@ -106,6 +110,7 @@ export default {
       this.fetching = false;
 
       this.modalForm.pdfSize = data.pdfSize || [...this.sysPdfSize];
+      this.modalForm.accountSmsVerify = data.accountSmsVerify;
       const privilegeIds = data.privilegeIdList || [];
       this.$refs.PrivilegeSet.buildTableData(privilegeIds);
     },
@@ -126,7 +131,7 @@ export default {
         schoolId: this.schoolId,
         privilegeIds: privilegeIds,
         ...this.modalForm
-      });
+      }).catch(() => {});
       this.loading = false;
       if (!res) return;
 

+ 3 - 0
src/modules/login/api.js

@@ -6,6 +6,9 @@ export const login = datas => {
 export const getSmsCode = datas => {
   return $post("/api/admin/common/get_verify_code", datas);
 };
+export const getAccountSmsCode = datas => {
+  return $post("/api/admin/common/get_verify_code_by_account", datas);
+};
 export const getSmsCodeForBind = datas => {
   return $post("/api/admin/common/get_verify_code_for_bind", datas);
 };

+ 63 - 3
src/modules/login/views/Login.vue

@@ -33,6 +33,29 @@
               <i class="icon icon-password" slot="prefix"></i>
             </el-input>
           </el-form-item>
+          <el-form-item v-if="accountSmsVerify" prop="code">
+            <div class="vlcode">
+              <div class="vlcode-right">
+                <el-button
+                  style="width:100%;"
+                  type="text"
+                  @click="fetchAccountSmsCode"
+                  :disabled="isFetchingCode"
+                  >+{{ codeContent }}</el-button
+                >
+              </div>
+              <div class="vlcode-left">
+                <el-input
+                  v-model.trim="loginModel.code"
+                  placeholder="请输入手机验证码"
+                  name="code"
+                  clearable
+                >
+                  <i class="icon icon-checkcode" slot="prefix"></i>
+                </el-input>
+              </div>
+            </div>
+          </el-form-item>
           <el-form-item prop="schoolCode"></el-form-item>
           <el-form-item>
             <el-button
@@ -94,7 +117,7 @@
           </el-form-item>
         </el-form>
       </div>
-      <div class="login-action box-justify">
+      <div v-if="!accountSmsVerify" class="login-action box-justify">
         <div></div>
         <el-button type="text" @click="switchLoginType">
           <i>{{ switchBtnName }}</i>
@@ -115,7 +138,7 @@
 
 <script>
 import { password, phone, smscode } from "@/plugins/formRules";
-import { login, getSmsCode, getSchoolInfo } from "../api";
+import { login, getSmsCode, getSchoolInfo, getAccountSmsCode } from "../api";
 import { Base64 } from "@/plugins/crypto";
 import ResetPwd from "@/modules/base/components/ResetPwd";
 import { ORG_CODE } from "@/constants/app";
@@ -159,7 +182,8 @@ export default {
       roles: [],
       isSubmit: false,
       schoolLogo: "",
-      loginType: "ACCOUNT"
+      loginType: "ACCOUNT",
+      accountSmsVerify: false
     };
   },
   mounted() {
@@ -181,6 +205,7 @@ export default {
       this.$ls.set("schoolLogo", data.logo);
       this.$ls.set("schoolName", data.name);
       this.schoolLogo = data.logo;
+      this.accountSmsVerify = data.accountSmsVerify;
     },
     switchLoginType() {
       this.loginType = this.loginType === "ACCOUNT" ? "PHONE" : "ACCOUNT";
@@ -201,6 +226,7 @@ export default {
           loginName: this.loginModel.loginName,
           password: Base64(this.loginModel.password)
         };
+        if (this.accountSmsVerify) datas.code = this.loginModel.code;
       } else {
         datas = {
           ...datas,
@@ -318,6 +344,40 @@ export default {
         // };
         // this.$refs.ResetPwd.open();
       }
+    },
+    async fetchAccountSmsCode() {
+      const validAll = [
+        this.checkField("loginName"),
+        this.checkField("schoolCode"),
+        this.checkField("password")
+      ];
+
+      let result = true;
+      await Promise.all(validAll).catch(() => {
+        result = false;
+      });
+
+      if (!result) return;
+
+      this.isFetchingCode = true;
+      const data = await getAccountSmsCode({
+        schoolCode: this.loginModel.schoolCode,
+        loginName: this.loginModel.loginName,
+        password: Base64(this.loginModel.password)
+      }).catch(() => {
+        this.isFetchingCode = false;
+      });
+      if (!data) return;
+
+      if (data) {
+        this.$message.success(
+          `已向手机尾号【${data.slice(-4)}】成功发送短信,请在2分钟内进行验证!`
+        );
+        this.changeContent();
+      } else {
+        this.isFetchingCode = false;
+        this.$message.error("未绑定手机号!");
+      }
     }
   }
 };