Selaa lähdekoodia

主观题检查调整

zhangjie 1 vuosi sitten
vanhempi
commit
d209fde37c

+ 34 - 14
src/features/check/CommonMarkBody.vue

@@ -51,7 +51,7 @@
 import { onMounted, onUnmounted, reactive, watch, watchEffect } from "vue";
 import { store } from "@/store/store";
 import MarkDrawTrack from "../mark/MarkDrawTrack.vue";
-import type { SliceImage } from "@/types";
+import type { SliceImage, Track } from "@/types";
 import { useTimers } from "@/setups/useTimers";
 import { loadImage } from "@/utils/utils";
 import { dragImage } from "../mark/use/draggable";
@@ -148,14 +148,30 @@ watch(
   { deep: true }
 );
 
+const colors = ["red", "blue", "gray"];
+let colorMap = {};
+function addTrackColorAttr(tList: Track[]): Track[] {
+  let userIds: (number | undefined)[] = tList
+    .map((v) => v.userId)
+    .filter((x) => !!x);
+  userIds = Array.from(new Set(userIds));
+
+  userIds.forEach((mid, index) => {
+    // 双评的时候保证同一个人的轨迹颜色是一致的
+    colorMap[mid] = colorMap[mid] || colors[index] || "gray";
+  });
+  const isByMultMark = Object.keys(colorMap).length > 1;
+
+  tList = tList.map((item) => {
+    item.color = colorMap[item.userId] || "gray";
+    item.isByMultMark = isByMultMark;
+    return item;
+  });
+  return tList;
+}
+
 async function processImage() {
   if (!store.currentTask) return;
-  let markResult = store.currentTask.markResult;
-  if (hasMarkResultToRender) {
-    // check if have MarkResult for currentTask
-    if (!markResult) return;
-  }
-
   const images = [];
   const urls = store.currentTask.sheetUrls || [];
   for (const url of urls) {
@@ -167,16 +183,18 @@ async function processImage() {
   theFinalHeight = Math.max(...images.map((i) => i.naturalHeight));
   sliceImagesWithTrackList.splice(0);
 
+  let trackLists = store.currentTask.questionList
+    .map((q) => addTrackColorAttr(q.trackList))
+    .flat();
+  let tagLists = store.currentTask.specialTagList ?? [];
+  tagLists = addTrackColorAttr(tagLists);
+
+  let accumTopHeight = 0;
+  let accumBottomHeight = 0;
   for (const url of urls) {
     const indexInSliceUrls = urls.indexOf(url) + 1;
     const image = images[indexInSliceUrls - 1];
-
-    const trackLists = hasMarkResultToRender
-      ? markResult.trackList
-      : store.currentTask.questionList.map((q) => q.trackList).flat();
-    const tagLists = hasMarkResultToRender
-      ? markResult.specialTagList ?? []
-      : store.currentTask.specialTagList ?? [];
+    accumBottomHeight += image.naturalHeight;
 
     const thisImageTrackList = trackLists.filter(
       (t) => t.offsetIndex === indexInSliceUrls
@@ -195,7 +213,9 @@ async function processImage() {
       width: (image.naturalWidth / maxImageWidth) * 100 + "%",
       dx: 0,
       dy: 0,
+      accumTopHeight,
     });
+    accumTopHeight = accumBottomHeight;
   }
 }
 

+ 10 - 13
src/features/check/SubjectiveAnswer.vue

@@ -131,7 +131,6 @@ import AllPaperModal from "../mark/AllPaperModal.vue";
 import SheetViewModal from "../mark/SheetViewModal.vue";
 import SpecialTagModal from "../mark/SpecialTagModal.vue";
 import ShortCutModal from "../mark/ShortCutModal.vue";
-import { calcSum } from "@/utils/utils";
 import MarkBoardTrackDialog from "../mark/MarkBoardTrackDialog.vue";
 import vls from "@/utils/storage";
 
@@ -193,6 +192,7 @@ async function updateSetting() {
   } else {
     settingRes.data.uiSetting = JSON.parse(settingRes.data.uiSetting);
   }
+  settingRes.data.doubleTrack = true;
   store.setting = settingRes.data;
 }
 
@@ -307,24 +307,21 @@ const getMarkData = () => {
 
     trackList.forEach((track) => {
       const qno = `${track.mainNumber * 1000}${track.subNumber}`;
-      qScore[qno] = (qScore[qno] || 0) + track.score;
+      if (!qScore[qno]) {
+        qScore[qno] = {
+          mainNumber: track.mainNumber,
+          subNumber: track.subNumber,
+          score: 0,
+        };
+      }
+      qScore[qno].score += track.score;
     });
 
-    let qScoreList = Object.entries(qScore).map(([qno, score]) => {
-      return {
-        qno: qno * 1,
-        score,
-      };
-    });
-    qScoreList.sort((a, b) => a.qno - b.qno);
-    const scoreList = qScoreList.map((item) => item.score);
-
     return {
       ...commomData,
       ...item,
       trackList,
-      scoreList,
-      markerScore: calcSum(scoreList),
+      markerScore: Object.values(qScore),
       studentId: store.currentTask.studentId,
     };
   });

+ 5 - 3
src/styles/page.less

@@ -15,7 +15,9 @@
   left: 0;
   bottom: 0;
   right: 0;
-  overflow: hidden;
+  overflow: auto;
+  min-width: var(--app-min-width);
+  min-height: 600px;
 
   .mark-main {
     height: calc(100vh - 56px - 58px);
@@ -59,7 +61,7 @@
   }
 
   .header-menu {
-    min-width: 56px;
+    min-width: 79px;
     padding: 18px 15px;
     text-align: center;
     cursor: pointer;
@@ -169,7 +171,7 @@
 // mark-tool
 .mark-tool {
   .flex-between;
-  padding: 10px 10px 7px;
+  padding: 8px 10px 5px;
   background: #ffffff;
   border-bottom: 1px solid #e5e5e5;