瀏覽代碼

feat: 分数显示顺序

zhangjie 1 月之前
父節點
當前提交
3a6cc4fe89
共有 1 個文件被更改,包括 110 次插入109 次删除
  1. 110 109
      src/lib/watermark.ts

+ 110 - 109
src/lib/watermark.ts

@@ -90,117 +90,8 @@ export async function addWatermark(
     const maxStartX = imageWidth - fontSize * 0.7 * 5;
     const nextLineStartX = x + fontSize * 0.7 * 4;
     const height = fontSize + 10;
-    //计算总分
-    const totalScore =
-      (parseFloat(student.objectiveScore) || 0) +
-      (parseFloat(student.subjectiveScore) || 0);
-    //显示总分明细
     imgData.font(fontFile, fontSize).fill(color);
-    drawText(x, (y += height), "成绩明细");
-    //普通考试模式,按客观+主观模式显示总分
-    if (trackMode === "1") {
-      drawText(
-        x,
-        (y += height),
-        "总分=(客观+主观) | " +
-          totalScore +
-          "=" +
-          student.objectiveScore +
-          "+" +
-          student.subjectiveScore
-      );
-    }
-    //研究生考试模式,只显示总分
-    else if (trackMode === "2") {
-      drawText(x, (y += height), "总分=" + totalScore + "分");
-    }
-    //显示客观题明细
-    if (
-      student.objectiveScoreDetail &&
-      student.objectiveScoreDetail.length > 0
-    ) {
-      const title = "大题号 | 大题总分";
-      drawText(x, (y += height), title);
-      const map: any = {};
-      for (let i = 0; i < student.objectiveScoreDetail.length; i++) {
-        const item = student.objectiveScoreDetail[i];
-        if (!map[item.mainNumber]) {
-          map[item.mainNumber] = [item];
-        } else {
-          map[item.mainNumber].push(item);
-        }
-      }
-      for (const mainNumber in map) {
-        const arr = map[mainNumber];
-        const mainTotalScore =
-          arr.reduce((num: number, item: any) => {
-            return num + item.score * 100;
-          }, 0) / 100;
-        drawText(x, (y += height), `${mainNumber} |  ${mainTotalScore}`);
-        if (store.pageInputs["/image-download"].showSubScore) {
-          dynamicX = saveX;
-          drawText((dynamicX += fontSize * 0.7 * 5), y, ":");
-          for (let i = 0; i < arr.length; i++) {
-            const v = arr[i];
-            const joinStr = i == arr.length - 1 ? "" : ",";
-            if (dynamicX > maxStartX) {
-              dynamicX = nextLineStartX;
-              y += height;
-            }
-            drawText(
-              (dynamicX += (v.score + " ").length * fontSize * 0.7),
-              y,
-              v.score + joinStr
-            );
-          }
-        }
-      }
-    }
 
-    // if (
-    //   student.objectiveScoreDetail &&
-    //   student.objectiveScoreDetail.length > 0
-    // ) {
-    //   const lines = [];
-    //   let array = [];
-    //   //前置提示文字的字符数
-    //   let count = 10;
-    //   lines.push(array);
-    //   for (let i = 0; i < student.objectiveScoreDetail.length; i++) {
-    //     const detail = student.objectiveScoreDetail[i];
-    //     const content =
-    //       detail.answer + ":" + (detail.score === -1 ? "未选做" : detail.score);
-    //     //超长后另起一行显示客观题
-    //     if ((count + content.length) * fontSize * 0.7 > maxX) {
-    //       array = [];
-    //       lines.push(array);
-    //       count = 10;
-    //     }
-    //     array.push(content);
-    //     count += content.length;
-    //   }
-    //   //显示所有行的客观题明细
-    //   for (let l = 0; l < lines.length; l++) {
-    //     // FIXME: 要在小个版本修复
-    //     // 事先判断,能否打印,情况较多,比如客观题多个答案
-    //     // 事后报错,不让错误的数据保存
-    //     // if (y + height + 15 > imageHeight) {
-    //     //   y = startY;
-    //     //   x += width;
-    //     // }
-    //     drawText(x, (y += height), "客观题识别结果 | " + lines[l].join(";"));
-    //   }
-    // }
-    //显示复核人
-    // if (student.inspector) {
-    //   drawText(x, (y += height), "复核人: " + student.inspector.loginName);
-    // }
-    if (student.inspector && student.inspector.length) {
-      const allNameStr = student.inspector
-        .map((item: any) => item.loginName)
-        .join("、");
-      drawText(x, (y += height), "复核人: " + allNameStr);
-    }
     //显示主观题明细
     if (
       student.subjectiveScoreDetail &&
@@ -310,6 +201,116 @@ export async function addWatermark(
         }
       }
     }
+    //计算总分
+    const totalScore =
+      (parseFloat(student.objectiveScore) || 0) +
+      (parseFloat(student.subjectiveScore) || 0);
+    //显示总分明细
+    drawText(x, (y += height), "成绩明细");
+    //普通考试模式,按客观+主观模式显示总分
+    if (trackMode === "1") {
+      drawText(
+        x,
+        (y += height),
+        "总分=(客观+主观) | " +
+          totalScore +
+          "=" +
+          student.objectiveScore +
+          "+" +
+          student.subjectiveScore
+      );
+    }
+    //研究生考试模式,只显示总分
+    else if (trackMode === "2") {
+      drawText(x, (y += height), "总分=" + totalScore + "分");
+    }
+    //显示客观题明细
+    if (
+      student.objectiveScoreDetail &&
+      student.objectiveScoreDetail.length > 0
+    ) {
+      const title = "大题号 | 大题总分";
+      drawText(x, (y += height), title);
+      const map: any = {};
+      for (let i = 0; i < student.objectiveScoreDetail.length; i++) {
+        const item = student.objectiveScoreDetail[i];
+        if (!map[item.mainNumber]) {
+          map[item.mainNumber] = [item];
+        } else {
+          map[item.mainNumber].push(item);
+        }
+      }
+      for (const mainNumber in map) {
+        const arr = map[mainNumber];
+        const mainTotalScore =
+          arr.reduce((num: number, item: any) => {
+            return num + item.score * 100;
+          }, 0) / 100;
+        drawText(x, (y += height), `${mainNumber} |  ${mainTotalScore}`);
+        if (store.pageInputs["/image-download"].showSubScore) {
+          dynamicX = saveX;
+          drawText((dynamicX += fontSize * 0.7 * 5), y, ":");
+          for (let i = 0; i < arr.length; i++) {
+            const v = arr[i];
+            const joinStr = i == arr.length - 1 ? "" : ",";
+            if (dynamicX > maxStartX) {
+              dynamicX = nextLineStartX;
+              y += height;
+            }
+            drawText(
+              (dynamicX += (v.score + " ").length * fontSize * 0.7),
+              y,
+              v.score + joinStr
+            );
+          }
+        }
+      }
+    }
+
+    // if (
+    //   student.objectiveScoreDetail &&
+    //   student.objectiveScoreDetail.length > 0
+    // ) {
+    //   const lines = [];
+    //   let array = [];
+    //   //前置提示文字的字符数
+    //   let count = 10;
+    //   lines.push(array);
+    //   for (let i = 0; i < student.objectiveScoreDetail.length; i++) {
+    //     const detail = student.objectiveScoreDetail[i];
+    //     const content =
+    //       detail.answer + ":" + (detail.score === -1 ? "未选做" : detail.score);
+    //     //超长后另起一行显示客观题
+    //     if ((count + content.length) * fontSize * 0.7 > maxX) {
+    //       array = [];
+    //       lines.push(array);
+    //       count = 10;
+    //     }
+    //     array.push(content);
+    //     count += content.length;
+    //   }
+    //   //显示所有行的客观题明细
+    //   for (let l = 0; l < lines.length; l++) {
+    //     // FIXME: 要在小个版本修复
+    //     // 事先判断,能否打印,情况较多,比如客观题多个答案
+    //     // 事后报错,不让错误的数据保存
+    //     // if (y + height + 15 > imageHeight) {
+    //     //   y = startY;
+    //     //   x += width;
+    //     // }
+    //     drawText(x, (y += height), "客观题识别结果 | " + lines[l].join(";"));
+    //   }
+    // }
+    //显示复核人
+    // if (student.inspector) {
+    //   drawText(x, (y += height), "复核人: " + student.inspector.loginName);
+    // }
+    if (student.inspector && student.inspector.length) {
+      const allNameStr = student.inspector
+        .map((item: any) => item.loginName)
+        .join("、");
+      drawText(x, (y += height), "复核人: " + allNameStr);
+    }
   }
   //显示评卷标记
   if (student.tags != undefined && student.tags[index] != undefined) {