فهرست منبع

教学班级课程接口调试

zhangjie 3 سال پیش
والد
کامیت
a07509706e

+ 13 - 10
src/modules/base/api.js

@@ -151,16 +151,16 @@ export const batchDeableCourse = datas => {
 };
 // course-simple-manage
 export const courseSimpleListPage = datas => {
-  return $postParam("/api/admin/basic/course/list", datas);
+  return $postParam("/api/admin/teach/course/page", datas);
 };
 export const courseSimpleQuery = datas => {
-  return $postParam("/api/admin/basic/course/query", datas);
+  return $postParam("/api/admin/teach/course/find_basic_course", datas);
 };
 export const deleteCourseSimple = idList => {
-  return $postParam("/api/admin/basic/course/delete_batch", { idList });
+  return $postParam("/api/admin/teach/course/delete", { idList });
 };
 export const updateCourseSimple = datas => {
-  return $post("/api/admin/basic/course/save", datas);
+  return $post("/api/admin/teach/course/create", datas);
 };
 // flow-manage
 export const flowListPage = datas => {
@@ -286,13 +286,13 @@ export const updateStudent = datas => {
   return $post("/api/admin/basic/student/save", datas);
 };
 export const studentSimpleListQuery = datas => {
-  return $postParam("/api/admin/basic/student/query", datas);
+  return $postParam("/api/admin/teach/student/page", datas);
 };
 export const deleteStudentSimple = idList => {
-  return $postParam("/api/admin/basic/student/delete_batch", { idList });
+  return $postParam("/api/admin/teach/student/delete", { idList });
 };
 export const updateStudentSimple = datas => {
-  return $post("/api/admin/basic/student/save", datas);
+  return $post("/api/admin/teach/student/create", datas);
 };
 
 // clazz-manage
@@ -311,13 +311,16 @@ export const clazzQuery = datas => {
 
 // clazz-simple-manage
 export const clazzSimpleListPage = datas => {
-  return $postParam("/api/admin/basic/clazz/query", datas);
+  return $postParam("/api/admin/teach/clazz/page", datas);
+};
+export const clazzTeachCourseQuery = datas => {
+  return $postParam("/api/admin/teach/clazz/find_teach_course", datas);
 };
 export const deleteClazzSimple = idList => {
-  return $postParam("/api/admin/basic/clazz/delete_batch", { idList });
+  return $postParam("/api/admin/teach/clazz/delete", { idList });
 };
 export const updateClazzSimple = datas => {
-  return $post("/api/admin/basic/clazz/save", datas);
+  return $post("/api/admin/teach/clazz/edit", datas);
 };
 
 // semester-manage

+ 10 - 9
src/modules/base/components/ModifyClazzSimple.vue

@@ -17,19 +17,20 @@
       :key="modalForm.id"
       label-position="top"
     >
-      <el-form-item prop="clazzName" label="班级名称:">
+      <el-form-item prop="teachClazzName" label="班级名称:">
         <el-input
-          v-model.trim="modalForm.clazzName"
+          v-model.trim="modalForm.teachClazzName"
           placeholder="请输入班级名称"
           clearable
         ></el-input>
       </el-form-item>
-      <el-form-item prop="courseId" label="课程:">
+      <el-form-item prop="teachCourseId" label="课程:">
         <el-select
-          v-model="modalForm.courseId"
+          v-model="modalForm.teachCourseId"
           placeholder="课程"
           clearable
-          style="width:100%"
+          :disabled="isEdit"
+          class="width-full"
         >
           <el-option
             v-for="item in courses"
@@ -56,8 +57,8 @@ import { updateClazzSimple } from "../api";
 
 const initModalForm = {
   id: null,
-  clazzName: "",
-  courseId: ""
+  teachClazzName: "",
+  teachCourseId: ""
 };
 
 export default {
@@ -90,7 +91,7 @@ export default {
       isSubmit: false,
       modalForm: { ...initModalForm },
       rules: {
-        clazzName: [
+        teachClazzName: [
           {
             required: true,
             message: "请输入班级名称",
@@ -102,7 +103,7 @@ export default {
             trigger: "change"
           }
         ],
-        courseId: [
+        teachCourseId: [
           {
             required: true,
             message: "请选择课程",

+ 25 - 26
src/modules/base/components/ModifyClazzSimpleStudent.vue

@@ -10,6 +10,7 @@
       fullscreen
       destroy-on-close
       @open="visibleChange"
+      @close="closed"
     >
       <div class="part-box part-box-filter part-box-flex">
         <el-form
@@ -18,37 +19,30 @@
           label-width="85px"
           inline
         >
-          <template v-if="checkPrivilege('condition', 'condition')">
-            <el-form-item label="学生:">
-              <el-input
-                v-model="filter.queryParams"
-                placeholder="请输入姓名或者学号"
-              ></el-input>
-            </el-form-item>
-          </template>
+          <el-form-item label="学生:">
+            <el-input
+              v-model="filter.studentInfo"
+              placeholder="请输入姓名或者学号"
+              clearable
+            ></el-input>
+          </el-form-item>
           <el-form-item>
-            <el-button
-              v-if="checkPrivilege('button', 'select')"
-              type="primary"
-              @click="toPage(1)"
-              >查询</el-button
-            >
+            <el-button type="primary" @click="toPage(1)">查询</el-button>
           </el-form-item>
         </el-form>
         <div class="part-box-action">
           <upload-button
-            v-if="checkPrivilege('button', 'add')"
             btn-icon="el-icon-circle-plus-outline"
             btn-content="批量导入"
             btn-type="success"
             :upload-url="uploadUrl"
+            :upload-data="uploadData"
             :format="['xls', 'xlsx']"
             @upload-error="uplaodError"
             @upload-success="uploadSuccess"
           >
           </upload-button>
           <el-button
-            v-if="checkPrivilege('button', 'add')"
             type="primary"
             icon="el-icon-circle-plus-outline"
             @click="toAdd"
@@ -67,9 +61,9 @@
           ></el-table-column>
           <el-table-column prop="studentName" label="姓名"> </el-table-column>
           <el-table-column prop="studentCode" label="学号"> </el-table-column>
-          <el-table-column prop="collegeName" label="院系"> </el-table-column>
+          <el-table-column prop="belongOrgName" label="院系"> </el-table-column>
           <el-table-column prop="majorName" label="专业"> </el-table-column>
-          <el-table-column prop="clazz" label="班级"> </el-table-column>
+          <el-table-column prop="clazzName" label="班级"> </el-table-column>
           <el-table-column class-name="action-column" label="操作" width="80">
             <template slot-scope="scope">
               <el-button
@@ -124,8 +118,8 @@ export default {
     return {
       modalIsShow: false,
       filter: {
-        clazzId: "",
-        queryParams: ""
+        teachClazzId: "",
+        studentInfo: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -133,21 +127,28 @@ export default {
       studentList: [],
       curStudent: {},
       // import
-      uploadUrl: "/api/admin/basic/student/data_import",
+      uploadData: {},
+      uploadUrl: "/api/admin/teach/student/import",
       downloadUrl: "/temps/studentTemplate.xlsx",
       dfilename: "学生导入模板.xlsx"
     };
   },
   computed: {
     title() {
-      return `学生管理-${this.clazz.clazzName}`;
+      return `学生管理-${this.clazz.teachClazzName}`;
     }
   },
   methods: {
     visibleChange() {
-      this.filter.clazzId = this.clazz.id;
+      this.filter.teachClazzId = this.clazz.id;
+      this.uploadData = {
+        teachClazzId: this.clazz.id
+      };
       this.toPage(1);
     },
+    closed() {
+      this.$emit("modified");
+    },
     cancel() {
       this.modalIsShow = false;
     },
@@ -155,8 +156,6 @@ export default {
       this.modalIsShow = true;
     },
     async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
       const datas = {
         ...this.filter,
         pageNumber: this.current,
@@ -171,7 +170,7 @@ export default {
       this.getList();
     },
     toAdd() {
-      this.curStudent = {};
+      this.curStudent = { teachClazzId: this.clazz.id };
       this.$refs.ModifyStudentSimple.open();
     },
     toDelete(row) {

+ 41 - 21
src/modules/base/components/ModifyCourseSimple.vue

@@ -17,18 +17,30 @@
       :key="modalForm.id"
       label-position="top"
     >
-      <el-form-item prop="courseName" label="课程名称:">
-        <el-input
-          v-model.trim="modalForm.courseName"
-          placeholder="请输入课程名称"
+      <el-form-item prop="basicCourseId" label="课程名称:">
+        <el-select
+          class="width-full"
+          v-model="modalForm.basicCourseId"
+          placeholder="课程"
           clearable
-        ></el-input>
+          filterable
+          @change="courseChange"
+        >
+          <el-option
+            v-for="item in courses"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          >
+            <span>{{ `${item.name}(${item.code})` }}</span>
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item prop="courseCode" label="课程编码:">
+      <el-form-item prop="basicCourseCode" label="课程编码:">
         <el-input
-          v-model.trim="modalForm.courseCode"
-          placeholder="请输入课程编码"
-          clearable
+          v-model.trim="modalForm.basicCourseCode"
+          placeholder="课程编码"
+          readonly
         ></el-input>
       </el-form-item>
     </el-form>
@@ -42,12 +54,12 @@
 </template>
 
 <script>
-import { updateCourseSimple, getCode } from "../api";
+import { updateCourseSimple, getCode, courseSimpleQuery } from "../api";
 
 const initModalForm = {
   id: null,
-  courseName: "",
-  courseCode: ""
+  basicCourseId: "",
+  basicCourseCode: ""
 };
 
 export default {
@@ -73,29 +85,33 @@ export default {
       modalIsShow: false,
       isSubmit: false,
       modalForm: { ...initModalForm },
+      courses: [],
       rules: {
-        courseName: [
+        basicCourseId: [
           {
             required: true,
-            // pattern: /^[0-9a-zA-Z\u4E00-\u9FA5]{1,20}$/,
-            // message: "课程名称只能输入汉字、数字和字母,长度不能超过20",
-            message: "课程名称不能超过30个字",
-            max: 30,
+            message: "请选择课程",
             trigger: "change"
           }
         ],
-        courseCode: [
+        basicCourseCode: [
           {
             required: true,
-            pattern: /^[0-9a-zA-Z_-]{3,30}$/,
-            message: "课程编码只能由数字字母短横线组成,长度在3-30之间",
+            message: "需要课程编码",
             trigger: "change"
           }
         ]
       }
     };
   },
+  mounted() {
+    this.getCourseSimple();
+  },
   methods: {
+    async getCourseSimple() {
+      const data = await courseSimpleQuery();
+      this.courses = data || [];
+    },
     initData(val) {
       if (val.id) {
         this.modalForm = this.$objAssign(initModalForm, val);
@@ -116,13 +132,17 @@ export default {
     open() {
       this.modalIsShow = true;
     },
+    courseChange(val) {
+      const course = this.courses.find(item => item.id === val);
+      this.modalForm.basicCourseCode = course.code;
+    },
     async submit() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
 
       if (this.isSubmit) return;
       this.isSubmit = true;
-      let datas = { ...this.modalForm };
+      let datas = { basicCourseId: this.modalForm.basicCourseId };
       const data = await updateCourseSimple(datas).catch(() => {
         this.isSubmit = false;
       });

+ 2 - 5
src/modules/base/components/ModifyStudentSimple.vue

@@ -47,6 +47,7 @@ import { updateStudentSimple } from "../api";
 
 const initModalForm = {
   id: null,
+  teachClazzId: null,
   studentName: "",
   studentCode: ""
 };
@@ -105,11 +106,7 @@ export default {
   },
   methods: {
     initData(val) {
-      if (val.id) {
-        this.modalForm = this.$objAssign(initModalForm, val);
-      } else {
-        this.modalForm = { ...initModalForm };
-      }
+      this.modalForm = this.$objAssign(initModalForm, val);
     },
     visibleChange() {
       this.initData(this.instance);

+ 1 - 1
src/modules/base/router.js

@@ -126,7 +126,7 @@ export default [
     component: CourseSimpleManage
   },
   {
-    path: "/base/clazz-simple-manage/:courseId?",
+    path: "/base/clazz-simple-manage/:teachCourseId?",
     name: "ClazzSimpleManage",
     component: ClazzSimpleManage
   },

+ 34 - 15
src/modules/base/views/ClazzSimpleManage.vue

@@ -4,7 +4,11 @@
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
           <el-form-item label="课程:">
-            <el-select v-model="filter.courseId" placeholder="课程" clearable>
+            <el-select
+              v-model="filter.teachCourseId"
+              placeholder="课程"
+              filterable
+            >
               <el-option
                 v-for="item in courses"
                 :key="item.id"
@@ -17,8 +21,7 @@
           </el-form-item>
           <el-form-item label="班级名称:">
             <el-input
-              style="width: 142px;"
-              v-model.trim="filter.queryParams"
+              v-model.trim="filter.teachClazzName"
               placeholder="班级名称"
               clearable
             ></el-input>
@@ -28,6 +31,7 @@
           <el-button
             v-if="checkPrivilege('button', 'select')"
             type="primary"
+            :disabled="!filter.teachCourseId"
             @click="toPage(1)"
             >查询</el-button
           >
@@ -51,8 +55,14 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="clazzName" label="班级名称"></el-table-column>
-        <el-table-column prop="studentCount" label="学生人数"></el-table-column>
+        <el-table-column
+          prop="teachClazzName"
+          label="班级名称"
+        ></el-table-column>
+        <el-table-column
+          prop="teachStudentCount"
+          label="学生人数"
+        ></el-table-column>
         <el-table-column prop="createTime" label="创建时间">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
@@ -68,7 +78,7 @@
               >重命名</el-button
             >
             <el-button
-              v-if="checkPrivilege('link', 'edit')"
+              v-if="checkPrivilege('link', 'Window')"
               class="btn-primary"
               type="text"
               @click="toEditStudent(scope.row)"
@@ -116,7 +126,7 @@
 <script>
 import {
   clazzSimpleListPage,
-  courseSimpleQuery,
+  clazzTeachCourseQuery,
   deleteClazzSimple
 } from "../api";
 import ModifyClazzSimple from "../components/ModifyClazzSimple";
@@ -128,8 +138,8 @@ export default {
   data() {
     return {
       filter: {
-        courseId: "",
-        queryParams: ""
+        teachCourseId: "",
+        teachClazzName: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -140,11 +150,20 @@ export default {
     };
   },
   mounted() {
-    this.filter.courseId = this.$route.params.courseId;
-    this.getCourseSimple();
-    this.getList();
+    this.initData();
   },
   methods: {
+    async initData() {
+      if (this.$route.params.teachCourseId) {
+        this.filter.teachCourseId = this.$route.params.teachCourseId;
+        this.getCourseSimple();
+        this.getList();
+      } else {
+        await this.getCourseSimple();
+        this.filter.teachCourseId = this.courses[0] && this.courses[0].id;
+        this.getList();
+      }
+    },
     async getList() {
       if (!this.checkPrivilege("list", "list")) return;
 
@@ -162,11 +181,11 @@ export default {
       this.getList();
     },
     async getCourseSimple() {
-      const data = await courseSimpleQuery();
+      const data = await clazzTeachCourseQuery();
       this.courses = data || [];
     },
     toAdd() {
-      this.curRow = { courseId: this.filter.courseId };
+      this.curRow = { teachCourseId: this.filter.teachCourseId };
       this.$refs.ModifyClazzSimple.open();
     },
     toEdit(row) {
@@ -178,7 +197,7 @@ export default {
       this.$refs.ModifyClazzSimpleStudent.open();
     },
     toDelete(row) {
-      this.$confirm(`确定要删除班级【${row.clazzName}】吗?`, "提示", {
+      this.$confirm(`确定要删除班级【${row.teachClazzName}】吗?`, "提示", {
         type: "warning"
       })
         .then(async () => {

+ 3 - 10
src/modules/base/views/CourseSimpleManage.vue

@@ -5,7 +5,6 @@
         <template v-if="checkPrivilege('condition', 'condition')">
           <el-form-item label="课程名称:">
             <el-input
-              style="width: 142px;"
               v-model.trim="filter.courseName"
               placeholder="课程名称"
               clearable
@@ -50,20 +49,14 @@
         <el-table-column class-name="action-column" label="操作" width="160">
           <template slot-scope="scope">
             <el-button
-              v-if="checkPrivilege('link', 'edit')"
-              class="btn-primary"
-              type="text"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              v-if="checkPrivilege('link', 'edit')"
+              v-if="checkPrivilege('link', 'Link')"
               class="btn-primary"
               type="text"
               @click="toEditClazz(scope.row)"
               >班级管理</el-button
             >
             <el-button
+              v-if="checkPrivilege('link', 'Delete')"
               class="btn-danger"
               type="text"
               @click="toDelete(scope.row)"
@@ -146,7 +139,7 @@ export default {
       this.$router.push({
         name: "ClazzSimpleManage",
         params: {
-          courseId: row.id
+          teachCourseId: row.id
         }
       });
     },

+ 1 - 1
src/modules/base/views/StudentManage.vue

@@ -207,7 +207,7 @@ export default {
       this.$refs.ModifyStudent.open();
     },
     toBatchDelete() {
-      const valid = Object.keys(this.filter).some(key => this.filter[key]);
+      const valid = Object.values(this.filter).some(val => val);
       if (!valid) {
         this.$message.error("请设置筛选条件!");
         return;

+ 5 - 9
src/modules/card/router.js

@@ -3,36 +3,32 @@ export default [
     path: "/card/edit/:cardId?",
     name: "CardEdit",
     component: () =>
-      import(/* webpackChunkName: "CardEdit" */ "./views/CardEdit.vue")
+      import(/* webpackChunkName: "card" */ "./views/CardEdit.vue")
   },
   {
     // viewType::: view:预览,print:打印,frame:iframe嵌套
     path: "/card/preview/:cardId/:viewType",
     name: "CardPreview",
     component: () =>
-      import(/* webpackChunkName: "CardPreview" */ "./views/CardPreview.vue")
+      import(/* webpackChunkName: "card" */ "./views/CardPreview.vue")
   },
   {
     path: "/card/card-rule/preview/:cardRuleId",
     name: "CardRulePreview",
     component: () =>
-      import(
-        /* webpackChunkName: "CardRulePreview" */ "./views/CardRulePreview.vue"
-      )
+      import(/* webpackChunkName: "card" */ "./views/CardRulePreview.vue")
   },
   {
     path: "/card/free-edit/:cardId?",
     name: "CardFreeEdit",
     component: () =>
-      import(/* webpackChunkName: "CardEdit" */ "./views/CardFreeEdit.vue")
+      import(/* webpackChunkName: "card" */ "./views/CardFreeEdit.vue")
   },
   {
     // viewType::: view:预览,print:打印,frame:iframe嵌套
     path: "/card/free-preview/:cardId/:viewType",
     name: "CardFreePreview",
     component: () =>
-      import(
-        /* webpackChunkName: "CardPreview" */ "./views/CardFreePreview.vue"
-      )
+      import(/* webpackChunkName: "card" */ "./views/CardFreePreview.vue")
   }
 ];

+ 327 - 0
src/modules/login/views/Login1.vue

@@ -0,0 +1,327 @@
+<template>
+  <div class="login login-box">
+    <div class="login-theme"></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-footer 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, getSysConfig } 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: "username"
+    };
+  },
+  mounted() {
+    this.$ls.clear();
+    this.setWaitingTime();
+    this.getSchool();
+    this.getSmsCodeRequired();
+  },
+  computed: {
+    IS_USERNAME_TYPE() {
+      return this.loginType === "username";
+    },
+    switchBtnName() {
+      return this.loginType === "username" ? "短信登录" : "账号登录";
+    }
+  },
+  methods: {
+    async getSmsCodeRequired() {
+      const data = await getSysConfig("sys.code.enable");
+      this.smsCodeRequired = data && data.configValue === "true";
+    },
+    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 === "username" ? "sms" : "username";
+    },
+    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,
+        loginType: 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("loginName"),
+        this.checkField("password"),
+        this.checkField("schoolCode")
+      ];
+
+      let result = true;
+      await Promise.all(validAll).catch(() => {
+        result = false;
+      });
+
+      if (!result) return;
+
+      this.isFetchingCode = true;
+      const data = await getSmsCode({
+        loginName: this.loginModel.loginName,
+        schoolCode: this.loginModel.schoolCode,
+        password: Base64(this.loginModel.password)
+      }).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>

+ 1 - 1
src/views/Home.vue

@@ -174,7 +174,7 @@ export default {
     ...mapState("exam", ["waitTaskCount"])
   },
   created() {
-    this.initData1();
+    this.initData();
   },
   methods: {
     ...mapActions("exam", ["updateWaitTaskCount"]),