Parcourir la source

新建命题申请完成

zhangjie il y a 3 ans
Parent
commit
260448e9d2

+ 26 - 16
src/modules/exam/components/createTaskApply/CreateTaskApply.vue → src/modules/exam/components/createExamAndPrintTask/CreateTaskApply.vue

@@ -30,6 +30,7 @@
         :datas="infos"
         @next-step="toNext"
         @on-ready="compReady"
+        @data-change="dataChange"
       ></component>
     </div>
 
@@ -83,7 +84,6 @@ const STEPS_LIST = [
 ];
 
 const initExamTask = {
-  id: null,
   courseCode: "",
   courseName: "",
   paperNumber: "",
@@ -111,7 +111,6 @@ const initExamTaskDetail = {
 };
 
 const initPrintPlan = {
-  id: null,
   name: "",
   examStartTime: "",
   examEndTime: "",
@@ -239,24 +238,26 @@ export default {
     },
     prevStep() {
       if (this.isFirstStep) return;
+      this.$refs[this.currentComponent].updateData();
       this.current -= 1;
     },
     nextStep() {
       this.loading = true;
       this.$refs[this.currentComponent].checkData();
     },
-    toNext(data) {
-      console.log(data);
-      Object.entries(data).forEach(([key, val]) => {
-        this.infos[key] = Object.assign(this.infos[key], val);
-      });
-
+    toNext() {
       if (this.isLastStep) {
         this.submit();
       } else {
         this.current += 1;
       }
     },
+    dataChange(data) {
+      console.log(data);
+      Object.entries(data).forEach(([key, val]) => {
+        this.infos[key] = Object.assign(this.infos[key], val);
+      });
+    },
     compReady(type = false) {
       this.loading = type;
     },
@@ -285,16 +286,25 @@ export default {
         return;
       }
 
-      const datas = {
-        examTaskContent: {
-          examTask: this.infos.examTask,
-          examTaskDetail: this.infos.examTaskDetail,
-          examPrintPlan: this.infos.printPlan,
-          examDetail: this.infos.printTask
-        }
+      let examPrintPlan = deepCopy(this.infos.printPlan);
+      delete examPrintPlan.templateSources;
+      examPrintPlan.variableContent = JSON.stringify(
+        examPrintPlan.variableContent
+      );
+      examPrintPlan.ordinaryContent = JSON.stringify(
+        examPrintPlan.ordinaryContent
+      );
+
+      const examTaskContent = {
+        examTask: this.infos.examTask,
+        examTaskDetail: this.infos.examTaskDetail,
+        examPrintPlan,
+        examDetail: this.infos.printTask
       };
 
-      const data = await teacherSubmitTaskApply(datas).catch(() => {});
+      const data = await teacherSubmitTaskApply({
+        examTaskContent: JSON.stringify(examTaskContent)
+      }).catch(() => {});
       this.loading = false;
       if (!data) return;
       this.$message.success("提交成功!");

+ 9 - 2
src/modules/exam/components/createTaskApply/InfoExamTask.vue → src/modules/exam/components/createExamAndPrintTask/InfoExamTask.vue

@@ -366,10 +366,17 @@ export default {
         return;
       }
 
-      this.$emit("next-step", {
+      this.updateData();
+      this.$emit("next-step");
+    },
+    getData() {
+      return {
         examTask: this.examTask,
         examTaskDetail: this.getTaskDetailData()
-      });
+      };
+    },
+    updateData() {
+      this.$emit("data-change", this.getData());
     },
     // exam-task-detail edit
     addAtachment() {

+ 8 - 3
src/modules/exam/components/createTaskApply/InfoPrintPlan.vue → src/modules/exam/components/createExamAndPrintTask/InfoPrintPlan.vue

@@ -333,6 +333,10 @@ export default {
         return;
       }
 
+      this.updateData();
+      this.$emit("next-step");
+    },
+    getData() {
       const printPlan = { ...this.modalForm };
       const transformInfo = item => {
         const templateId = item.templateId.join();
@@ -354,9 +358,10 @@ export default {
         transformInfo
       );
 
-      this.$emit("next-step", {
-        printPlan
-      });
+      return { printPlan };
+    },
+    updateData() {
+      this.$emit("data-change", this.getData());
     },
     selectAll(selected) {
       if (selected) {

+ 33 - 22
src/modules/exam/components/createTaskApply/InfoPrintTask.vue → src/modules/exam/components/createExamAndPrintTask/InfoPrintTask.vue

@@ -156,6 +156,12 @@ export default {
   },
   methods: {
     async initData() {
+      this.modalForm = Object.assign(this.modalForm, {
+        paperNumber: this.datas.examTask.paperNumber,
+        courseName: this.datas.examTask.courseName,
+        courseCode: this.datas.examTask.courseCode
+      });
+
       await this.getExtendFields();
       await this.getPrintHouses();
       await this.getClassList();
@@ -166,7 +172,9 @@ export default {
       this.createTime = [...this.curCreateTime];
 
       const data = this.datas.printTask;
-      this.tableData = data.list;
+      this.tableData =
+        data.courseCode === this.datas.examTask.courseCode ? data.list : [];
+
       if (data.examStartTime && data.examEndTime) {
         this.createTime = [data.examStartTime, data.examEndTime];
         this.createDate = getTimeDatestamp(data.examStartTime);
@@ -174,12 +182,6 @@ export default {
         this.modalForm.examEndTime = this.createTime[1];
       }
 
-      this.modalForm = Object.assign(this.modalForm, {
-        paperNumber: this.datas.examTask.paperNumber,
-        courseName: this.datas.examTask.courseName,
-        courseCode: this.datas.examTask.courseCode
-      });
-
       if (this.tableData.length) {
         this.updateUnusedClassList();
       } else {
@@ -205,39 +207,48 @@ export default {
       let errorMsg = [];
       this.tableData.forEach(row => {
         let errorFields = [];
-
-        let extendFields = this.extendFields.map(field => {
-          let info = { ...field };
-          info.value = row.extends[field.code];
-          if (!info.value) {
+        this.extendFields.forEach(field => {
+          if (!row.extends[field.code]) {
             errorFields.push(field.name);
           }
-          return info;
         });
-
-        row.extendFields = JSON.stringify(extendFields);
-        row.examStartTime = this.modalForm.examStartTime;
-        row.examEndTime = this.modalForm.examEndTime;
-
         if (errorFields.length) {
           errorMsg.push(
             `考试对象${row.className}中,${errorFields.join("、")}必须填写`
           );
         }
       });
-
       if (errorMsg.length) {
         this.$message.error(errorMsg.join("。"));
         this.$emit("on-ready");
         return;
       }
 
-      this.$emit("next-step", {
+      this.updateData();
+      this.$emit("next-step");
+    },
+    getData() {
+      this.tableData.forEach(row => {
+        let extendFields = this.extendFields.map(field => {
+          let info = { ...field };
+          info.value = row.extends[field.code];
+          return info;
+        });
+
+        row.extendFields = JSON.stringify(extendFields);
+        row.examStartTime = this.modalForm.examStartTime;
+        row.examEndTime = this.modalForm.examEndTime;
+      });
+
+      return {
         printTask: {
           ...this.modalForm,
           list: this.tableData
         }
-      });
+      };
+    },
+    updateData() {
+      this.$emit("data-change", this.getData());
     },
     buildTableData() {
       this.tableData = this.classList.map(clazz => {
@@ -297,7 +308,7 @@ export default {
     async getClassList() {
       this.classList = [];
       const data = await listTaskApplyClass({
-        courseCode: this.modalForm.courseCode
+        courseCode: this.datas.examTask.courseCode
       });
       if (!data) return;
 

+ 0 - 0
src/modules/exam/components/createTaskApply/ModifyPrintTask.vue → src/modules/exam/components/createExamAndPrintTask/ModifyPrintTask.vue


+ 19 - 1
src/modules/exam/views/ExamTaskManage.vue

@@ -113,6 +113,14 @@
         >
           新建命题任务
         </el-button>
+        <el-button
+          v-if="checkPrivilege('button', 'ExamTaskApplyManage')"
+          icon="el-icon-circle-plus-outline"
+          type="primary"
+          @click="toAddApply"
+        >
+          新建命题申请
+        </el-button>
       </div>
     </div>
 
@@ -227,12 +235,18 @@
       ref="BatchAddExamTask"
       @modified="taskModified"
     ></batch-add-exam-task>
+    <!-- createExamAndPrintTask -->
+    <create-task-apply
+      ref="CreateTaskApply"
+      @modified="taskModified"
+    ></create-task-apply>
   </div>
 </template>
 
 <script>
 import ModifyExamTask from "../components/ModifyExamTask";
 import BatchAddExamTask from "../components/BatchAddExamTask";
+import CreateTaskApply from "../components/createExamAndPrintTask/CreateTaskApply";
 import { ABLE_TYPE, EXAM_TASK_STATUS } from "@/constants/enumerate";
 import pickerOptions from "@/constants/datePickerOptions";
 import { examTaskListPage, ableExamTask } from "../api";
@@ -242,7 +256,8 @@ export default {
   name: "exam-task-manage",
   components: {
     ModifyExamTask,
-    BatchAddExamTask
+    BatchAddExamTask,
+    CreateTaskApply
   },
   data() {
     return {
@@ -340,6 +355,9 @@ export default {
     toBatchAdd() {
       this.$refs.BatchAddExamTask.open();
     },
+    toAddApply() {
+      this.$refs.CreateTaskApply.open();
+    },
     toAdd() {
       this.curExamTask = {};
       this.editType = "ADD";

+ 1 - 2
src/modules/exam/views/TaskApplyManage.vue

@@ -191,8 +191,7 @@
 
 <script>
 import ModifyTaskApply from "../components/ModifyTaskApply";
-import CreateTaskApply from "../components/createTaskApply/CreateTaskApply";
-// import CreateTaskApply from "../components/CreateTaskApply";
+import CreateTaskApply from "../components/CreateTaskApply";
 import { AUDITING_STATUS } from "@/constants/enumerate";
 import pickerOptions from "@/constants/datePickerOptions";
 import { taskApplyListPage, cancelOrRestartTaskApply } from "../api";