Selaa lähdekoodia

评卷任务更新

Michael Wang 4 vuotta sitten
vanhempi
commit
509f1f6188

+ 8 - 8
src/api/markPage.ts

@@ -82,13 +82,13 @@ export async function saveTask() {
       (obj) => obj[0]
     );
     const scoreList = questionWithTotalScoreSorted.map((s) => s[1]);
-    console.log(
-      scoreGroups,
-      questionWithScore,
-      questionWithTotalScore,
-      questionWithTotalScoreSorted,
-      scoreList
-    );
+    // console.log(
+    //   scoreGroups,
+    //   questionWithScore,
+    //   questionWithTotalScore,
+    //   questionWithTotalScoreSorted,
+    //   scoreList
+    // );
     markResult.scoreList = scoreList as number[];
     // const sortScore = orderBy(markResult.trackList, ['mainNumber', 'subNumber', 'score']);
     // markResult.scoreList = sortScore.reduce((acc, pre) => {
@@ -105,6 +105,6 @@ export async function saveTask() {
     markResult.problem = false;
     markResult.spent = Date.now() - markResult.spent;
 
-    httpApp.post("/mark/saveTask", markResult);
+    return httpApp.post("/mark/saveTask", markResult);
   }
 }

+ 37 - 10
src/components/mark/Mark.vue

@@ -9,7 +9,7 @@
 </template>
 
 <script lang="ts">
-import { defineComponent, onMounted, watch } from "vue";
+import { defineComponent, onMounted, onUnmounted, watch } from "vue";
 import {
   clearMarkTask,
   getGroup,
@@ -61,12 +61,15 @@ export default defineComponent({
     }
 
     // 5秒更新一次tasks
-    // addInterval(() => {
-    //   // console.log("get task", store.tasks);
-    //   if (store.tasks.length < 3) {
-    //     updateTask();
-    //   }
-    // }, 5 * 1000);
+    addInterval(() => {
+      // console.log("get task", store.tasks);
+      if (store.tasks.length < 3) {
+        updateTask();
+      }
+    }, 5 * 1000);
+    addInterval(() => {
+      updateStatus();
+    }, 30 * 1000);
 
     onMounted(async () => {
       await updateMarkTask();
@@ -84,11 +87,35 @@ export default defineComponent({
       { deep: true }
     );
 
-    const saveTaskToServer = () => {
+    const saveTaskToServer = async () => {
       console.log("save task to server");
-      saveTask();
+      const res = (await saveTask()) as any;
+      updateStatus();
+      if (res.data.success && store.currentTask) {
+        let { libraryId, studentId } = store.currentTask;
+        const i = store.markResults.findIndex(
+          (s) => s.libraryId === libraryId && s.studentId === studentId
+        );
+        store.markResults.splice(i, 1);
+        store.currentTask = undefined;
+        store.tasks.shift();
+      } else {
+        console.log(res.data.message);
+      }
     };
-    return { store, saveTaskToServer };
+
+    function scoreKeyInput(event: KeyboardEvent) {
+      console.log(event);
+    }
+
+    onMounted(() => {
+      document.addEventListener("keypress", scoreKeyInput);
+    });
+    onUnmounted(() => {
+      document.removeEventListener("keypress", scoreKeyInput);
+    });
+
+    return { store, saveTaskToServer, scoreKeyInput };
   },
 });
 </script>

+ 6 - 4
src/components/mark/MarkBody.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="mark-body-container flex-auto" ref="container">
-    <div :style="{ width: answerPaperScale }">
+    <div v-if="!store.currentTask" class="text-center">暂无评卷任务</div>
+    <div v-else :style="{ width: answerPaperScale }">
       <div
         v-for="(item, index) in sliceImagesWithTrackList"
         :key="index"
@@ -18,7 +19,6 @@
       </div>
       <!-- style="border: 1px solid black; background: black" -->
     </div>
-    <div v-if="!store.currentTask" class="text-center">暂无评卷任务</div>
   </div>
 </template>
 
@@ -58,13 +58,15 @@ export default defineComponent({
           image.onerror = reject;
         });
       }
-      if (!store.currentTask?.libraryId) return;
+      if (!store.currentTask?.libraryId) {
+        return;
+      }
 
       // check if have MarkResult for currentTask
       let markResult = findCurrentTaskMarkResult();
       // console.log("watcheffect markResult 1", markResult, store.markResults);
 
-      if (!markResult) {
+      if (!markResult && store.currentTask) {
         const { libraryId, studentId } = store.currentTask;
         const statusValue = store.setting.statusValue;
         markResult = {} as MarkResult;

+ 2 - 1
src/components/mark/MarkHistory.vue

@@ -14,7 +14,8 @@
     </div>
     <div v-for="(task, index) of store.historyTasks" :key="index">
       <div @click="replaceCurrentTask(task)">
-        {{ task.secretNumber }} {{ task.markTime }} {{ task.markerScore }}
+        {{ task.secretNumber }} {{ $filters.datetimeFilter(task.markTime) }}
+        {{ task.markerScore }}
       </div>
     </div>
   </div>

+ 1 - 1
src/types/index.ts

@@ -9,7 +9,7 @@ export interface MarkStore {
     arbitrateCount: number; //待仲裁卷数量
   };
   tasks: Array<Task>; // 保持数量为3
-  currentTask: Task; // 用来切换task,还有回看
+  currentTask?: Task; // 用来切换task,还有回看
   markResults: Array<MarkResult>;
   historyOpen: boolean; // 是否打开回评侧边栏
   historyTasks: Array<Task>;