123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- import { watch } from "vue";
- import { useMarkStore } from "@/store";
- import useQuestion from "./useQuestion";
- export default function useTaskWatch() {
- const markStore = useMarkStore();
- const { isArbitrated } = useQuestion();
- watch(
- () => markStore.currentTask,
- () => {
- // 初始化 task.markResult ,始终保证 task 下有 markResult
- // 1. 评卷时,如果没有 markResult ,则初始化一个 markResult 给它
- // 1. 回评时,先清空它的 markResult ,然后初始化一个 markResult 给它
- if (!markStore.currentTask) return;
- // 主观题检查时,记录修改的试题信息
- const currentTaskModifyQuestion = {};
- markStore.currentTask.questionList.forEach((q) => {
- const qno = `${q.mainNumber}_${q.subNumber}`;
- currentTaskModifyQuestion[qno] = false;
- });
- markStore.currentTaskModifyQuestion = currentTaskModifyQuestion;
- const task = markStore.currentTask;
- if (task.previous && task.markResult) {
- task.markResult = undefined;
- }
- if (task.markResult) return;
- // 管理后台可能不设置 questionList, 而且它不用 markResult
- if (!task.questionList) {
- task.questionList = [];
- // return;
- }
- // 初始化 __index
- task.questionList.forEach((q, i) => {
- q.__index = i;
- // 回评的时候,如果是自己标记问题卷的题目,则转成非自己标记问题卷的题目
- // 这样一来,就不能编辑问题卷,但是依旧可以编辑新设置未提交的问题卷
- if (markStore.historyOpen && q.problem && q.selfMark) {
- q.selfMark = false;
- }
- });
- task.__markStartTime = Date.now();
- const statusValue = markStore.setting.statusValue;
- const { examId, studentId, paperNumber } = task;
- const selfQuestions = task.questionList.filter(
- (q) => q.selfMark && !isArbitrated(q)
- );
- task.markResult = {
- examId,
- paperNumber,
- studentId,
- spent: 0,
- statusValue,
- questionList: task.questionList,
- markedQuestionId: "",
- markerTrackList: selfQuestions
- .map((q) => {
- const trackList =
- q.headerTrackList && q.headerTrackList.length
- ? q.headerTrackList
- : q.markerTrackList;
- return trackList || [];
- })
- .flat(),
- markerTagList: selfQuestions
- .map((q) => {
- const tagList =
- q.headerTagList && q.headerTagList.length
- ? q.headerTagList
- : q.markerTagList;
- return tagList || [];
- })
- .flat(),
- scoreList: task.questionList.map((q) =>
- q.selfMark && !isArbitrated(q) ? q.markerScore : null
- ),
- markerScore: 0, // 后期通过 scoreList 自动更新
- };
- task.markResult.markerTrackList.forEach((t) => {
- if (t.unanswered) {
- t.score = -0;
- }
- });
- }
- );
- // 唯一根据 scoreList 自动更新 markerScore
- watch(
- () => markStore.currentTask?.markResult.scoreList,
- () => {
- if (!markStore.currentTask) return;
- const scoreList = markStore.currentTask.markResult.scoreList.filter(
- (v) => v !== null
- );
- const result =
- scoreList.length === 0
- ? null
- : scoreList.reduce((acc, v) => (acc += Math.round(v * 1000)), 0) /
- 1000;
- markStore.currentTask.markResult.markerScore = result;
- },
- { deep: true }
- );
- }
|