Переглянути джерело

命题申请选择考试对象调整

zhangjie 2 роки тому
батько
коміт
8d7475e8da

+ 3 - 9
src/constants/printTemplateData.js

@@ -19,19 +19,19 @@ export const SIGN_DATA = {
       enable: true
     },
     {
-      code: "examTime",
+      code: "examPlace",
       name: "考试地点",
       disabled: true,
       enable: true
     },
     {
-      code: "examTime",
+      code: "examCount",
       name: "应考人数",
       disabled: true,
       enable: true
     },
     {
-      code: "examTime",
+      code: "actualExamCount",
       name: "实考人数",
       disabled: true,
       enable: true
@@ -66,12 +66,6 @@ export const SIGN_DATA = {
 };
 
 export const PACKAGE_DATA = [
-  {
-    code: "examDate",
-    name: "考试日期",
-    disabled: true,
-    enable: true
-  },
   {
     code: "examTime",
     name: "考试时间",

+ 33 - 2
src/modules/base/components/ModifyPrintTemplate.vue

@@ -62,7 +62,7 @@
       <el-form-item
         v-if="modalForm.classify === 'SIGN'"
         label="显示字段:"
-        required
+        prop="fields"
       >
         <el-checkbox
           v-for="field in signDatas.header"
@@ -83,7 +83,7 @@
       <el-form-item
         v-else-if="modalForm.classify === 'PACKAGE'"
         label="显示字段:"
-        required
+        prop="fields"
       >
         <el-checkbox
           v-for="field in packageDatas"
@@ -165,6 +165,22 @@ export default {
     }
   },
   data() {
+    const fieldsValidator = (rule, value, callback) => {
+      if (this.modalForm.classify === "PACKAGE") {
+        if (!this.packageDatas.some(item => item.enable)) {
+          return callback(new Error("请选择显示字段"));
+        }
+        return callback();
+      } else {
+        if (
+          !this.signDatas.header.some(item => item.enable) ||
+          !this.signDatas.body.some(item => item.enable)
+        ) {
+          return callback(new Error("请选择显示字段"));
+        }
+        return callback();
+      }
+    };
     return {
       modalIsShow: false,
       isSubmit: false,
@@ -199,6 +215,13 @@ export default {
             message: "请上传模板文件",
             trigger: "change"
           }
+        ],
+        fields: [
+          {
+            required: true,
+            validator: fieldsValidator,
+            trigger: "change"
+          }
         ]
       },
       TEMPLATE_TYPE,
@@ -255,6 +278,14 @@ export default {
       let datas = {
         ...this.modalForm
       };
+      if (this.modalForm.classify === "PACKAGE") {
+        datas.displayRange = this.packageDatas;
+      } else {
+        datas.displayRange = {
+          basic: this.signDatas.header,
+          table: this.signDatas.body
+        };
+      }
       const data = await updateTemplate(datas).catch(() => {});
       this.isSubmit = false;
       if (!data) return;

+ 35 - 14
src/modules/exam/components/createExamAndPrintTask/InfoPrintTask.vue

@@ -107,7 +107,6 @@
             btn-content="批量导入"
             btn-type="success"
             :upload-url="uploadUrl"
-            :upload-data="uploadData"
             :format="['xls', 'xlsx']"
             accept=".xls,.xlsx"
             @valid-error="validError"
@@ -117,7 +116,7 @@
           <el-button
             v-if="checkPrivilege('button', 'ExamTaskStudentObject')"
             type="primary"
-            :disabled="studentUploaded && tableData.length"
+            :disabled="studentUploaded && !!tableData.length"
             @click="toAdd"
             >新增考试对象</el-button
           >
@@ -273,9 +272,6 @@ export default {
       createTime: [],
       // import
       uploadUrl: "/api/admin/exam/task/exam_task_exam_student_import",
-      uploadData: {
-        examObjectType: "IMPORT_STUDENT"
-      },
       downloadUrl: "/temps/studentTemplate.xlsx",
       dfilename: "学生导入模板.xlsx",
       studentUploaded: false
@@ -395,7 +391,7 @@ export default {
       return Promise.resolve(true);
     },
     updateData() {
-      const tableList = this.tableData.map(row => {
+      const tableData = this.tableData.map(row => {
         let nrow = { ...row };
         let extendFields = this.extendFields.map(field => {
           let info = { ...field };
@@ -412,7 +408,7 @@ export default {
       this.updateTaskInfo({
         infoPrintTask: {
           ...this.modalForm,
-          list: tableList
+          list: tableData
         }
       });
     },
@@ -484,7 +480,7 @@ export default {
       let modalFormData = { ...this.modalForm };
       delete modalFormData.printHouseId;
       let data = {
-        id: "",
+        id: this.$randomCode(),
         examPlace: "",
         examRoom: "",
         classId: "",
@@ -514,9 +510,8 @@ export default {
         examTaskStudentObjectParamList.push(...item.children);
       });
       let tableRow = this.$objAssign(this.getInitTableRow(), {
-        id: this.$randomCode(),
-        classId: selectedStudents.map(item => item.classId).join(),
-        className: selectedStudents.map(item => item.className).join(),
+        classId: selectedStudents.map(item => item.clazzId).join(),
+        className: selectedStudents.map(item => item.clazzName).join(),
         backupCount: this.infoExamPrintPlan.backupCount,
         studentCount: examTaskStudentObjectParamList.length,
         examTaskStudentObjectParamList
@@ -549,10 +544,36 @@ export default {
     },
     uploadSuccess(res) {
       this.studentUploaded = true;
-      console.log(res.data);
       this.$message.success("导入成功!");
-      // this.getStudents("BASIC_CLAZZ_STUDENT");
-      // const selectedUsers = this.parseStudentData(res.data);
+      this.$refs.ModifyExamStudent.clearTypeData();
+
+      const initRow = this.getInitTableRow();
+      this.tableData = res.data.map(item => {
+        let examTaskStudentObjectParamList = [];
+        item.examTaskStudentObjectResultList.forEach(elem => {
+          elem.studentInfoList.forEach(std => {
+            examTaskStudentObjectParamList.push({
+              ...std,
+              studentClazzType: elem.studentClazzType
+            });
+          });
+        });
+        let tableRow = this.$objAssign(initRow, {
+          classId: item.examTaskStudentObjectResultList
+            .map(item => item.clazzId)
+            .join(),
+          className: item.examTaskStudentObjectResultList
+            .map(item => item.clazzName)
+            .join(),
+          examRoom: item.examRoom,
+          examPlace: item.examPlace,
+          backupCount: this.infoExamPrintPlan.backupCount,
+          studentCount: examTaskStudentObjectParamList.length,
+          examTaskStudentObjectParamList
+        });
+
+        return tableRow;
+      });
     }
   }
 };

+ 18 - 18
src/modules/exam/components/createExamAndPrintTask/ModifyExamStudent.vue

@@ -98,6 +98,7 @@ export default {
     return {
       modalIsShow: false,
       examObjectType: "TEACH_CLAZZ_STUDENT",
+      basicCourseId: null,
       EXAM_OBJECT_TYPE,
       dataTree: {
         TEACH_CLAZZ_STUDENT: [],
@@ -118,20 +119,18 @@ export default {
       let datas = {
         examObjectType: examObjectType || this.examObjectType
       };
-      if (this.examObjectType === "TEACH_CLAZZ_STUDENT")
+      if (datas.examObjectType === "TEACH_CLAZZ_STUDENT")
         datas.basicCourseId = this.courseId;
       const data = await uploadOrFindExamTaskStudent(datas);
-      this.userTree = this.dataTree[
-        this.examObjectType
-      ] = this.parseStudentData(data);
+      this.dataTree[datas.examObjectType] = this.parseStudentData(data);
     },
     parseStudentData(data) {
       return data.map(item => {
         let nitem = {
           id: item.clazzId,
           label: item.clazzName,
-          classId: item.clazzId,
-          className: item.clazzName,
+          clazzId: item.clazzId,
+          clazzName: item.clazzName,
           studentClazzType: item.studentClazzType,
           children: []
         };
@@ -151,19 +150,20 @@ export default {
         return nitem;
       });
     },
-    selectMenu(val) {
+    async selectMenu(val) {
       this.examObjectType = val;
       this.$refs.UserTree.setCheckedKeys([]);
-      if (val === "IMPORT_STUDENT") return;
 
       this.selectedUsers = [];
 
-      if (this.dataTree[val].length) {
-        this.userTree = this.dataTree[val];
-        this.updateUserTreeDisableInfo();
-      } else {
-        this.getStudents();
+      if (!this.dataTree[val].length) {
+        await this.getStudents();
       }
+      this.userTree = this.dataTree[val];
+      this.updateUserTreeDisableInfo();
+    },
+    clearTypeData(type = "BASIC_CLAZZ_STUDENT") {
+      this.dataTree[type] = [];
     },
     checkChange() {
       // console.log("check click");
@@ -195,12 +195,12 @@ export default {
       this.checkChange();
     },
     async visibleChange() {
-      if (this.examObjectType === "TEACH_CLAZZ_STUDENT") {
-        await this.getStudents();
+      if (this.basicCourseId !== this.courseId) {
+        this.basicCourseId = this.courseId;
+        await this.getStudents("TEACH_CLAZZ_STUDENT");
       }
-      this.selectedUsers = [];
-      this.$refs.UserTree.setCheckedKeys([]);
-      this.updateUserTreeDisableInfo();
+
+      this.selectMenu(this.examObjectType);
     },
     updateUserTreeDisableInfo() {
       this.userTree.forEach(item => {