Procházet zdrojové kódy

一些页面增加双评,仲裁分标绿

刘洋 před 1 rokem
rodič
revize
8312d1b82d

+ 1 - 1
src/devLoginParams.ts

@@ -70,7 +70,7 @@ export const LOGIN_CONFIG = {
   // loginName: "fh161301",
   loginName: "admin-1",
   password: "123456",
-  examId: "295",
+  examId: "235",
   markerId: null,
 };
 

+ 9 - 1
src/features/library/inspect/MarkBoardInspect.vue

@@ -74,7 +74,7 @@
     </div>
 
     <div class="tw-flex tw-flex-shrink-0 tw-justify-center">
-      <qm-button
+      <!-- <qm-button
         v-if="
           store.currentTask.inspectTime && store.currentTask.inspectTime > 0
         "
@@ -83,6 +83,14 @@
         @click="reject"
       >
         打回
+      </qm-button> -->
+      <qm-button
+        v-if="store.currentTask && store.historyOpen"
+        type="primary"
+        class="full-width-btn undo-btn"
+        @click="reject"
+      >
+        打回
       </qm-button>
       <qm-button
         v-else-if="checkedQuestions.length === 0"

+ 7 - 1
src/features/mark/MarkDrawTrack.vue

@@ -31,6 +31,9 @@ import type { SpecialTag, Track } from "@/types";
 import { toRefs, watch, nextTick, computed } from "vue";
 import { store } from "@/store/store";
 import { message } from "ant-design-vue";
+import { useRoute } from "vue-router";
+const route = useRoute();
+
 const doubleTrack = computed(() => {
   return !!store.setting?.doubleTrack;
 });
@@ -62,7 +65,10 @@ const computeTopAndLeft = (track: Track | SpecialTag) => {
   }
 
   return {
-    color: track.color || "red",
+    color:
+      route.path === "/admin/exam/arbitrate/start"
+        ? "green"
+        : track.color || "red",
     top: topInsideSliceRatio * 100 + "%",
     left: leftInsideSliceRatio * 100 + "%",
     "font-size":

+ 28 - 13
src/features/student/scoreVerify/markBody.vue

@@ -45,7 +45,7 @@ import { store } from "@/store/store";
 import MarkDrawTrack from "@/features/mark/MarkDrawTrack.vue";
 import type { SpecialTag, Track, ColorMap } from "@/types";
 import { useTimers } from "@/setups/useTimers";
-import { loadImage } from "@/utils/utils";
+import { loadImage, addHeaderTrackColorAttr } from "@/utils/utils";
 import { dragImage } from "@/features/mark/use/draggable";
 import ZoomPaper from "@/components/ZoomPaper.vue";
 
@@ -82,7 +82,7 @@ function addTrackColorAttr(tList: Track[]): Track[] {
     .map((v) => v.markerId)
     .filter((x) => !!x);
   markerIds = Array.from(new Set(markerIds));
-  markerIds.sort();
+  // markerIds.sort();
   let colorMap: ColorMap = {};
   for (let i = 0; i < markerIds.length; i++) {
     const mId: any = markerIds[i];
@@ -91,14 +91,14 @@ function addTrackColorAttr(tList: Track[]): Track[] {
     } else if (i == 1) {
       colorMap[mId + ""] = "blue";
     } else if (i > 1) {
-      colorMap[mId + ""] = "green";
+      colorMap[mId + ""] = "gray";
     }
   }
   if (Object.keys(colorMap).length > 1) {
     emit("getIsMultComments", true);
   }
   tList = tList.map((item: Track) => {
-    item.color = colorMap[item.markerId + ""] || "red";
+    item.color = colorMap[item.markerId + ""] || "gray";
     item.isByMultMark = markerIds.length > 1;
     return item;
   });
@@ -110,7 +110,7 @@ function addTagColorAttr(tList: SpecialTag[]): SpecialTag[] {
     .map((v) => v.markerId)
     .filter((x) => !!x);
   markerIds = Array.from(new Set(markerIds));
-  markerIds.sort();
+  // markerIds.sort();
   let colorMap: ColorMap = {};
   for (let i = 0; i < markerIds.length; i++) {
     const mId: any = markerIds[i];
@@ -119,11 +119,11 @@ function addTagColorAttr(tList: SpecialTag[]): SpecialTag[] {
     } else if (i == 1) {
       colorMap[mId + ""] = "blue";
     } else if (i > 1) {
-      colorMap[mId + ""] = "green";
+      colorMap[mId + ""] = "gray";
     }
   }
   tList = tList.map((item: SpecialTag) => {
-    item.color = colorMap[item.markerId + ""] || "red";
+    item.color = colorMap[item.markerId + ""] || "gray";
     item.isByMultMark = markerIds.length > 1;
     return item;
   });
@@ -151,17 +151,32 @@ async function processImage() {
       .map((q) => {
         let tList = q.trackList;
 
-        return addTrackColorAttr(tList);
+        return q.headerTrack?.length
+          ? addHeaderTrackColorAttr(q.headerTrack)
+          : addTrackColorAttr(tList);
       })
       .flat();
     const thisImageTrackList = trackLists.filter(
       (t) => t.offsetIndex === indexInSliceUrls
     );
-    const thisImageTagList = addTagColorAttr(
-      (store.currentTask.specialTagList || []).filter(
-        (t) => t.offsetIndex === indexInSliceUrls
-      )
-    );
+
+    const thisImageTagList = store.currentTask.headerTagList?.length
+      ? addHeaderTrackColorAttr(
+          (store.currentTask.headerTagList || []).filter(
+            (t) => t.offsetIndex === indexInSliceUrls
+          )
+        )
+      : addTagColorAttr(
+          (store.currentTask.specialTagList || []).filter(
+            (t) => t.offsetIndex === indexInSliceUrls
+          )
+        );
+
+    // const thisImageTagList = addTagColorAttr(
+    //   (store.currentTask.specialTagList || []).filter(
+    //     (t) => t.offsetIndex === indexInSliceUrls
+    //   )
+    // );
 
     sliceImagesWithTrackList.push({
       url,

+ 21 - 14
src/features/student/studentInspect/MarkBody.vue

@@ -38,7 +38,7 @@ import { store } from "@/store/store";
 import MarkDrawTrack from "@/features/mark/MarkDrawTrack.vue";
 import type { SpecialTag, Track, ColorMap } from "@/types";
 import { useTimers } from "@/setups/useTimers";
-import { loadImage } from "@/utils/utils";
+import { loadImage, addHeaderTrackColorAttr } from "@/utils/utils";
 import { dragImage } from "@/features/mark/use/draggable";
 import ZoomPaper from "@/components/ZoomPaper.vue";
 
@@ -75,7 +75,7 @@ function addTrackColorAttr(tList: Track[]): Track[] {
     .map((v) => v.markerId)
     .filter((x) => !!x);
   markerIds = Array.from(new Set(markerIds));
-  markerIds.sort();
+  // markerIds.sort();
   let colorMap: ColorMap = {};
   for (let i = 0; i < markerIds.length; i++) {
     const mId: any = markerIds[i];
@@ -84,14 +84,14 @@ function addTrackColorAttr(tList: Track[]): Track[] {
     } else if (i == 1) {
       colorMap[mId + ""] = "blue";
     } else if (i > 1) {
-      colorMap[mId + ""] = "green";
+      colorMap[mId + ""] = "gray";
     }
   }
   if (Object.keys(colorMap).length > 1) {
     emit("getIsMultComments", true);
   }
   tList = tList.map((item: Track) => {
-    item.color = colorMap[item.markerId + ""] || "red";
+    item.color = colorMap[item.markerId + ""] || "gray";
     item.isByMultMark = markerIds.length > 1;
     return item;
   });
@@ -103,7 +103,7 @@ function addTagColorAttr(tList: SpecialTag[]): SpecialTag[] {
     .map((v) => v.markerId)
     .filter((x) => !!x);
   markerIds = Array.from(new Set(markerIds));
-  markerIds.sort();
+  // markerIds.sort();
   let colorMap: ColorMap = {};
   for (let i = 0; i < markerIds.length; i++) {
     const mId: any = markerIds[i];
@@ -112,11 +112,11 @@ function addTagColorAttr(tList: SpecialTag[]): SpecialTag[] {
     } else if (i == 1) {
       colorMap[mId + ""] = "blue";
     } else if (i > 1) {
-      colorMap[mId + ""] = "green";
+      colorMap[mId + ""] = "gray";
     }
   }
   tList = tList.map((item: SpecialTag) => {
-    item.color = colorMap[item.markerId + ""] || "red";
+    item.color = colorMap[item.markerId + ""] || "gray";
     item.isByMultMark = markerIds.length > 1;
     return item;
   });
@@ -143,18 +143,25 @@ async function processImage() {
       // .map((q) => q.trackList)
       .map((q) => {
         let tList = q.trackList;
-
-        return addTrackColorAttr(tList);
+        return q.headerTrack?.length
+          ? addHeaderTrackColorAttr(q.headerTrack)
+          : addTrackColorAttr(tList);
       })
       .flat();
     const thisImageTrackList = trackLists.filter(
       (t) => t.offsetIndex === indexInSliceUrls
     );
-    const thisImageTagList = addTagColorAttr(
-      (store.currentTask.specialTagList || []).filter(
-        (t) => t.offsetIndex === indexInSliceUrls
-      )
-    );
+    const thisImageTagList = store.currentTask.headerTagList?.length
+      ? addHeaderTrackColorAttr(
+          (store.currentTask.headerTagList || []).filter(
+            (t) => t.offsetIndex === indexInSliceUrls
+          )
+        )
+      : addTagColorAttr(
+          (store.currentTask.specialTagList || []).filter(
+            (t) => t.offsetIndex === indexInSliceUrls
+          )
+        );
 
     sliceImagesWithTrackList.push({
       url,

+ 2 - 0
src/types/index.ts

@@ -215,6 +215,7 @@ interface RawTask {
   rejectReason: string;
   message: string | null;
   rejectScoreList?: any;
+  headerTagList?: any;
 }
 
 export interface Task extends RawTask {
@@ -251,6 +252,7 @@ interface RawQuestion {
   selectiveIndex: number | null;
   rejected?: boolean;
   questionName?: string;
+  headerTrack?: any;
 }
 export interface Question extends RawQuestion {
   /** question 在 task 里面的 index ,用来对应 scoreList 的 score */

+ 9 - 2
src/utils/utils.ts

@@ -88,7 +88,7 @@ export async function getDataUrlForSliceConfig(
   // 如果用toBlob,则产生异步,而且URL.createObjectURL还会需要手动释放
   // const dataurl = canvas.toDataURL();
   const blob: Blob = await new Promise((res) => {
-    canvas.toBlob((b) => res(<Blob>b));
+    canvas.toBlob((b) => res(b));
   });
   const dataurl = URL.createObjectURL(blob);
 
@@ -158,7 +158,7 @@ export async function getDataUrlForSplitConfig(
   // 如果用toBlob,则产生异步,而且URL.createObjectURL还会需要手动释放
   // const dataurl = canvas.toDataURL();
   const blob: Blob = await new Promise((res) => {
-    canvas.toBlob((b) => res(<Blob>b));
+    canvas.toBlob((b) => res(b));
   });
   const dataurl = URL.createObjectURL(blob);
   cacheFIFO();
@@ -349,3 +349,10 @@ export function addFileServerPrefixToTask(rawTask: Task): Task {
 
   return newTask;
 }
+
+export function addHeaderTrackColorAttr(headerTrack: any): any {
+  return headerTrack.map((item: any) => {
+    item.color = "green";
+    return item;
+  });
+}