Forráskód Böngészése

feat: 客观题按顺序对应位置

zhangjie 2 hónapja
szülő
commit
d990837af0
1 módosított fájl, 26 hozzáadás és 5 törlés
  1. 26 5
      src/views/base/track-export/useDraw.ts

+ 26 - 5
src/views/base/track-export/useDraw.ts

@@ -11,6 +11,7 @@ import {
   Question,
   MarkArea,
   SplitConfig,
+  StudentObjectiveInfo,
 } from '@/api/types/task';
 import { TrackConfigType } from '@/store/modules/app/types';
 import { PictureTypeEnum, PICTURE_TYPE } from '@/constants/enumerate';
@@ -142,6 +143,7 @@ export default function useDraw(drawConfig: DrawConfig) {
   let trackData = [] as TrackItemType[];
   let originImgs = [] as ImageItem[];
   let trackFiles = [] as ImageItem[];
+  const questionNoDict = {} as Record<string, string>;
   let curStudentId = '';
   const hasOrigin = trackConfig.pictureType.includes('origin');
   const hasTrack = trackConfig.pictureType.includes('track');
@@ -257,6 +259,7 @@ export default function useDraw(drawConfig: DrawConfig) {
           };
         });
         recogDatas = objectiveData.sheetUrls.map((item) => item.recogData);
+        updateQuestionNoDict(objectiveData.answers, recogDatas);
       });
 
       funcs.push(async () => {
@@ -339,6 +342,26 @@ export default function useDraw(drawConfig: DrawConfig) {
     return images;
   }
 
+  function updateQuestionNoDict(
+    answers: StudentObjectiveInfo['answers'],
+    recogs: string[]
+  ) {
+    const recogList = recogs.map(
+      (data) => JSON.parse(window.atob(data)) as PaperRecogData
+    );
+    let qindex = 0;
+    recogList.forEach((recog) => {
+      recog.question.forEach((question) => {
+        question.fill_result.forEach((result) => {
+          const qno = `${result.main_number}_${result.sub_number}`;
+          const { mainNumber, subNumber } = answers[qindex];
+          questionNoDict[qno] = `${mainNumber}_${subNumber}`;
+          qindex++;
+        });
+      });
+    });
+  }
+
   async function parseDrawList() {
     trackData = [];
 
@@ -822,9 +845,6 @@ export default function useDraw(drawConfig: DrawConfig) {
 
   // 获取题型的评卷区
   function parseQuestionAreas(questions: QuestionItem[]) {
-    if (!questions.length || !cardData?.length || !markAreaList.length)
-      return [];
-
     return cardData.length
       ? parseCardQuestionAreas(questions)
       : parseMarkAreaQuestionAreas(questions);
@@ -963,8 +983,9 @@ export default function useDraw(drawConfig: DrawConfig) {
           offsetLt[0];
         const tagTop = fillPositions[0][1] - offsetLt[1];
 
-        const { answer, isRight } =
-          answerMap[`${result.main_number}_${result.sub_number}`] || {};
+        const answerQno =
+          questionNoDict[`${result.main_number}_${result.sub_number}`];
+        const { answer, isRight } = answerMap[answerQno] || {};
 
         answerTags.push({
           type: 'text',