Jelajahi Sumber

feat: 主观题检查

zhangjie 3 bulan lalu
induk
melakukan
46c6bb0081

+ 1 - 3
src/features/check-subjective/CheckSubjective.vue

@@ -149,7 +149,7 @@ import ModalShortCut from "../mark/modals/ModalShortCut.vue";
 
 // composables
 import useTask from "./composables/useTask";
-import useSetting from "./composables/useSetting";
+import useSetting from "../mark/composables/useSetting";
 import useTaskWatch from "../mark/composables/useTaskWatch";
 
 const {
@@ -253,8 +253,6 @@ const validateScore = (markResult: MarkResult) => {
   markResult.scoreList.forEach((score: number, index: number) => {
     if (!markStore.currentTask) return;
     const question = markStore.currentTask.questionList[index]!;
-    if (!question.selfMark || question.problem) return;
-
     let error;
     if (!isNumber(score)) {
       error = `${question.mainNumber}-${question.subNumber}${

+ 0 - 2
src/features/check-subjective/MarkBody.vue

@@ -9,7 +9,5 @@ import MarkBodyBase from "./MarkBodyBase.vue";
 
 import useMakeTrack from "../mark/composables/useMakeTrack";
 
-defineEmits(["error"]);
-
 const { makeTrack } = useMakeTrack();
 </script>

+ 0 - 53
src/features/check-subjective/composables/useSetting.ts

@@ -1,53 +0,0 @@
-import { useMarkStore } from "@/store";
-import { getSetting, updateUISetting } from "@/api/markPage";
-import { debounce, isEmpty } from "lodash-es";
-import { watch } from "vue";
-
-export default function useSetting() {
-  const markStore = useMarkStore();
-
-  async function updateSetting() {
-    const settingRes = await getSetting();
-    if (isEmpty(settingRes.data.uiSetting)) {
-      settingRes.data.uiSetting = {
-        "answer.paper.scale": 1,
-        "score.board.collapse": false,
-        "normal.mode": "keyboard",
-        "score.fontSize.scale": 1,
-        "paper.modal": false,
-        "answer.modal": false,
-        "minimap.modal": false,
-        "specialTag.modal": false,
-        "shortCut.modal": false,
-      };
-    } else {
-      settingRes.data.uiSetting = JSON.parse(settingRes.data.uiSetting);
-    }
-    settingRes.data.sheetConfig = settingRes.data.sheetConfig
-      ? JSON.parse(settingRes.data.sheetConfig)
-      : [];
-    settingRes.data.doubleTrack = true;
-    markStore.setting = settingRes.data;
-  }
-
-  const debouncedUpdateUISetting = debounce(() => {
-    updateUISetting(
-      markStore.setting.mode,
-      markStore.setting.uiSetting,
-      markStore.setting.questionModel
-    ).catch((e) => console.log("保存设置出错", e));
-  }, 3000);
-
-  watch(
-    () => [markStore.setting.uiSetting, markStore.setting.mode],
-    () => {
-      debouncedUpdateUISetting();
-    },
-    { deep: true }
-  );
-
-  return {
-    updateSetting,
-    debouncedUpdateUISetting,
-  };
-}

+ 8 - 6
src/features/check-subjective/composables/useSliceTrack.ts

@@ -33,16 +33,18 @@ export default function useSliceTrack() {
 
     const trackLists = (markStore.currentTask.questionList || [])
       .map((q) => {
-        const tList = q.markerTrackList;
         return q.headerTrackList?.length
           ? addHeaderTrackColorAttr(q.headerTrackList)
-          : addTrackColorAttr(tList, q.groupNumber);
+          : addTrackColorAttr(q.markerTrackList || []);
+      })
+      .flat();
+    const tagLists = (markStore.currentTask.questionList || [])
+      .map((q) => {
+        return q.headerTagList?.length
+          ? addSpecialTrackColorAttr(q.headerTagList)
+          : addSpecialTrackColorAttr(q.markerTagList || []);
       })
       .flat();
-    let tagLists = markStore.isTrackMode
-      ? markStore.currentTask.markerTagList ?? []
-      : [];
-    tagLists = addSpecialTrackColorAttr(tagLists);
 
     let accumTopHeight = 0;
     let accumBottomHeight = 0;

+ 0 - 14
src/features/check-subjective/composables/useTask.ts

@@ -42,23 +42,9 @@ export default function useTask(ids: string[]) {
     currentStudentId = studentId;
   }
 
-  // let taskQuestionInfo = $ref({});
-  // function updateTaskGroupInfo() {
-  //   taskQuestionInfo = {};
-  //   if (!markStore.currentTask) return;
-
-  //   markStore.currentTask.questionList.forEach((question) => {
-  //     const qno = `${question.mainNumber * 1000}${question.subNumber}`;
-  //     taskQuestionInfo[qno] = {
-  //       score: question.markerScore,
-  //     };
-  //   });
-  // }
-
   return {
     getNextStudent,
     getPreviousStudent,
-    // taskQuestionInfo,
     studentIds,
     currentStudentId,
     currentIndex,

+ 6 - 11
src/features/check-subjective/composables/useTrackColor.ts

@@ -2,9 +2,9 @@ import type { SpecialTag, Track } from "@/types";
 
 export default function useTrackColor() {
   const colors = ["red", "blue", "green"];
-  const colorMap: Record<number, Record<number, string>> = {};
+  const colorMap: Record<number, string> = {};
 
-  function addTrackColorAttr(tList: Track[], groupNumber: number): Track[] {
+  function addTrackColorAttr(tList: Track[]): Track[] {
     let userIds: (number | undefined)[] = tList
       .map((v) => v.userId)
       .filter((x) => !!x);
@@ -16,12 +16,10 @@ export default function useTrackColor() {
       if (item.headerMarkScore) {
         item.color = "green";
       } else {
-        if (!colorMap[groupNumber]) colorMap[groupNumber] = {};
-        if (!colorMap[groupNumber][uid]) {
-          colorMap[groupNumber][uid] =
-            colors[Object.keys(colorMap[groupNumber]).length] || "green";
+        if (!colorMap[uid]) {
+          colorMap[uid] = colors[Object.keys(colorMap).length] || "green";
         }
-        item.color = colorMap[groupNumber][uid];
+        item.color = colorMap[uid];
       }
       item.isByMultMark = isByMultMark;
       return item;
@@ -31,10 +29,7 @@ export default function useTrackColor() {
 
   function addSpecialTrackColorAttr(tList: SpecialTag[]): SpecialTag[] {
     return tList.map((item) => {
-      item.color =
-        colorMap[item.groupNumber] && colorMap[item.groupNumber][item.markerId]
-          ? colorMap[item.groupNumber][item.markerId]
-          : "green";
+      item.color = colorMap[item.markerId] || "green";
       return item;
     });
   }

+ 4 - 2
src/features/mark/composables/useSliceTrack.ts

@@ -214,11 +214,13 @@ export default function useSliceTrack(hasMarkResultToRender = false) {
     const trackLists = hasMarkResultToRender
       ? markResult.markerTrackList
       : (markStore.currentTask.questionList || [])
-          .map((q) => q.markerTrackList)
+          .map((q) => q.markerTrackList || [])
           .flat();
     const tagLists = hasMarkResultToRender
       ? markResult.markerTagList ?? []
-      : markStore.currentTask.markerTagList ?? [];
+      : (markStore.currentTask.questionList || [])
+          .map((q) => q.markerTagList || [])
+          .flat();
     for (const url of markStore.currentTask.sliceUrls) {
       for (const config of splitConfigPairs) {
         const indexInSliceUrls =