|
@@ -1,4 +1,4 @@
|
|
-import { ModeEnum, Setting, MarkStore, Task } from "@/types";
|
|
|
|
|
|
+import { ModeEnum, Setting, MarkStore, Task, MarkResult, Track } from "@/types";
|
|
import { groupBy, sortBy } from "lodash";
|
|
import { groupBy, sortBy } from "lodash";
|
|
import { reactive, watch } from "vue";
|
|
import { reactive, watch } from "vue";
|
|
|
|
|
|
@@ -32,7 +32,7 @@ const obj = {
|
|
groups: [],
|
|
groups: [],
|
|
tasks: [],
|
|
tasks: [],
|
|
currentMarkResult: undefined,
|
|
currentMarkResult: undefined,
|
|
- currentTask: <Task>{},
|
|
|
|
|
|
+ currentTask: undefined,
|
|
currentQuestion: undefined,
|
|
currentQuestion: undefined,
|
|
currentScore: undefined,
|
|
currentScore: undefined,
|
|
markResults: [],
|
|
markResults: [],
|
|
@@ -41,15 +41,38 @@ const obj = {
|
|
historyTasks: [],
|
|
historyTasks: [],
|
|
} as MarkStore;
|
|
} as MarkStore;
|
|
|
|
|
|
-/** 保存setting和task */
|
|
|
|
-export function saveSetting(settingRes: Setting) {
|
|
|
|
- store.setting = settingRes;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
|
|
+/** 如果currentTask不存在,则返回undefined; 如果currentMarkResult不存在,则创建一个对应的markResult并返回 */
|
|
export function findCurrentTaskMarkResult() {
|
|
export function findCurrentTaskMarkResult() {
|
|
if (!store.currentTask) return;
|
|
if (!store.currentTask) return;
|
|
const { libraryId, studentId } = store.currentTask;
|
|
const { libraryId, studentId } = store.currentTask;
|
|
const statusValue = store.setting.statusValue;
|
|
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 += v * 100), 0) / 100;
|
|
|
|
+ store.markResults = [...store.markResults, markResult];
|
|
|
|
+ }
|
|
|
|
+
|
|
return store.markResults.find(
|
|
return store.markResults.find(
|
|
(m) =>
|
|
(m) =>
|
|
m.libraryId === libraryId &&
|
|
m.libraryId === libraryId &&
|
|
@@ -60,15 +83,6 @@ export function findCurrentTaskMarkResult() {
|
|
|
|
|
|
export const store = reactive(obj);
|
|
export const store = reactive(obj);
|
|
|
|
|
|
-// 切换currentTask的同时,切换currentMarkResult
|
|
|
|
-watch(
|
|
|
|
- () => store.currentTask,
|
|
|
|
- () => {
|
|
|
|
- const m = findCurrentTaskMarkResult();
|
|
|
|
- store.currentMarkResult = m;
|
|
|
|
- }
|
|
|
|
-);
|
|
|
|
-
|
|
|
|
// 轨迹模式下,添加轨迹,更新分数
|
|
// 轨迹模式下,添加轨迹,更新分数
|
|
watch(
|
|
watch(
|
|
() => store.currentMarkResult?.trackList,
|
|
() => store.currentMarkResult?.trackList,
|
|
@@ -130,21 +144,3 @@ watch(
|
|
},
|
|
},
|
|
{ deep: true }
|
|
{ deep: true }
|
|
);
|
|
);
|
|
-
|
|
|
|
-// 普通模式更新分数时
|
|
|
|
-watch(
|
|
|
|
- () => store.currentQuestion?.score,
|
|
|
|
- () => {
|
|
|
|
- if (store.setting.mode === ModeEnum.COMMON) {
|
|
|
|
- const markResult = findCurrentTaskMarkResult();
|
|
|
|
- if (markResult && store.currentTask) {
|
|
|
|
- const scoreList = store.currentTask.questionList.map(
|
|
|
|
- (q) => q.score || 0
|
|
|
|
- );
|
|
|
|
- markResult.scoreList = scoreList as number[];
|
|
|
|
- markResult.markerScore =
|
|
|
|
- scoreList.reduce((acc, v) => (acc += v * 100), 0) / 100;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-);
|
|
|