Jelajahi Sumber

fix: 普通阅卷复核轨迹问题

zhangjie 1 Minggu lalu
induk
melakukan
8b272b2cb1

+ 12 - 1
src/features/check-subjective/composables/useSliceTrack.ts

@@ -15,11 +15,22 @@ export default function useSliceTrack() {
 
   async function processImage() {
     if (!markStore.currentTask) return;
+
+    markStore.currentTaskSliceImages = {};
+
     const images = [];
     const urls = markStore.currentTask.sheetUrls || [];
-    for (const url of urls) {
+    for (let i = 0; i < urls.length; i++) {
+      const url = urls[i];
       const image = await loadImage(url);
       images.push(image);
+
+      if (!markStore.currentTaskSliceImages[i + 1]) {
+        markStore.currentTaskSliceImages[i + 1] = {
+          width: image.naturalWidth,
+          height: image.naturalHeight,
+        };
+      }
     }
 
     maxSliceWidth.value = Math.max(...images.map((i) => i.naturalWidth));

+ 2 - 3
src/features/mark/composables/useMakeTrack.ts

@@ -260,15 +260,14 @@ export default function useMakeTrack() {
     // 将轨迹更新到渲染轨迹中
     markStore.sliceImagesWithTrackList.forEach((item) => {
       if (item.indexInSliceUrls !== area.i) return;
-
       if (
         checkPointInArea(
           { x: track.offsetX, y: track.offsetY },
           {
             x: item.dx,
             y: item.dy,
-            w: item.sliceImageWidth,
-            h: item.sliceImageHeight,
+            w: item.sliceImageWidth || item.originalImageWidth,
+            h: item.sliceImageHeight || item.originalImageHeight,
           }
         )
       ) {

+ 50 - 0
src/features/mark/scoring/MarkBoardKeyBoard.vue

@@ -363,6 +363,56 @@ onUnmounted(() => {
   document.removeEventListener("keydown", numberKeyListener);
 });
 
+function clearAllMarksOfCurrentQuetion(cQuestion: Question | undefined) {
+  const currentQuestion = cQuestion || markStore.currentQuestion;
+  // 只要清除分数,就当做修改了
+  hasModifyScore.value = true;
+
+  if (!markStore.currentTask?.markResult || !currentQuestion) return;
+
+  const qno = `${currentQuestion.mainNumber}_${currentQuestion.subNumber}`;
+  markStore.currentTaskModifyQuestion[qno] = true;
+
+  const markResult = markStore.currentTask.markResult;
+  markStore.removeScoreTracks = markResult.markerTrackList.filter(
+    (q) =>
+      q.mainNumber === currentQuestion?.mainNumber &&
+      q.subNumber === currentQuestion?.subNumber
+  );
+  markResult.markerTrackList = markResult.markerTrackList.filter(
+    (q) =>
+      q.mainNumber !== currentQuestion?.mainNumber ||
+      q.subNumber !== currentQuestion?.subNumber
+  );
+  const { __index } = currentQuestion;
+  markResult.scoreList[__index] = null;
+}
+
+function aiAbnormalHandle() {
+  if (!props.isCheckAnswer || !markStore.currentTask) return;
+
+  let firstAbnormalQuestion: Question | null = null;
+  markStore.currentTask.questionList.forEach((question) => {
+    if (question.problem || isArbitrated(question) || !question.selfMark)
+      return;
+
+    if (question.markerScore === -1) {
+      clearAllMarksOfCurrentQuetion(question);
+      if (!firstAbnormalQuestion) firstAbnormalQuestion = question;
+    }
+  });
+
+  if (firstAbnormalQuestion) chooseQuestion(firstAbnormalQuestion);
+}
+
+watch(
+  () => markStore.currentTask,
+  () => {
+    aiAbnormalHandle();
+  },
+  { immediate: true }
+);
+
 // const scrollToQuestion = (question: Question) => {
 //   const node = document.querySelector(
 //     `#q-${question.mainNumber}-${question.subNumber}`

+ 51 - 1
src/features/mark/scoring/MarkBoardMouse.vue

@@ -132,7 +132,7 @@
 </template>
 
 <script setup lang="ts">
-import { ref } from "vue";
+import { ref, watch } from "vue";
 import type { Question } from "@/types";
 import { useMarkStore } from "@/store";
 import useAutoChooseFirstQuestion from "../composables/useAutoChooseFirstQuestion";
@@ -209,6 +209,56 @@ function questionScoreSteps(question: Question) {
   return steps;
 }
 
+function clearAllMarksOfCurrentQuetion(cQuestion: Question | undefined) {
+  const currentQuestion = cQuestion || markStore.currentQuestion;
+  // 只要清除分数,就当做修改了
+  hasModifyScore.value = true;
+
+  if (!markStore.currentTask?.markResult || !currentQuestion) return;
+
+  const qno = `${currentQuestion.mainNumber}_${currentQuestion.subNumber}`;
+  markStore.currentTaskModifyQuestion[qno] = true;
+
+  const markResult = markStore.currentTask.markResult;
+  markStore.removeScoreTracks = markResult.markerTrackList.filter(
+    (q) =>
+      q.mainNumber === currentQuestion?.mainNumber &&
+      q.subNumber === currentQuestion?.subNumber
+  );
+  markResult.markerTrackList = markResult.markerTrackList.filter(
+    (q) =>
+      q.mainNumber !== currentQuestion?.mainNumber ||
+      q.subNumber !== currentQuestion?.subNumber
+  );
+  const { __index } = currentQuestion;
+  markResult.scoreList[__index] = null;
+}
+
+function aiAbnormalHandle() {
+  if (!props.isCheckAnswer || !markStore.currentTask) return;
+
+  let firstAbnormalQuestion: Question | null = null;
+  markStore.currentTask.questionList.forEach((question) => {
+    if (question.problem || isArbitrated(question) || !question.selfMark)
+      return;
+
+    if (question.markerScore === -1) {
+      clearAllMarksOfCurrentQuetion(question);
+      if (!firstAbnormalQuestion) firstAbnormalQuestion = question;
+    }
+  });
+
+  if (firstAbnormalQuestion) chooseQuestion(firstAbnormalQuestion);
+}
+
+watch(
+  () => markStore.currentTask,
+  () => {
+    aiAbnormalHandle();
+  },
+  { immediate: true }
+);
+
 function submit() {
   emit("submit");
 }