|
@@ -4,33 +4,37 @@ import { message } from "ant-design-vue";
|
|
|
import { isNumber } from "lodash-es";
|
|
|
import { h } from "vue";
|
|
|
import EventBus from "@/plugins/eventBus";
|
|
|
-import type { Question } from "@/types";
|
|
|
+import type { Question, MarkResult } from "@/types";
|
|
|
import useStatus from "./useStatus";
|
|
|
import { useMarkTask } from "./useMarkTask";
|
|
|
+import { deepCopy } from "@/utils/utils";
|
|
|
|
|
|
export function useMarkSubmit() {
|
|
|
const markStore = useMarkStore();
|
|
|
const { updateStatus } = useStatus();
|
|
|
const { nextTask } = useMarkTask();
|
|
|
|
|
|
- const validateScore = (markResult: any) => {
|
|
|
+ // 检查分数
|
|
|
+ const validateScore = (markResult: MarkResult) => {
|
|
|
const errors: Array<{ question: Question; index: number; error: string }> =
|
|
|
[];
|
|
|
markResult.scoreList.forEach((score: number, index: number) => {
|
|
|
if (!markStore.currentTask) return;
|
|
|
const question = markStore.currentTask.questionList[index]!;
|
|
|
+ const { maxScore, minScore, mainNumber, subNumber, questionName } =
|
|
|
+ question;
|
|
|
let error;
|
|
|
if (!isNumber(score)) {
|
|
|
- error = `${question.mainNumber}-${question.subNumber}${
|
|
|
- question.questionName ? "(" + question.questionName + ")" : ""
|
|
|
+ error = `${mainNumber}-${subNumber}${
|
|
|
+ questionName ? "(" + questionName + ")" : ""
|
|
|
} 没有给分,不能提交。`;
|
|
|
- } else if (isNumber(question.maxScore) && score > question.maxScore) {
|
|
|
- error = `${question.mainNumber}-${question.subNumber}${
|
|
|
- question.questionName ? "(" + question.questionName + ")" : ""
|
|
|
+ } else if (isNumber(maxScore) && score > maxScore) {
|
|
|
+ error = `${mainNumber}-${subNumber}${
|
|
|
+ questionName ? "(" + questionName + ")" : ""
|
|
|
} 给分大于最高分不能提交。`;
|
|
|
- } else if (isNumber(question.minScore) && score < question.minScore) {
|
|
|
- error = `${question.mainNumber}-${question.subNumber}${
|
|
|
- question.questionName ? "(" + question.questionName + ")" : ""
|
|
|
+ } else if (isNumber(minScore) && score < minScore) {
|
|
|
+ error = `${mainNumber}-${subNumber}${
|
|
|
+ questionName ? "(" + questionName + ")" : ""
|
|
|
} 给分小于最低分不能提交。`;
|
|
|
}
|
|
|
if (error) {
|
|
@@ -40,21 +44,15 @@ export function useMarkSubmit() {
|
|
|
return errors;
|
|
|
};
|
|
|
|
|
|
- const saveTaskToServer = async () => {
|
|
|
- if (!markStore.currentTask) return;
|
|
|
- const markResult = markStore.currentTask.markResult;
|
|
|
- if (!markResult) return;
|
|
|
-
|
|
|
- const mkey = "save_task_key";
|
|
|
+ // 检查评卷任务
|
|
|
+ function checkMarkResult(markResult: MarkResult): boolean {
|
|
|
const errors = validateScore(markResult);
|
|
|
-
|
|
|
if (errors.length !== 0) {
|
|
|
console.log(errors);
|
|
|
const msg = errors.map((v) => h("div", `${v.error}`));
|
|
|
void message.warning({
|
|
|
content: h("span", ["校验失败", ...msg]),
|
|
|
duration: 10,
|
|
|
- key: mkey,
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
@@ -64,13 +62,11 @@ export function useMarkSubmit() {
|
|
|
markStore.currentTask.questionList.length ||
|
|
|
!markResult.scoreList.every((s) => isNumber(s))
|
|
|
) {
|
|
|
- console.error({ content: "markResult格式不正确,缺少分数", key: mkey });
|
|
|
+ console.error({ content: "markResult格式不正确,缺少分数" });
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (!markStore.isTrackMode) {
|
|
|
- markResult.trackList = [];
|
|
|
- } else {
|
|
|
+ if (markStore.isTrackMode) {
|
|
|
const trackScores =
|
|
|
markResult.trackList
|
|
|
.map((t) => Math.round((t.score || 0) * 100))
|
|
@@ -79,7 +75,6 @@ export function useMarkSubmit() {
|
|
|
void message.error({
|
|
|
content: "轨迹分与总分不一致,请检查。",
|
|
|
duration: 3,
|
|
|
- key: mkey,
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
@@ -93,21 +88,51 @@ export function useMarkSubmit() {
|
|
|
void message.error({
|
|
|
content: "强制标记已开启,请至少使用一个标记。",
|
|
|
duration: 5,
|
|
|
- key: mkey,
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取保存评卷任务的数据
|
|
|
+ function getSaveTaskResult() {
|
|
|
+ const datas = deepCopy(markStore.currentTask.markResult);
|
|
|
+ datas.spent = Date.now() - markStore.currentTask.__markStartTime;
|
|
|
+ datas.questionList = datas.questionList.map((q) => {
|
|
|
+ q.trackList = datas.trackList.filter(
|
|
|
+ (t) => t.mainNumber === q.mainNumber && t.subNumber === q.subNumber
|
|
|
+ );
|
|
|
+ q.specialTagList = datas.specialTagList.filter(
|
|
|
+ (t) => t.mainNumber === q.mainNumber && t.subNumber === q.subNumber
|
|
|
+ );
|
|
|
+ return q;
|
|
|
+ }) as Question[];
|
|
|
+ return datas;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存评卷任务
|
|
|
+ const saveTaskToServer = async () => {
|
|
|
+ if (!markStore.currentTask) return;
|
|
|
+ const markResult = markStore.currentTask.markResult;
|
|
|
+ if (!markResult) return;
|
|
|
+
|
|
|
+ if (!checkMarkResult(markResult)) return;
|
|
|
+
|
|
|
+ if (!markStore.isTrackMode) {
|
|
|
+ markResult.trackList = [];
|
|
|
+ }
|
|
|
+
|
|
|
console.log("save task to server");
|
|
|
- void message.loading({ content: "保存评卷任务...", key: mkey });
|
|
|
- const res = await saveTask();
|
|
|
+ void message.loading({ content: "保存评卷任务..." });
|
|
|
+ const res = await saveTask(getSaveTaskResult());
|
|
|
if (!res) return;
|
|
|
|
|
|
// 故意不在此处同步等待,因为不必等待
|
|
|
updateStatus().catch((e) => console.log("保存任务后获取status出错", e));
|
|
|
if (res.data.success && markStore.currentTask) {
|
|
|
- void message.success({ content: "保存成功", key: mkey, duration: 2 });
|
|
|
+ void message.success({ content: "保存成功", duration: 2 });
|
|
|
if (!markStore.historyOpen) {
|
|
|
markStore.currentTask = undefined;
|
|
|
markStore.tasks.shift();
|
|
@@ -118,18 +143,18 @@ export function useMarkSubmit() {
|
|
|
} else if (!res.data.success) {
|
|
|
void message.error({
|
|
|
content: "提交失败,请刷新页面",
|
|
|
- key: mkey,
|
|
|
duration: 10,
|
|
|
});
|
|
|
return;
|
|
|
} else if (!markStore.currentTask) {
|
|
|
- void message.warn({ content: "暂无新任务", key: mkey, duration: 10 });
|
|
|
+ void message.warn({ content: "暂无新任务", duration: 10 });
|
|
|
}
|
|
|
|
|
|
// 获取下一个任务
|
|
|
void nextTask();
|
|
|
};
|
|
|
|
|
|
+ // 全部零分提交
|
|
|
const allZeroSubmit = async () => {
|
|
|
const markResult = markStore.currentTask?.markResult;
|
|
|
if (!markResult) return;
|
|
@@ -152,6 +177,7 @@ export function useMarkSubmit() {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ // 未选做提交
|
|
|
const unselectiveSubmit = async () => {
|
|
|
const markResult = markStore.currentTask?.markResult;
|
|
|
if (!markResult) return;
|