|
@@ -78,7 +78,7 @@ import {
|
|
|
getDataUrlForSplitConfig,
|
|
|
loadImage,
|
|
|
} from "@/utils/utils";
|
|
|
-import { groupBy, sortBy } from "lodash";
|
|
|
+import { groupBy, isNumber, sortBy } from "lodash";
|
|
|
// @ts-ignore
|
|
|
import CustomCursor from "custom-cursor.js";
|
|
|
|
|
@@ -98,6 +98,7 @@ interface SliceImage {
|
|
|
}
|
|
|
// should not render twice at the same time
|
|
|
let __lock = false;
|
|
|
+let __currentLibraryId = -1; // save __currentLibraryId of lock
|
|
|
export default defineComponent({
|
|
|
name: "MarkBody",
|
|
|
components: { MarkDrawTrack },
|
|
@@ -113,7 +114,6 @@ export default defineComponent({
|
|
|
|
|
|
let rendering = ref(false);
|
|
|
let sliceImagesWithTrackList: Array<SliceImage> = reactive([]);
|
|
|
- let _studentId = -1; // 判断是否改变了任务
|
|
|
let maxSliceWidth = 0; // 最大的裁切块宽度,图片容器以此为准
|
|
|
let theFinalHeight = 0; // 最终宽度,用来定位轨迹在第几张图片,不包括image-seperator高度
|
|
|
|
|
@@ -276,10 +276,15 @@ export default defineComponent({
|
|
|
// let trackLen = store.currentMarkResult?.trackList.length;
|
|
|
const renderPaperAndMark = async () => {
|
|
|
if (__lock) {
|
|
|
+ if (store.currentTask?.libraryId === __currentLibraryId) {
|
|
|
+ console.log("重复渲染,返回");
|
|
|
+ return;
|
|
|
+ }
|
|
|
await new Promise((res) => setTimeout(res, 1000));
|
|
|
await renderPaperAndMark();
|
|
|
}
|
|
|
__lock = true;
|
|
|
+ __currentLibraryId = store.currentTask?.libraryId ?? -1;
|
|
|
sliceImagesWithTrackList.splice(0);
|
|
|
// check if have MarkResult for currentTask
|
|
|
let markResult = findCurrentTaskMarkResult();
|
|
@@ -576,24 +581,32 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
markResult.scoreList = scoreList as number[];
|
|
|
- // const sortScore = orderBy(markResult.trackList, ['mainNumber', 'subNumber', 'score']);
|
|
|
- // markResult.scoreList = sortScore.reduce((acc, pre) => {
|
|
|
- // if(pre.mainNumber === cur.mainNumber && pre.subNumber === cur.subNumber) {
|
|
|
- // acc[acc.length-1] += cur.score
|
|
|
- // }
|
|
|
- // }, [0])
|
|
|
- markResult.markerScore =
|
|
|
- markResult.scoreList
|
|
|
- .filter((v): v is number => v !== null)
|
|
|
- .reduce((acc, v) => (acc += Math.round(v * 100)), 0) / 100;
|
|
|
-
|
|
|
- // console.log(markResult.scoreList, markResult.markerScore);
|
|
|
// renderPaperAndMark();
|
|
|
}
|
|
|
},
|
|
|
{ deep: true }
|
|
|
);
|
|
|
|
|
|
+ // question.score更新后,自动关联markResult.scoreList和markResult.markerScore
|
|
|
+ watchEffect(() => {
|
|
|
+ const markResult = findCurrentTaskMarkResult();
|
|
|
+
|
|
|
+ // 普通模式更新分数时
|
|
|
+ if (store.setting.mode === ModeEnum.COMMON) {
|
|
|
+ if (markResult && store.currentTask) {
|
|
|
+ const scoreList = store.currentTask.questionList.map((q) => q.score);
|
|
|
+ markResult.scoreList = [...(scoreList as number[])];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (markResult && markResult.scoreList && store.currentTask) {
|
|
|
+ markResult.markerScore =
|
|
|
+ (markResult.scoreList.filter((s) => isNumber(s)) as number[]).reduce(
|
|
|
+ (acc, v) => (acc += Math.round(v * 100)),
|
|
|
+ 0
|
|
|
+ ) / 100;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
watch(
|
|
|
() => store.setting.mode,
|
|
|
() => {
|