Jelajahi Sumber

feat: 阅卷模式切换的提示

zhangjie 3 bulan lalu
induk
melakukan
e4155e5feb

+ 6 - 0
src/features/mark/composables/useMarkSubmit.ts

@@ -7,11 +7,14 @@ import EventBus from "@/plugins/eventBus";
 import type { Question, MarkResult } from "@/types";
 import useStatus from "./useStatus";
 import useMarkTask from "./useMarkTask";
+import useTaskTips from "./useTaskTips";
 
 export default function useMarkSubmit() {
   const markStore = useMarkStore();
   const { updateStatus } = useStatus();
   const { nextTask } = useMarkTask();
+  const { setPrevTips, registTaskChangeTips } = useTaskTips();
+  registTaskChangeTips();
 
   // 检查分数
   const validateScore = (markResult: MarkResult) => {
@@ -156,6 +159,9 @@ export default function useMarkSubmit() {
     // 故意不在此处同步等待,因为不必等待
     updateStatus().catch((e) => console.log("保存任务后获取status出错", e));
     if (res.data.success && markStore.currentTask) {
+      // 保存成功后,缓存当前评卷提示信息
+      setPrevTips();
+
       void message.success({ content: "保存成功", duration: 2 });
       if (!markStore.historyOpen) {
         markStore.currentTask = undefined;

+ 89 - 0
src/features/mark/composables/useTaskTips.ts

@@ -0,0 +1,89 @@
+import { watch } from "vue";
+import { message } from "ant-design-vue";
+import vls from "@/utils/storage";
+import { useMarkStore } from "@/store";
+import { Setting } from "@/types";
+
+interface TaskTips {
+  studentId: string;
+  questionNos: string;
+  questionModel: Setting["questionModel"] | null;
+}
+
+export default function useTaskTips() {
+  const markStore = useMarkStore();
+
+  function getPrevTips(): TaskTips {
+    return vls.get("prevTips", {
+      studentId: "",
+      questionNos: "",
+      questionModel: null,
+    });
+  }
+
+  function setPrevTips() {
+    const { studentId, questionList } = markStore.currentTask || {};
+    const { questionModel } = markStore.setting || {};
+    const questionNos = (questionList || [])
+      .map((q) => `${q.mainNumber}-${q.subNumber}`)
+      .join(",");
+
+    vls.set("prevTips", {
+      studentId,
+      questionNos,
+      questionModel,
+    });
+  }
+
+  function checkShowTips() {
+    if (!markStore.currentTask || !markStore.setting) return;
+
+    const prevTips = getPrevTips();
+    if (!prevTips.studentId) return;
+
+    const questionNos = (markStore.currentTask.questionList || [])
+      .map((q) => `${q.mainNumber}-${q.subNumber}`)
+      .join(",");
+    const { questionModel } = markStore.setting;
+
+    // 按小题阅卷
+    // 前一个题结束切换到下一个题时提示信息:
+    // “当前评阅3-2题已经评完,切换到3-3题进行评卷”
+    if (
+      prevTips.questionModel === questionModel &&
+      questionModel === "SINGLE"
+    ) {
+      if (prevTips.questionNos !== questionNos) {
+        void message.info({
+          content: `当前评阅${prevTips.questionNos}题已经评完,切换到${questionNos}题进行评卷`,
+        });
+        return;
+      }
+    }
+
+    // 整卷阅
+    // 从按小题阅卷切换到阅全部题目提示信息:
+    // “开始评3-1,3-2,3-2小题,请将全部题目都给分再提交”
+    if (prevTips.questionModel !== questionModel && questionModel === "MULTI") {
+      void message.info({
+        content: `开始评${questionNos}小题,请将全部题目都给分再提交`,
+      });
+    }
+  }
+
+  function registTaskChangeTips() {
+    watch(
+      () => markStore.currentTask,
+      () => {
+        checkShowTips();
+      }
+    );
+  }
+
+  return {
+    getPrevTips,
+    setPrevTips,
+    checkShowTips,
+    registTaskChangeTips,
+  };
+}