Prechádzať zdrojové kódy

feat: 客观题答案展示

zhangjie 1 rok pred
rodič
commit
fa70e9e47a

+ 14 - 7
src/features/check/ObjectiveAnswer.vue

@@ -73,8 +73,8 @@
             :style="{ width: answerPaperScale, fontSize: answerPaperFontSize }"
           >
             <img
-              draggable="false"
               id="mark-body-paper"
+              draggable="false"
               :src="curImageUrl"
               :style="{
                 transform:
@@ -230,7 +230,7 @@ const curImageUrl = $computed(() =>
 let student: StudentObjectiveInfo | null = $ref(null);
 /** 后台数据错误,停止整个页面的流程 */
 let dataError = $ref(false);
-let answerMap: Record<string, string> = {};
+let answerMap: Record<string, { answer: string; isRight: boolean }> = {};
 
 interface AnswerTagType {
   mainNumber: number;
@@ -238,7 +238,7 @@ interface AnswerTagType {
   answer: string;
   style: Record<string, string>;
 }
-let answerTags = $ref([]);
+let answerTags = $ref<AnswerTagType[]>([]);
 let optionsBlocks = $ref([]);
 
 const answersComputed = $computed(() => {
@@ -292,7 +292,7 @@ async function getStudent(studentId: string) {
     throw new Error("取学生信息出错: " + res.message);
   }
 
-  const stu = res.data;
+  const stu = res.data as StudentObjectiveInfo;
   // stu.sheetUrls = [
   //   { index: 1, url: "/1-1.jpg" },
   //   { index: 2, url: "/1-2.jpg" },
@@ -303,7 +303,10 @@ async function getStudent(studentId: string) {
 
   answerMap = {};
   stu.answers.forEach((item) => {
-    answerMap[`${item.mainNumber}_${item.subNumber}`] = item.answer;
+    answerMap[`${item.mainNumber}_${item.subNumber}`] = {
+      answer: item.answer,
+      isRight: item.answer === item.standardAnswer,
+    };
   });
 
   return stu;
@@ -404,17 +407,21 @@ function paperLoad() {
         offsetLt[0];
       const tagTop = fillPositions[0][1] - offsetLt[1];
 
+      const { answer, isRight } =
+        answerMap[`${result.main_number}_${result.sub_number}`] || {};
+
       answerTags.push({
         mainNumber: result.main_number,
         subNumber: result.sub_number,
-        answer: answerMap[`${result.main_number}_${result.sub_number}`],
+        answer,
         style: {
           height: ((100 * tagSize) / naturalHeight).toFixed(4) + "%",
           fontSize: ((100 * 20) / tagSize).toFixed(4) + "%",
           left: ((100 * tagLeft) / naturalWidth).toFixed(4) + "%",
           top: ((100 * tagTop) / naturalHeight).toFixed(4) + "%",
           position: "absolute",
-          color: "#f53f3f",
+          color: isRight ? "#05b575" : "#f53f3f",
+          fontWeight: 600,
           lineHeight: 1,
           zIndex: 9,
         },

+ 6 - 2
src/features/student/studentInspect/MarkBody.vue

@@ -261,17 +261,21 @@ function paserRecogData(imgDom: HTMLImageElement, imageIndex): AnswerTagItem[] {
         offsetLt[0];
       const tagTop = fillPositions[0][1] - offsetLt[1];
 
+      const { answer, isRight } =
+        answerMap[`${result.main_number}_${result.sub_number}`] || {};
+
       answerTags.push({
         mainNumber: result.main_number,
         subNumber: result.sub_number,
-        answer: answerMap[`${result.main_number}_${result.sub_number}`],
+        answer,
         style: {
           height: ((100 * tagSize) / naturalHeight).toFixed(4) + "%",
           fontSize: ((100 * 20) / tagSize).toFixed(4) + "%",
           left: ((100 * tagLeft) / naturalWidth).toFixed(4) + "%",
           top: ((100 * tagTop) / naturalHeight).toFixed(4) + "%",
           position: "absolute",
-          color: "#f53f3f",
+          color: isRight ? "#05b575" : "#f53f3f",
+          fontWeight: 600,
           lineHeight: 1,
           zIndex: 9,
         },

+ 6 - 2
src/features/student/studentTrack/StudentTrack.vue

@@ -52,6 +52,7 @@ import {
 import { studentObjectiveConfirmData } from "@/api/checkPage";
 import vls from "@/utils/storage";
 import { doLogout } from "@/api/markPage";
+import { Task } from "@/types";
 
 const studentId = $ref(vls.get("check-students", ""));
 
@@ -69,9 +70,12 @@ async function updateTask() {
     const objectiveRes = await studentObjectiveConfirmData(studentId);
     const objectiveData = objectiveRes.data;
 
-    const answerMap = {};
+    const answerMap = {} as Task["answerMap"];
     objectiveData.answers.forEach((item) => {
-      answerMap[`${item.mainNumber}_${item.subNumber}`] = item.answer;
+      answerMap[`${item.mainNumber}_${item.subNumber}`] = {
+        answer: item.answer,
+        isRight: item.answer === item.standardAnswer,
+      };
     });
 
     // 获取题卡数据

+ 2 - 1
src/types/index.ts

@@ -231,7 +231,7 @@ export interface Task extends RawTask {
   // 主观题检查时,科组长特殊标记使用headerTagList
   __isMarkLeader: string;
   // 轨迹图中可能存在客观题填涂框数据,答案数据,题卡数据等
-  answerMap?: Record<string, string>;
+  answerMap?: Record<string, { answer: string; isRight: boolean }>;
   recogDatas?: string[];
   cardData?: Array<any>;
 }
@@ -531,6 +531,7 @@ export type StudentObjectiveInfo = {
     answer: string;
     exist: boolean;
     questionType: string;
+    standardAnswer: string;
   }>;
   titles: { [index: number]: string };
   success: boolean;