123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { Setting, MarkStore, Task, MarkResult, Track } from "@/types";
- import { reactive } from "vue";
- const obj = {
- setting: {
- mode: "TRACK",
- examType: "SCAN_IMAGE",
- forceMode: false,
- sheetView: false,
- sheetConfig: [],
- enableAllZero: false,
- fileServer: "",
- userName: "",
- subject: <Setting["subject"]>{},
- forceSpecialTag: false,
- uiSetting: {
- "answer.paper.scale": 1,
- "score.board.collapse": false,
- "normal.mode": "keyboard",
- },
- statusValue: "FORMAL",
- problemTypes: [],
- groupNumber: 0,
- topCount: 0,
- splitConfig: [],
- prefetchCount: 3,
- startTime: 0,
- endTime: 0,
- },
- status: <MarkStore["status"]>{},
- groups: [],
- tasks: [],
- currentMarkResult: undefined,
- currentTask: undefined,
- currentQuestion: undefined,
- currentScore: undefined,
- markResults: [],
- historyOpen: false,
- MarkBoardTrackCollapse: false,
- historyTasks: [],
- removeScoreTracks: [],
- } as MarkStore;
- /** 如果currentTask不存在,则返回undefined; 如果currentMarkResult不存在,则创建一个对应的markResult并返回 */
- export function findCurrentTaskMarkResult() {
- if (!store.currentTask) return;
- const { libraryId, studentId } = store.currentTask;
- const statusValue = store.setting.statusValue;
- let markResult = store.markResults.find(
- (m) =>
- m.libraryId === libraryId &&
- m.studentId === studentId &&
- m.statusValue === statusValue
- );
- if (!markResult) {
- const { libraryId, studentId } = store.currentTask;
- const statusValue = store.setting.statusValue;
- markResult = {} as MarkResult;
- markResult.libraryId = libraryId;
- markResult.studentId = studentId;
- markResult.statusValue = statusValue;
- markResult.spent = Date.now();
- markResult.trackList = store.currentTask.questionList.reduce(
- (all, c) => all.concat(c.trackList),
- [] as Array<Track>
- );
- markResult.scoreList = store.currentTask.questionList.map((q) => q.score);
- markResult.markerScore =
- markResult.scoreList
- .filter((v): v is number => v !== null)
- .reduce((acc, v) => (acc += Math.round(v * 100)), 0) / 100;
- store.markResults = [...store.markResults, markResult];
- }
- return store.markResults.find(
- (m) =>
- m.libraryId === libraryId &&
- m.studentId === studentId &&
- m.statusValue === statusValue
- );
- }
- export function removeCurrentMarkResult() {
- if (!store.currentTask) return;
- function clearMarkResultFromTask(task: Task) {
- let { libraryId, studentId } = task;
- const i = store.markResults.findIndex(
- (s) => s.libraryId === libraryId && s.studentId === studentId
- );
- store.markResults.splice(i, 1);
- }
- clearMarkResultFromTask(store.currentTask);
- for (const task of store.tasks) {
- // 清理不在当前任务中的markResult,防止回评产生的markResult造成垃圾
- clearMarkResultFromTask(task);
- }
- }
- export const store = reactive(obj);
|