zhangjie 2 年之前
父节点
当前提交
4a2f4648e6
共有 2 个文件被更改,包括 342 次插入329 次删除
  1. 22 9
      src/modules/analysis/components/baseConfig/BlueprintConfig.vue
  2. 320 320
      src/modules/login/views/Login.vue

+ 22 - 9
src/modules/analysis/components/baseConfig/BlueprintConfig.vue

@@ -168,16 +168,20 @@ export default {
 
         return nitem;
       });
-      if (this.baseInfo.structureChange) {
-        this.uploadData = { structureChange: true };
-      } else {
-        this.uploadData = {};
-      }
     },
     toImport() {
       this.$refs.ImportFile.open();
     },
     async toUpdateExamCloudStruct() {
+      const confirm = await this.$confirm(
+        `云阅卷试卷结构和本页面设置的试卷结构不一致,请重新设置,重新设置会清除该页面之前设置过的试卷结构参数!`,
+        "提示",
+        {
+          type: "warning"
+        }
+      ).catch(() => {});
+      if (confirm !== "confirm") return;
+
       if (this.updating) return;
       this.updating = true;
 
@@ -260,11 +264,20 @@ export default {
         paperName: this.baseInfo.paperName,
         paperType: this.baseInfo.paperType
       };
-      const data = await updatePaperStruct(datas).catch(() => {});
+      let errorInfo = null;
+      await updatePaperStruct(datas).catch(error => {
+        errorInfo = error;
+      });
       this.loading = false;
-      if (!data) return;
-      this.$message.success("保存成功!");
-      this.$emit("modified");
+      if (errorInfo) {
+        if (errorInfo.code == 5100003) {
+          this.toUpdateExamCloudStruct();
+          return;
+        }
+      } else {
+        this.$message.success("保存成功!");
+        this.$emit("modified");
+      }
     }
   }
 };

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

@@ -1,320 +1,320 @@
-<template>
-  <div class="login login-box">
-    <div class="login-theme"><h2>知学知考</h2></div>
-    <div class="login-body" @keyup.enter="submit('loginForm')">
-      <div class="login-title">
-        <img v-if="schoolLogo" :src="schoolLogo" alt="学校logo" />
-        <h1 v-else>知学知考</h1>
-      </div>
-      <div class="login-form">
-        <el-form
-          v-if="IS_USERNAME_TYPE"
-          ref="loginForm"
-          :model="loginModel"
-          :rules="loginRules"
-        >
-          <el-form-item prop="loginName">
-            <el-input
-              v-model.trim="loginModel.loginName"
-              placeholder="请输入账号"
-              name="username"
-              clearable
-            >
-              <i class="icon icon-phone" slot="prefix"></i>
-            </el-input>
-          </el-form-item>
-          <el-form-item prop="password">
-            <el-input
-              type="password"
-              v-model.trim="loginModel.password"
-              placeholder="请输入密码"
-              clearable
-            >
-              <i class="icon icon-password" slot="prefix"></i>
-            </el-input>
-          </el-form-item>
-          <el-form-item prop="schoolCode"></el-form-item>
-          <el-form-item>
-            <el-button
-              class="login-submit-btn"
-              size="large"
-              type="info"
-              :disabled="isSubmit"
-              round
-              @click="submit('loginForm')"
-              >登录</el-button
-            >
-          </el-form-item>
-        </el-form>
-        <el-form v-else ref="loginForm" :model="loginModel" :rules="loginRules">
-          <el-form-item prop="mobileNumber">
-            <el-input
-              v-model.trim="loginModel.mobileNumber"
-              placeholder="请输入手机号"
-              name="mobileNumber"
-              clearable
-            >
-              <i class="icon icon-phone" slot="prefix"></i>
-            </el-input>
-          </el-form-item>
-          <el-form-item prop="code">
-            <div class="vlcode">
-              <div class="vlcode-right">
-                <el-button
-                  style="width:100%;"
-                  type="text"
-                  @click="fetchSmsCode"
-                  :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
-              class="login-submit-btn"
-              size="large"
-              type="info"
-              :disabled="isSubmit"
-              round
-              @click="submit('loginForm')"
-              >登录</el-button
-            >
-          </el-form-item>
-        </el-form>
-      </div>
-      <div class="login-action box-justify">
-        <div></div>
-        <el-button type="text" @click="switchLoginType">
-          <i>{{ switchBtnName }}</i>
-          <i class="el-icon-arrow-right"></i>
-        </el-button>
-      </div>
-    </div>
-
-    <!-- 修改密码 -->
-    <reset-pwd
-      :user-info="userInfo"
-      ref="ResetPwd"
-      @modified="resetPwdSuccess"
-    ></reset-pwd>
-  </div>
-</template>
-
-<script>
-import { password, phone, smscode } from "@/plugins/formRules";
-import { login, getSmsCode, getSchoolInfo } from "../api";
-import { Base64 } from "@/plugins/crypto";
-import ResetPwd from "@/modules/base/components/ResetPwd";
-import { ORG_CODE } from "@/constants/app";
-import fetchSmsMixins from "../fetchSmsMixins";
-
-export default {
-  name: "login",
-  components: { ResetPwd },
-  mixins: [fetchSmsMixins],
-  data() {
-    return {
-      nameWaitTime: "login",
-      smsCodeRequired: false,
-      loginModel: {
-        schoolCode: ORG_CODE,
-        loginName: "",
-        password: "",
-        code: "",
-        mobileNumber: ""
-      },
-      loginRules: {
-        code: smscode,
-        password,
-        loginName: [
-          {
-            required: true,
-            message: "请输入用户名",
-            trigger: "change"
-          }
-        ],
-        schoolCode: [
-          {
-            required: true,
-            message: "学校编码缺失",
-            trigger: "change"
-          }
-        ],
-        mobileNumber: phone
-      },
-      userInfo: {},
-      roles: [],
-      isSubmit: false,
-      schoolLogo: "",
-      loginType: "ACCOUNT"
-    };
-  },
-  mounted() {
-    this.$ls.clear();
-    this.setWaitingTime();
-    this.getSchool();
-  },
-  computed: {
-    IS_USERNAME_TYPE() {
-      return this.loginType === "ACCOUNT";
-    },
-    switchBtnName() {
-      return this.loginType === "ACCOUNT" ? "短信登录" : "账号登录";
-    }
-  },
-  methods: {
-    async getSchool() {
-      const data = await getSchoolInfo(ORG_CODE);
-      this.$ls.set("schoolLogo", data.logo);
-      this.$ls.set("schoolName", data.name);
-      this.schoolLogo = data.logo;
-    },
-    switchLoginType() {
-      this.loginType = this.loginType === "ACCOUNT" ? "PHONE" : "ACCOUNT";
-    },
-    async submit(name) {
-      const valid = await this.$refs[name].validate().catch(() => {});
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      let datas = {
-        schoolCode: this.loginModel.schoolCode,
-        type: this.loginType
-      };
-      if (this.IS_USERNAME_TYPE) {
-        datas = {
-          ...datas,
-          loginName: this.loginModel.loginName,
-          password: Base64(this.loginModel.password)
-        };
-      } else {
-        datas = {
-          ...datas,
-          code: this.loginModel.code,
-          mobileNumber: this.loginModel.mobileNumber
-        };
-      }
-      const data = await login(datas).catch(() => {});
-      this.isSubmit = false;
-      if (!data) return;
-
-      if (data.orgInfo)
-        this.$ls.set("orgId", data.orgInfo.id, this.GLOBAL.authTimeout);
-      if (data.schoolInfo)
-        this.$ls.set("schoolId", data.schoolInfo.id, this.GLOBAL.authTimeout);
-      this.$ls.set("user", data, this.GLOBAL.authTimeout);
-
-      this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
-
-      // 强制修改密码和绑定手机号
-      if (
-        data.userLoginCheckResult &&
-        (!data.userLoginCheckResult.pwdCount ||
-          !data.userLoginCheckResult.mobileNumber)
-      ) {
-        this.userInfo = {
-          ...this.loginModel,
-          ...data.userLoginCheckResult
-        };
-        this.$refs.ResetPwd.open();
-        return;
-      }
-
-      if (data.roleList && data.roleList.includes("ADMIN")) {
-        this.$router.push({
-          name: "SelectSchool"
-        });
-      } else {
-        this.$router.push({
-          name: "Home"
-        });
-      }
-    },
-    resetPwdSuccess(data) {
-      if (data.orgInfo)
-        this.$ls.set("orgId", data.orgInfo.id, this.GLOBAL.authTimeout);
-      if (data.schoolInfo)
-        this.$ls.set("schoolId", data.schoolInfo.id, this.GLOBAL.authTimeout);
-      this.$ls.set("user", data, this.GLOBAL.authTimeout);
-
-      this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
-
-      if (data.roleList && data.roleList.includes("ADMIN")) {
-        this.$router.push({
-          name: "SelectSchool"
-        });
-      } else {
-        this.$router.push({
-          name: "Home"
-        });
-      }
-    },
-    // code valid
-    checkField(field) {
-      return new Promise((resolve, reject) => {
-        this.$refs.loginForm.validateField(field, unvalid => {
-          if (unvalid) {
-            reject();
-          } else {
-            resolve();
-          }
-        });
-      });
-    },
-    async fetchSmsCode() {
-      const validAll = [
-        this.checkField("mobileNumber"),
-        this.checkField("schoolCode")
-      ];
-
-      let result = true;
-      await Promise.all(validAll).catch(() => {
-        result = false;
-      });
-
-      if (!result) return;
-
-      this.isFetchingCode = true;
-      const data = await getSmsCode({
-        schoolCode: this.loginModel.schoolCode,
-        mobileNumber: this.loginModel.mobileNumber
-      }).catch(() => {
-        this.isFetchingCode = false;
-      });
-      if (!data) return;
-
-      if (data.mobileNumber) {
-        this.$message.success(
-          `已向手机尾号【${data.mobileNumber.slice(
-            -4
-          )}】成功发送短信,请在2分钟内进行验证!`
-        );
-        this.changeContent();
-      } else {
-        this.isFetchingCode = false;
-        this.$message.error("未绑定手机号,请先绑定!");
-        // this.userInfo = {
-        //   ...data,
-        //   loginName: this.loginModel.loginName,
-        //   schoolCode: this.loginModel.schoolCode,
-        //   password: this.loginModel.password
-        // };
-        // this.$refs.ResetPwd.open();
-      }
-    }
-  }
-};
-</script>
+<template>
+  <div class="login login-box">
+    <div class="login-theme"><h2>知学知考</h2></div>
+    <div class="login-body" @keyup.enter="submit('loginForm')">
+      <div class="login-title">
+        <img v-if="schoolLogo" :src="schoolLogo" alt="学校logo" />
+        <h1 v-else>知学知考</h1>
+      </div>
+      <div class="login-form">
+        <el-form
+          v-if="IS_USERNAME_TYPE"
+          ref="loginForm"
+          :model="loginModel"
+          :rules="loginRules"
+        >
+          <el-form-item prop="loginName">
+            <el-input
+              v-model.trim="loginModel.loginName"
+              placeholder="请输入账号"
+              name="username"
+              clearable
+            >
+              <i class="icon icon-phone" slot="prefix"></i>
+            </el-input>
+          </el-form-item>
+          <el-form-item prop="password">
+            <el-input
+              type="password"
+              v-model.trim="loginModel.password"
+              placeholder="请输入密码"
+              clearable
+            >
+              <i class="icon icon-password" slot="prefix"></i>
+            </el-input>
+          </el-form-item>
+          <el-form-item prop="schoolCode"></el-form-item>
+          <el-form-item>
+            <el-button
+              class="login-submit-btn"
+              size="large"
+              type="info"
+              :disabled="isSubmit"
+              round
+              @click="submit('loginForm')"
+              >登录</el-button
+            >
+          </el-form-item>
+        </el-form>
+        <el-form v-else ref="loginForm" :model="loginModel" :rules="loginRules">
+          <el-form-item prop="mobileNumber">
+            <el-input
+              v-model.trim="loginModel.mobileNumber"
+              placeholder="请输入手机号"
+              name="mobileNumber"
+              clearable
+            >
+              <i class="icon icon-phone" slot="prefix"></i>
+            </el-input>
+          </el-form-item>
+          <el-form-item prop="code">
+            <div class="vlcode">
+              <div class="vlcode-right">
+                <el-button
+                  style="width:100%;"
+                  type="text"
+                  @click="fetchSmsCode"
+                  :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
+              class="login-submit-btn"
+              size="large"
+              type="info"
+              :disabled="isSubmit"
+              round
+              @click="submit('loginForm')"
+              >登录</el-button
+            >
+          </el-form-item>
+        </el-form>
+      </div>
+      <div class="login-action box-justify">
+        <div></div>
+        <el-button type="text" @click="switchLoginType">
+          <i>{{ switchBtnName }}</i>
+          <i class="el-icon-arrow-right"></i>
+        </el-button>
+      </div>
+    </div>
+
+    <!-- 修改密码 -->
+    <reset-pwd
+      :user-info="userInfo"
+      ref="ResetPwd"
+      @modified="resetPwdSuccess"
+    ></reset-pwd>
+  </div>
+</template>
+
+<script>
+import { password, phone, smscode } from "@/plugins/formRules";
+import { login, getSmsCode, getSchoolInfo } from "../api";
+import { Base64 } from "@/plugins/crypto";
+import ResetPwd from "@/modules/base/components/ResetPwd";
+import { ORG_CODE } from "@/constants/app";
+import fetchSmsMixins from "../fetchSmsMixins";
+
+export default {
+  name: "login",
+  components: { ResetPwd },
+  mixins: [fetchSmsMixins],
+  data() {
+    return {
+      nameWaitTime: "login",
+      smsCodeRequired: false,
+      loginModel: {
+        schoolCode: ORG_CODE,
+        loginName: "",
+        password: "",
+        code: "",
+        mobileNumber: ""
+      },
+      loginRules: {
+        code: smscode,
+        password,
+        loginName: [
+          {
+            required: true,
+            message: "请输入用户名",
+            trigger: "change"
+          }
+        ],
+        schoolCode: [
+          {
+            required: true,
+            message: "学校编码缺失",
+            trigger: "change"
+          }
+        ],
+        mobileNumber: phone
+      },
+      userInfo: {},
+      roles: [],
+      isSubmit: false,
+      schoolLogo: "",
+      loginType: "ACCOUNT"
+    };
+  },
+  mounted() {
+    this.$ls.clear();
+    this.setWaitingTime();
+    this.getSchool();
+  },
+  computed: {
+    IS_USERNAME_TYPE() {
+      return this.loginType === "ACCOUNT";
+    },
+    switchBtnName() {
+      return this.loginType === "ACCOUNT" ? "短信登录" : "账号登录";
+    }
+  },
+  methods: {
+    async getSchool() {
+      const data = await getSchoolInfo(ORG_CODE);
+      this.$ls.set("schoolLogo", data.logo);
+      this.$ls.set("schoolName", data.name);
+      this.schoolLogo = data.logo;
+    },
+    switchLoginType() {
+      this.loginType = this.loginType === "ACCOUNT" ? "PHONE" : "ACCOUNT";
+    },
+    async submit(name) {
+      const valid = await this.$refs[name].validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let datas = {
+        schoolCode: this.loginModel.schoolCode,
+        type: this.loginType
+      };
+      if (this.IS_USERNAME_TYPE) {
+        datas = {
+          ...datas,
+          loginName: this.loginModel.loginName,
+          password: Base64(this.loginModel.password)
+        };
+      } else {
+        datas = {
+          ...datas,
+          code: this.loginModel.code,
+          mobileNumber: this.loginModel.mobileNumber
+        };
+      }
+      const data = await login(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      if (data.orgInfo)
+        this.$ls.set("orgId", data.orgInfo.id, this.GLOBAL.authTimeout);
+      if (data.schoolInfo)
+        this.$ls.set("schoolId", data.schoolInfo.id, this.GLOBAL.authTimeout);
+      this.$ls.set("user", data, this.GLOBAL.authTimeout);
+
+      this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
+
+      // 强制修改密码和绑定手机号
+      if (
+        data.userLoginCheckResult &&
+        (!data.userLoginCheckResult.pwdCount ||
+          !data.userLoginCheckResult.mobileNumber)
+      ) {
+        this.userInfo = {
+          ...this.loginModel,
+          ...data.userLoginCheckResult
+        };
+        this.$refs.ResetPwd.open();
+        return;
+      }
+
+      if (data.roleList && data.roleList.includes("ADMIN")) {
+        this.$router.push({
+          name: "SelectSchool"
+        });
+      } else {
+        this.$router.push({
+          name: "Home"
+        });
+      }
+    },
+    resetPwdSuccess(data) {
+      if (data.orgInfo)
+        this.$ls.set("orgId", data.orgInfo.id, this.GLOBAL.authTimeout);
+      if (data.schoolInfo)
+        this.$ls.set("schoolId", data.schoolInfo.id, this.GLOBAL.authTimeout);
+      this.$ls.set("user", data, this.GLOBAL.authTimeout);
+
+      this.$ls.set("token", data.accessToken, this.GLOBAL.authTimeout);
+
+      if (data.roleList && data.roleList.includes("ADMIN")) {
+        this.$router.push({
+          name: "SelectSchool"
+        });
+      } else {
+        this.$router.push({
+          name: "Home"
+        });
+      }
+    },
+    // code valid
+    checkField(field) {
+      return new Promise((resolve, reject) => {
+        this.$refs.loginForm.validateField(field, unvalid => {
+          if (unvalid) {
+            reject();
+          } else {
+            resolve();
+          }
+        });
+      });
+    },
+    async fetchSmsCode() {
+      const validAll = [
+        this.checkField("mobileNumber"),
+        this.checkField("schoolCode")
+      ];
+
+      let result = true;
+      await Promise.all(validAll).catch(() => {
+        result = false;
+      });
+
+      if (!result) return;
+
+      this.isFetchingCode = true;
+      const data = await getSmsCode({
+        schoolCode: this.loginModel.schoolCode,
+        mobileNumber: this.loginModel.mobileNumber
+      }).catch(() => {
+        this.isFetchingCode = false;
+      });
+      if (!data) return;
+
+      if (data.mobileNumber) {
+        this.$message.success(
+          `已向手机尾号【${data.mobileNumber.slice(
+            -4
+          )}】成功发送短信,请在2分钟内进行验证!`
+        );
+        this.changeContent();
+      } else {
+        this.isFetchingCode = false;
+        this.$message.error("未绑定手机号,请先绑定!");
+        // this.userInfo = {
+        //   ...data,
+        //   loginName: this.loginModel.loginName,
+        //   schoolCode: this.loginModel.schoolCode,
+        //   password: this.loginModel.password
+        // };
+        // this.$refs.ResetPwd.open();
+      }
+    }
+  }
+};
+</script>