|
@@ -1,5 +1,5 @@
|
|
|
-import { Setting, MarkStore, Task, MarkResult, Track } from "@/types";
|
|
|
-import { reactive } from "vue";
|
|
|
+import { Setting, MarkStore, Track } from "@/types";
|
|
|
+import { reactive, watch } from "vue";
|
|
|
|
|
|
const obj = {
|
|
|
setting: {
|
|
@@ -38,12 +38,10 @@ const obj = {
|
|
|
groups: [],
|
|
|
tasks: [],
|
|
|
message: null,
|
|
|
- currentMarkResult: undefined,
|
|
|
currentTask: undefined,
|
|
|
currentQuestion: undefined,
|
|
|
currentScore: undefined,
|
|
|
currentSpecialTag: undefined,
|
|
|
- markResults: [],
|
|
|
historyOpen: false,
|
|
|
historyTasks: [],
|
|
|
removeScoreTracks: [],
|
|
@@ -55,57 +53,6 @@ const obj = {
|
|
|
globalMask: false,
|
|
|
} as MarkStore;
|
|
|
|
|
|
-/** 如果currentTask不存在,则返回undefined; 如果currentMarkResult不存在,则创建一个对应的markResult并返回 */
|
|
|
-export function findCurrentTaskMarkResult() {
|
|
|
- if (!store.currentTask) return;
|
|
|
- const { libraryId } = store.currentTask;
|
|
|
- let markResult = store.markResults.find((m) => m.libraryId === libraryId);
|
|
|
-
|
|
|
- if (!markResult) {
|
|
|
- const { studentId } = store.currentTask;
|
|
|
- const statusValue = store.setting.statusValue;
|
|
|
- markResult = {} as MarkResult;
|
|
|
- markResult.libraryId = libraryId;
|
|
|
- markResult.studentId = studentId;
|
|
|
- markResult.statusValue = statusValue;
|
|
|
- markResult.__markStartTime = Date.now();
|
|
|
- markResult.__previous = store.currentTask.previous;
|
|
|
- markResult.trackList = store.currentTask.questionList.reduce(
|
|
|
- (all, c) => all.concat(c.trackList),
|
|
|
- [] as Array<Track>
|
|
|
- );
|
|
|
- markResult.specialTagList = [...(store.currentTask.specialTagList ?? [])];
|
|
|
- markResult.scoreList = store.currentTask.questionList.map((q) => q.score);
|
|
|
- markResult.markerScore = 0; // 后期通过 scoreList 自动更新
|
|
|
-
|
|
|
- store.markResults = [...store.markResults, markResult];
|
|
|
- }
|
|
|
-
|
|
|
- return store.markResults.find((m) => m.libraryId === libraryId) as MarkResult;
|
|
|
-}
|
|
|
-
|
|
|
-function clearMarkResultFromTask(task: Task) {
|
|
|
- let { libraryId } = task;
|
|
|
- const i = store.markResults.findIndex((s) => s.libraryId === libraryId);
|
|
|
- if (i >= 0) store.markResults.splice(i, 1);
|
|
|
-}
|
|
|
-/** 回评时,切换任务前,删除之前的回评markResult */
|
|
|
-export function removeOldPreviousMarkResult() {
|
|
|
- // 清理不在当前任务中的markResult,防止回评产生的markResult造成垃圾
|
|
|
- store.markResults = store.markResults.filter((m) => !!!m.__previous);
|
|
|
-}
|
|
|
-
|
|
|
-export function removeCurrentMarkResult() {
|
|
|
- if (!store.currentTask) return;
|
|
|
-
|
|
|
- clearMarkResultFromTask(store.currentTask);
|
|
|
-
|
|
|
- for (const task of store.tasks) {
|
|
|
- // 清理不在当前任务中的markResult,防止回评产生的markResult造成垃圾
|
|
|
- clearMarkResultFromTask(task);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* 返回正在评卷的状态 '' | 回评 | 打回
|
|
|
*/
|
|
@@ -127,3 +74,44 @@ export function isScanImage() {
|
|
|
}
|
|
|
|
|
|
export const store = reactive(obj);
|
|
|
+
|
|
|
+watch(
|
|
|
+ () => store.currentTask,
|
|
|
+ () => {
|
|
|
+ // 初始化 task.markResult ,始终保证 task 下有 markResult
|
|
|
+ // 1. 评卷时,如果没有 markResult ,则初始化一个 markResult 给它
|
|
|
+ // 1. 回评时,先清空它的 markResult ,然后初始化一个 markResult 给它
|
|
|
+ if (!store.currentTask) return;
|
|
|
+
|
|
|
+ const task = store.currentTask;
|
|
|
+ if (task.previous && task.markResult) {
|
|
|
+ // @ts-ignore 将其强制置空
|
|
|
+ task.markResult = undefined;
|
|
|
+ }
|
|
|
+ if (!task.markResult) {
|
|
|
+ const statusValue = store.setting.statusValue;
|
|
|
+ const { libraryId, studentId, previous } = task;
|
|
|
+ task.markResult = {
|
|
|
+ statusValue: statusValue,
|
|
|
+ libraryId: libraryId,
|
|
|
+ studentId: studentId,
|
|
|
+ spent: 0,
|
|
|
+
|
|
|
+ trackList: task.questionList.reduce(
|
|
|
+ (all, c) => all.concat(c.trackList),
|
|
|
+ [] as Array<Track>
|
|
|
+ ),
|
|
|
+ specialTagList: [...(task.specialTagList ?? [])],
|
|
|
+ scoreList: task.questionList.map((q) => q.score),
|
|
|
+ markerScore: 0, // 后期通过 scoreList 自动更新
|
|
|
+
|
|
|
+ problem: false,
|
|
|
+ problemTypeId: 0,
|
|
|
+ unselective: false,
|
|
|
+
|
|
|
+ __markStartTime: Date.now(),
|
|
|
+ __previous: previous,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+);
|