فهرست منبع

feat: 轨迹图

zhangjie 3 ماه پیش
والد
کامیت
3cb29eda8f

+ 4 - 7
src/features/check-subjective/composables/useSliceTrack.ts

@@ -8,11 +8,8 @@ import useTrackColor from "./useTrackColor";
 // 计算裁切图和裁切图上的分数轨迹和特殊标记轨迹
 export default function useSliceTrack() {
   const markStore = useMarkStore();
-  const {
-    addTrackColorAttr,
-    addHeaderTrackColorAttr,
-    addSpecialTrackColorAttr,
-  } = useTrackColor();
+  const { addTrackColorAttr, addHeaderTrackColorAttr, addTagColorAttr } =
+    useTrackColor();
 
   const sliceImagesWithTrackList = $ref<SliceImage[]>([]);
   const maxSliceWidth = ref(0); // 最大的裁切块宽度,图片容器以此为准
@@ -41,8 +38,8 @@ export default function useSliceTrack() {
     const tagLists = (markStore.currentTask.questionList || [])
       .map((q) => {
         return q.headerTagList?.length
-          ? addSpecialTrackColorAttr(q.headerTagList)
-          : addSpecialTrackColorAttr(q.markerTagList || []);
+          ? addTagColorAttr(q.headerTagList)
+          : addTagColorAttr(q.markerTagList || []);
       })
       .flat();
 

+ 41 - 21
src/features/check-subjective/composables/useTrackColor.ts

@@ -1,37 +1,57 @@
 import type { SpecialTag, Track } from "@/types";
 
 export default function useTrackColor() {
-  const colors = ["red", "blue", "green"];
-  const colorMap: Record<number, string> = {};
-
   function addTrackColorAttr(tList: Track[]): Track[] {
-    let userIds: (number | undefined)[] = tList
+    let markerIds: (number | undefined)[] = tList
       .map((v) => v.userId)
       .filter((x) => !!x);
-    userIds = Array.from(new Set(userIds));
-    const isByMultMark = userIds.length > 1;
-
-    tList = tList.map((item) => {
-      const uid = item.userId;
-      if (item.headerMarkScore) {
-        item.color = "green";
-      } else {
-        if (!colorMap[uid]) {
-          colorMap[uid] = colors[Object.keys(colorMap).length] || "green";
-        }
-        item.color = colorMap[uid];
+    markerIds = Array.from(new Set(markerIds));
+    // markerIds.sort();
+    const colorMap: ColorMap = {};
+    for (let i = 0; i < markerIds.length; i++) {
+      const mId: any = markerIds[i];
+      if (i == 0) {
+        colorMap[mId + ""] = "red";
+      } else if (i == 1) {
+        colorMap[mId + ""] = "blue";
+      } else if (i > 1) {
+        colorMap[mId + ""] = "gray";
       }
-      item.isByMultMark = isByMultMark;
+    }
+    // if (Object.keys(colorMap).length > 1) {
+    //   emit("getIsMultComments", true);
+    // }
+    tList = tList.map((item: Track) => {
+      item.color = colorMap[item.userId + ""] || "red";
+      item.isByMultMark = markerIds.length > 1;
       return item;
     });
     return tList;
   }
 
-  function addSpecialTrackColorAttr(tList: SpecialTag[]): SpecialTag[] {
-    return tList.map((item) => {
-      item.color = colorMap[item.markerId] || "green";
+  function addTagColorAttr(tList: SpecialTag[]): SpecialTag[] {
+    let markerIds: (number | undefined)[] = tList
+      .map((v) => v.userId)
+      .filter((x) => !!x);
+    markerIds = Array.from(new Set(markerIds));
+    // markerIds.sort();
+    const colorMap: ColorMap = {};
+    for (let i = 0; i < markerIds.length; i++) {
+      const mId: any = markerIds[i];
+      if (i == 0) {
+        colorMap[mId + ""] = "red";
+      } else if (i == 1) {
+        colorMap[mId + ""] = "blue";
+      } else if (i > 1) {
+        colorMap[mId + ""] = "gray";
+      }
+    }
+    tList = tList.map((item: SpecialTag) => {
+      item.color = colorMap[item.userId + ""] || "red";
+      item.isByMultMark = markerIds.length > 1;
       return item;
     });
+    return tList;
   }
 
   function addHeaderTrackColorAttr(headerTrackList: any): any {
@@ -43,7 +63,7 @@ export default function useTrackColor() {
 
   return {
     addTrackColorAttr,
-    addSpecialTrackColorAttr,
+    addTagColorAttr,
     addHeaderTrackColorAttr,
   };
 }

+ 2 - 2
src/features/track/composables/useTrackTag.ts

@@ -347,7 +347,7 @@ export default function useTrackTag() {
       }
 
       const score = calcSumPrecision(
-        groupQuestions.map((item) => item.score || 0)
+        groupQuestions.map((item) => item.markerScore || 0)
       );
       const maxScore = calcSumPrecision(
         groupQuestions.map((item) => item.maxScore)
@@ -402,7 +402,7 @@ export default function useTrackTag() {
           userMap[track.userId] = {
             userId: track.userId,
             userName: track.userName,
-            color: hasHeaderTrack ? "green" : "red",
+            color: hasHeaderTrack ? "green" : track.color || "red",
             prename: "",
             scores: [],
             score: 0,