浏览代码

校验数据优化:待完成

Michael Wang 3 年之前
父节点
当前提交
b7d1c1ea08

+ 5 - 8
src/features/mark/CommonMarkBody.vue

@@ -195,10 +195,7 @@ async function processSliceConfig() {
     } else {
       trackLists = store.currentTask.questionList
         .map((q) => q.trackList)
-        .reduce((acc, t) => {
-          acc = acc.concat(t);
-          return acc;
-        }, [] as Array<Track>);
+        .flat();
     }
     const thisImageTrackList = trackLists.filter(
       (t) => t.offsetIndex === indexInSliceUrls
@@ -244,6 +241,9 @@ async function processSliceConfig() {
   if (sliceImagesWithTrackList.length === 0) {
     // 初次渲染,不做动画
     sliceImagesWithTrackList.push(...tempSliceImagesWithTrackList);
+    // 没抽象好,这里不好做校验
+    // const renderedTrackAndTagNumber = sliceImagesWithTrackList.map(s => s.trackList.length + s.tagList.length).reduce((p,c) => p+ c);
+    // if(renderedTrackAndTagNumber === thisIma)
   } else {
     rotateBoard = 1;
     setTimeout(() => {
@@ -333,10 +333,7 @@ async function processSplitConfig() {
         // 成绩查询 questionList 可能为空
         trackLists = (store.currentTask.questionList || [])
           .map((q) => q.trackList)
-          .reduce((acc, t) => {
-            acc = acc.concat(t);
-            return acc;
-          }, [] as Array<Track>);
+          .flat();
       }
       const thisImageTrackList = trackLists.filter(
         (t) => t.offsetIndex === indexInSliceUrls

+ 41 - 4
src/features/mark/MarkBody.vue

@@ -21,6 +21,7 @@ import { SliceImage, SpecialTag, Track, ModeEnum } from "@/types";
 // @ts-ignore
 import CustomCursor from "custom-cursor.js";
 import CommonMarkBody from "./CommonMarkBody.vue";
+// import { message } from "ant-design-vue";
 // 开启本组件,测试后台在整卷的还原效果
 // import MarkBody from "@/features/student/studentInspect/MarkBody.vue";
 
@@ -50,6 +51,28 @@ const makeScoreTrack = (
   track.positionX = (track.offsetX - item.dx) / maxSliceWidth;
   track.positionY =
     (track.offsetY - item.dy + item.accumTopHeight) / theFinalHeight;
+
+  // const isIllegalRange = (testNum: number, min: number, max: number) => {
+  //   return testNum < min || testNum > max;
+  // };
+
+  // // 检测有问题,此处没有给原图的宽高,如果有的话,要稍微修改下数据类型
+  // // 但其实下面也做了一个基本检测
+  // if (
+  //   isIllegalRange(track.offsetX, 0, target.naturalWidth) ||
+  //   isIllegalRange(track.offsetY, 0, target.naturalHeight) ||
+  //   isIllegalRange(track.positionX, 0, 1) ||
+  //   isIllegalRange(track.positionY, 0, 1)
+  // ) {
+  //   console.error(
+  //     "错误的track",
+  //     track,
+  //     target.naturalWidth,
+  //     target.naturalHeight
+  //   );
+  //   void message.error("系统错误,请联系管理员!");
+  // }
+
   if (track.offsetX > item.effectiveWidth + item.dx) {
     console.log("不在有效宽度内,轨迹不生效");
     return;
@@ -126,10 +149,24 @@ const makeSpecialTagTrack = (
   track.positionX = (track.offsetX - item.dx) / maxSliceWidth;
   track.positionY =
     (track.offsetY - item.dy + item.accumTopHeight) / theFinalHeight;
-  if (track.offsetX > item.effectiveWidth + item.dx) {
-    console.log("不在有效宽度内,轨迹不生效");
-    return;
-  }
+
+  // const isIllegalRange = (testNum: number, min: number, max: number) => {
+  //   return testNum < min || testNum > max;
+  // };
+
+  // if (
+  //   isIllegalRange(track.offsetX, 0, target.naturalWidth) ||
+  //   isIllegalRange(track.offsetY, 0, target.naturalHeight) ||
+  //   isIllegalRange(track.positionX, 0, 1) ||
+  //   isIllegalRange(track.positionY, 0, 1)
+  // ) {
+  //   console.error("错误的track", track);
+  //   void message.error("系统错误,请联系管理员!");
+  // }
+  // if (track.offsetX > item.effectiveWidth + item.dx) {
+  //   console.log("不在有效宽度内,轨迹不生效");
+  //   return;
+  // }
   if (
     item.tagList.some((t) => {
       return (

+ 2 - 2
src/features/mark/use/focusTracks.ts

@@ -30,7 +30,7 @@ function _addFocusTrack(
     store.currentTask?.questionList
       ?.filter((q) => q.groupNumber === groupNumber)
       ?.map((q) => q.trackList)
-      .reduce((acc, ts) => acc.concat(ts))
+      .flat()
       .forEach((t) => {
         // 回评时,如果没被删除
         const shouldAdd = isMark
@@ -41,7 +41,7 @@ function _addFocusTrack(
   } else {
     store.currentTask?.questionList
       ?.map((q) => q.trackList)
-      .reduce((acc, ts) => acc.concat(ts))
+      .flat()
       .filter((t) => {
         if (mainNumber) {
           return t.mainNumber === mainNumber && t.subNumber === subNumber;

+ 1 - 4
src/features/student/studentInspect/MarkBody.vue

@@ -75,10 +75,7 @@ async function processImage() {
 
     const trackLists = (store.currentTask.questionList || [])
       .map((q) => q.trackList)
-      .reduce((acc, t) => {
-        acc = acc.concat(t);
-        return acc;
-      }, [] as Array<Track>);
+      .flat();
     const thisImageTrackList = trackLists.filter(
       (t) => t.offsetIndex === indexInSliceUrls
     );

+ 2 - 5
src/store/store.ts

@@ -1,4 +1,4 @@
-import { Setting, MarkStore, Track, ModeEnum, AdminPageSetting } from "@/types";
+import { Setting, MarkStore, ModeEnum, AdminPageSetting } from "@/types";
 import { watch } from "vue";
 import { defineStore } from "pinia";
 
@@ -169,10 +169,7 @@ setTimeout(() => {
           studentId: studentId,
           spent: 0,
 
-          trackList: task.questionList.reduce(
-            (all, c) => all.concat(c.trackList),
-            [] as Array<Track>
-          ),
+          trackList: task.questionList.map((q) => q.trackList).flat(),
           specialTagList: [...(task.specialTagList ?? [])],
           scoreList: task.questionList.map((q) => q.score),
           markerScore: null, // 后期通过 scoreList 自动更新