zhangjie 1 год назад
Родитель
Сommit
5ed6524c52

+ 16 - 5
src/modules/mark/components/ScoreCheckDetail.vue

@@ -266,10 +266,12 @@
 <script>
 import { scoreDetailListPage } from "../api";
 import SimpleImagePreview from "@/components/SimpleImagePreview";
+import markMinxin from "../markMinxin";
 
 export default {
   name: "score-check-detail",
   components: { SimpleImagePreview },
+  mixins: [markMinxin],
   props: {
     instance: {
       type: Object,
@@ -343,13 +345,22 @@ export default {
     handleSelectionChange(val) {
       this.multipleSelection = val;
     },
-    toBatchCheck() {
+    toBatchCheck(type) {
       if (!this.multipleSelection.length) return;
       // TODO:
+      const studentIds = this.multipleSelection.map((item) => item.studentId);
+      if (type === "objective") {
+        this.toMarkObjectiveAnswer(studentIds);
+      } else {
+        this.toMarkSubjectiveAnswer(studentIds);
+      }
     },
     toCheckQuestion(row, type) {
-      console.log(row, type);
-      // TODO:
+      if (type === "objective") {
+        this.toMarkObjectiveAnswer([row.studentId]);
+      } else {
+        this.toMarkSubjectiveAnswer([row.studentId]);
+      }
     },
     // img view
     toViewSheetPaper(row) {
@@ -358,8 +369,8 @@ export default {
       this.selectImage(this.curImageIndex);
       this.$refs.SimpleImagePreview.open();
     },
-    async toViewTrack() {
-      // TODO:
+    async toViewTrack(row) {
+      this.toMarkTrack(row.studentId);
     },
     selectImage(index) {
       this.curImage = this.imageList[index];

+ 4 - 2
src/modules/mark/components/ScoreClassDetail.vue

@@ -160,10 +160,12 @@
 import { scoreDetailListPage, scoreClassDetailScoreExport } from "../api";
 import SimpleImagePreview from "@/components/SimpleImagePreview";
 import { downloadByApi } from "@/plugins/download";
+import markMinxin from "../markMinxin";
 
 export default {
   name: "score-class-detail",
   components: { SimpleImagePreview },
+  mixins: [markMinxin],
   props: {
     instance: {
       type: Object,
@@ -243,8 +245,8 @@ export default {
       this.$message.success("下载成功!");
     },
     // img view
-    async toViewTrack() {
-      // TODO:
+    async toViewTrack(row) {
+      this.toMarkTrack(row.studentId);
     },
     toViewSheetPaper(row) {
       this.curImageIndex = 0;

+ 5 - 1
src/modules/mark/components/markDetail/MarkDetail.vue

@@ -30,7 +30,11 @@
       </el-button>
     </div>
 
-    <component :is="currentComponent" :base-info="instance"></component>
+    <component
+      :is="currentComponent"
+      :base-info="instance"
+      @to-menu="selectMenu"
+    ></component>
 
     <div slot="footer"></div>
   </el-dialog>

+ 55 - 9
src/modules/mark/components/markDetail/MarkDetailArbitration.vue

@@ -4,11 +4,16 @@
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <el-form-item label="评阅题目">
           <el-select
-            v-model="filter.groupQuestion"
+            v-model="filter.groupNumber"
             placeholder="评阅题目"
             clearable
           >
-            <el-option :value="1">班级1</el-option>
+            <el-option
+              v-for="group in questions"
+              :key="group.groupNumber"
+              :value="group.groupNumber"
+              :label="group.groupQuestions"
+            ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label-width="0px">
@@ -19,7 +24,7 @@
         <el-button
           type="primary"
           :disabled="!multipleSelection.length"
-          @click="toDone(multipleSelection)"
+          @click="toBatchDone(multipleSelection)"
         >
           批量处理
         </el-button>
@@ -36,6 +41,7 @@
           type="selection"
           width="55"
           align="center"
+          @selectable="rowSelectable"
         ></el-table-column>
         <el-table-column prop="studentName" label="姓名" min-width="100">
         </el-table-column>
@@ -79,7 +85,7 @@
             <el-button
               class="btn-primary"
               type="text"
-              @click="toDone([scope.row])"
+              @click="toDone(scope.row)"
               >处理</el-button
             >
           </template>
@@ -103,10 +109,12 @@
 </template>
 
 <script>
-import { markArbitrationListPage } from "../../api";
+import { markArbitrationListPage, markGroupQuestions } from "../../api";
+import markMinxin from "../../markMinxin";
 
 export default {
   name: "mark-detail-arbitration",
+  mixins: [markMinxin],
   props: {
     baseInfo: {
       type: Object,
@@ -118,19 +126,35 @@ export default {
   data() {
     return {
       filter: {
-        groupQuestion: "",
+        groupNumber: "",
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
       multipleSelection: [],
+      questions: [],
     };
   },
+  computed: {
+    selectGroupNumber() {
+      return this.multipleSelection[0]?.groupNumber;
+    },
+  },
   mounted() {
+    this.filter.groupNumber = this.$ls.get("preset-groupNumber", "");
+    this.$ls.remove("preset-groupNumber");
+    this.getQuestions();
     this.toPage(1);
   },
   methods: {
+    async getQuestions() {
+      const res = await markGroupQuestions({
+        examId: this.baseInfo.examId,
+        paperNumber: this.baseInfo.paperNumber,
+      });
+      this.questions = res || [];
+    },
     async getList() {
       const datas = {
         ...this.filter,
@@ -150,12 +174,34 @@ export default {
     search() {
       this.toPage(1);
     },
+    rowSelectable(row) {
+      return (
+        !this.selectGroupNumber || this.selectGroupNumber === row.groupNumber
+      );
+    },
     handleSelectionChange(val) {
       this.multipleSelection = val;
     },
-    toDone(data) {
-      // TODO: 处理
-      console.log(data);
+    toDone(row) {
+      this.toMarkArbitrate({ arbitrateId: row.id });
+    },
+    toBatchDone() {
+      if (!this.multipleSelection.length) return;
+
+      if (
+        this.multipleSelection.some(
+          (item) => item.groupNumber !== this.selectGroupNumber
+        )
+      ) {
+        this.$message.error("只能批量处理同一分组的数据");
+        return;
+      }
+
+      this.toMarkArbitrate({
+        examId: this.baseInfo.examId,
+        paperNumber: this.baseInfo.paperNumber,
+        groupNumber: this.selectGroupNumber,
+      });
     },
   },
 };

+ 21 - 20
src/modules/mark/components/markDetail/MarkDetailIssue.vue

@@ -13,7 +13,12 @@
             placeholder="评阅题目"
             clearable
           >
-            <el-option :value="1">班级1</el-option>
+            <el-option
+              v-for="group in questions"
+              :key="group.groupNumber"
+              :value="group.groupNumber"
+              :label="group.groupQuestions"
+            ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="状态">
@@ -39,13 +44,6 @@
           type="primary"
           :disabled="!multipleSelection.length"
           @click="toBatchReset"
-        >
-          重置
-        </el-button>
-        <el-button
-          type="primary"
-          :disabled="!multipleSelection.length"
-          @click="toDone(multipleSelection)"
         >
           批量处理
         </el-button>
@@ -115,13 +113,7 @@
             <el-button
               class="btn-primary"
               type="text"
-              @click="toSimpleReset(scope.row)"
-              >重置</el-button
-            >
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toDone([scope.row])"
+              @click="toSimpleReset([scope.row])"
               >处理</el-button
             >
           </template>
@@ -145,7 +137,11 @@
 </template>
 
 <script>
-import { markIssueListPage, markIssueReset } from "../../api";
+import {
+  markIssueListPage,
+  markIssueReset,
+  markGroupQuestions,
+} from "../../api";
 
 export default {
   name: "mark-detail-issue",
@@ -169,14 +165,23 @@ export default {
       size: this.GLOBAL.pageSize,
       total: 0,
       dataList: [],
+      questions: [],
       multipleSelection: [],
       chartData: {},
     };
   },
   mounted() {
+    this.getQuestions();
     this.toPage(1);
   },
   methods: {
+    async getQuestions() {
+      const res = await markGroupQuestions({
+        examId: this.baseInfo.examId,
+        paperNumber: this.baseInfo.paperNumber,
+      });
+      this.questions = res || [];
+    },
     async getList() {
       const datas = {
         ...this.filter,
@@ -230,10 +235,6 @@ export default {
       this.$message.success("操作成功!");
       this.getList();
     },
-    toDone(data) {
-      // TODO: 处理
-      console.log(data);
-    },
   },
 };
 </script>

+ 26 - 10
src/modules/mark/components/markDetail/MarkDetailMarker.vue

@@ -2,18 +2,18 @@
   <div class="mark-detail-marker">
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="班级">
-          <el-select v-model="filter.className" placeholder="班级" clearable>
-            <el-option :value="1">班级1</el-option>
-          </el-select>
-        </el-form-item>
         <el-form-item label="评阅题目">
           <el-select
-            v-model="filter.groupQuestion"
+            v-model="filter.groupNumber"
             placeholder="评阅题目"
             clearable
           >
-            <el-option :value="1">班级1</el-option>
+            <el-option
+              v-for="group in questions"
+              :key="group.groupNumber"
+              :value="group.groupNumber"
+              :label="group.groupQuestions"
+            ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="评卷员">
@@ -158,6 +158,7 @@ import {
   markMarkerReset,
   markMarkerUnbind,
   markMarkerRecycle,
+  markGroupQuestions,
 } from "../../api";
 import ModifyMarkerTaskCount from "./ModifyMarkerTaskCount.vue";
 import ModifyMarkerBind from "./ModifyMarkerBind.vue";
@@ -176,8 +177,7 @@ export default {
   data() {
     return {
       filter: {
-        groupQuestion: "",
-        className: "",
+        groupNumber: "",
         loginName: "",
       },
       current: 1,
@@ -187,14 +187,25 @@ export default {
       curRow: {},
       curIds: [],
       curData: {},
+      questions: [],
       multipleSelection: [],
       downloading: false,
     };
   },
   mounted() {
+    this.filter.groupNumber = this.$ls.get("preset-groupNumber", "");
+    this.$ls.remove("preset-groupNumber");
+    this.getQuestions();
     this.toPage(1);
   },
   methods: {
+    async getQuestions() {
+      const res = await markGroupQuestions({
+        examId: this.baseInfo.examId,
+        paperNumber: this.baseInfo.paperNumber,
+      });
+      this.questions = res || [];
+    },
     async getList() {
       const datas = {
         ...this.filter,
@@ -218,10 +229,15 @@ export default {
       this.multipleSelection = val.map((item) => item.markUserGroupId);
     },
     toBind() {
+      if (!this.filter.groupNumber) {
+        this.$message.error("请选择评阅题目");
+        return;
+      }
+
       this.curData = {
         examId: this.baseInfo.examId,
         paperNumber: this.baseInfo.paperNumber,
-        // TODO: groupNumber
+        groupNumber: this.filter.groupNumber,
       };
       this.$refs.ModifyMarkerBind.open();
     },

+ 5 - 5
src/modules/mark/components/markDetail/MarkDetailProgress.vue

@@ -231,6 +231,7 @@ export default {
         pageSize: this.size,
       };
       const data = await markProgressClassListPage(datas);
+      if (!data) return;
       this.classList = data.records;
       this.total = data.total;
     },
@@ -239,13 +240,12 @@ export default {
       this.getList();
     },
     toArbitrate(row) {
-      console.log(row);
-      this.curRow = row;
-      // TODO:去仲裁管理
+      this.$ls.set("preset-groupNumber", row.groupNumber);
+      this.$emit("to-menu", "arbitration");
     },
     toMarker(row) {
-      // TODO:去评卷员管理
-      console.log(row);
+      this.$ls.set("preset-groupNumber", row.groupNumber);
+      this.$emit("to-menu", "marker");
     },
     async toExport() {
       if (this.downloading) return;

+ 6 - 7
src/modules/mark/components/markDetail/MarkDetailQuality.vue

@@ -4,7 +4,7 @@
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <el-form-item label="评阅题目">
           <el-select
-            v-model="filter.groupQuestion"
+            v-model="filter.groupNumber"
             placeholder="评阅题目"
             clearable
           >
@@ -12,8 +12,8 @@
               v-for="group in questions"
               :key="group.groupNumber"
               :value="group.groupNumber"
-              >{{ group.groupQuestions }}</el-option
-            >
+              :label="group.groupQuestions"
+            ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="评卷员">
@@ -130,7 +130,7 @@ export default {
   data() {
     return {
       filter: {
-        groupQuestion: "",
+        groupNumber: "",
         loginName: "",
       },
       current: 1,
@@ -185,17 +185,16 @@ export default {
       await markQualityUpdate({
         examId: this.baseInfo.examId,
         paperNumber: this.baseInfo.paperNumber,
-        // groupNumber
+        groupNumber: this.filter.groupNumber || undefined,
       });
       this.$message.success("操作成功!");
       this.getList();
     },
     toViewLine() {
-      // TODO: 评卷员,阅卷题目必选
       this.chartData = {
         examId: this.baseInfo.examId,
         paperNumber: this.baseInfo.paperNumber,
-        // groupNumber
+        groupNumber: this.filter.groupNumber || undefined,
       };
       this.$refs.QualityChartDialog.open();
     },

+ 5 - 5
src/modules/mark/components/markParam/MarkParamObjectiveAnswer.vue

@@ -193,11 +193,11 @@ export default {
 
       // 多选题
       if (row.questionType === 2) {
-        if (row.answer.length <= 1) {
-          row.error = true;
-          row.errMsg = `答案必须为多个`;
-          return;
-        }
+        // if (row.answer.length <= 1) {
+        //   row.error = true;
+        //   row.errMsg = `答案必须为多个`;
+        //   return;
+        // }
         if (row.answer.split("").some((item) => !validAnswers.includes(item))) {
           row.error = true;
           row.errMsg = `只能输入${validAnswers}中的字符`;

+ 33 - 0
src/modules/mark/markMinxin.js

@@ -0,0 +1,33 @@
+export default {
+  methods: {
+    toMarkMark(data) {
+      this.$ls.set("mark", {
+        examId: data.examId,
+        paperNumber: data.paperNumber,
+        groupNumber: data.groupNumber,
+      });
+      this.openPage("/mark/mark");
+    },
+    toMarkArbitrate(data) {
+      // paperNumber, groupNumber, examId, arbitrateId
+      this.$ls.set("arbitrate", data);
+      this.openPage("/mark/arbitrate");
+    },
+    toMarkTrack(studentId) {
+      this.$ls.set("check-students", studentId);
+      this.openPage("/mark/track/student");
+    },
+    toMarkObjectiveAnswer(studentIds) {
+      this.$ls.set("check-students", studentIds);
+      this.openPage("/mark/check/objective-answer");
+    },
+    toMarkSubjectiveAnswer(studentIds) {
+      this.$ls.set("check-students", studentIds);
+      this.openPage("/mark/check/subjective-answer");
+    },
+    openPage(url) {
+      // window.location.href = url;
+      window.open(url);
+    },
+  },
+};

+ 3 - 7
src/modules/mark/views/MarkEntrance.vue

@@ -93,9 +93,11 @@
 
 <script>
 import { markTaskListPage } from "../api";
+import markMinxin from "../markMinxin";
 
 export default {
   name: "mark-entrance",
+  mixins: [markMinxin],
   data() {
     return {
       filter: {
@@ -132,13 +134,7 @@ export default {
       this.toPage(1);
     },
     toMark(row) {
-      this.$ls.set("mark", {
-        examId: row.examId,
-        paperNumber: row.paperNumber,
-        groupNumber: row.groupNumber,
-      });
-      window.location.href = "/mark/mark";
-      // TODO:去阅卷
+      this.toMarkMark(row);
     },
   },
 };