Browse Source

feat: 评卷参数分班阅调整

zhangjie 11 months ago
parent
commit
66d00c005b
1 changed files with 56 additions and 1 deletions
  1. 56 1
      src/modules/mark/components/markParam/MarkParamClass.vue

+ 56 - 1
src/modules/mark/components/markParam/MarkParamClass.vue

@@ -27,6 +27,18 @@
           </template>
         </el-table-column>
       </el-table>
+      <div class="tips-info tips-error">
+        <template v-if="groupInfo.length <= 1">
+          <p v-if="unsignData.length">
+            未分配班级:{{ unsignData.map((item) => item.className).join() }}
+          </p>
+        </template>
+        <template v-else>
+          <p v-for="item in unsignData" :key="item.className">
+            {{ item.content }}
+          </p>
+        </template>
+      </div>
     </div>
     <div class="mark-footer">
       <el-button type="primary" :disabled="loading" @click="submit"
@@ -61,10 +73,11 @@ export default {
       classList: [],
       selectedClassIds: [],
       loading: false,
+      unsignData: [],
     };
   },
   computed: {
-    ...mapState("markParam", ["basicInfo"]),
+    ...mapState("markParam", ["basicInfo", "groupInfo"]),
   },
   mounted() {
     this.initData();
@@ -78,6 +91,8 @@ export default {
       const res = await markClassMarkerList(params);
       this.dataList = res.markerClass || [];
       this.classList = res.classNames || [];
+
+      this.updateUnsignData();
     },
     toSelectClass(row) {
       this.curRow = row;
@@ -86,6 +101,46 @@ export default {
     },
     classSelected(markerClassList) {
       this.curRow.markerClassList = markerClassList;
+
+      this.updateUnsignData();
+    },
+    updateUnsignData() {
+      this.unsignData = this.classList
+        .map((className) => {
+          const markIds = this.dataList
+            .filter((row) => row.markerClassList.include(className))
+            .map((row) => row.mark.id);
+
+          const unsignGroups = this.groupInfo
+            .filter(
+              (group) =>
+                !group.markers.some((marker) => markIds.includes(marker.id))
+            )
+            .map((group) => {
+              return {
+                id: group.id,
+                groupNumber: group.groupNumber,
+                question: group.questions
+                  .map((q) => `${q.mainNumber}-${q.subNumber}`)
+                  .join(),
+              };
+            });
+
+          const nrow = {
+            className,
+            unsignGroups,
+            content: "",
+          };
+          if (unsignGroups.length) {
+            const groupCont = unsignGroups
+              .map((group) => group.question)
+              .join(" ");
+            nrow.content = `${className},${groupCont},未分配评卷员`;
+          }
+
+          return nrow;
+        })
+        .filter((item) => item.unsignGroups.length);
     },
     async submit() {
       if (this.loading) return;