Browse Source

feat: 评卷页面加入强制考核卷插队逻辑

chenhao 2 years ago
parent
commit
1a8ac4156c
2 changed files with 24 additions and 18 deletions
  1. 1 1
      src/api/api-types/marking.d.ts
  2. 23 17
      src/modules/marking/mark/index.vue

+ 1 - 1
src/api/api-types/marking.d.ts

@@ -117,7 +117,7 @@ export namespace Marking {
     problemType?: ProblemType
   }
 
-  type SubmitMarkTask = BaseDefine<SubmitMark, MarkStatus>
+  type SubmitMarkTask = BaseDefine<SubmitMark, { refresh: boolean }>
 
   interface HistoryTask {
     mainNumber: number

+ 23 - 17
src/modules/marking/mark/index.vue

@@ -91,10 +91,13 @@ import SampleBStatus from '@/assets/images/status-sample-b.png'
 import type { SetImgBgOption } from '@/hooks/useSetImgBg'
 import type { ExtractApiResponse } from '@/api/api'
 import type { MarkHeaderInstance } from 'global-type'
+
 const { push, replace } = useRouter()
 
 const { getSpentTime, resume } = useSpentTime()
 
+const CACHE_NUM = 3
+
 type TaskType = ExtractArrayValue<ExtractApiResponse<'getMarkingTask'>>['taskType'] | 'default' | 'remarking'
 
 const markStatusIcon: Partial<Record<TaskType, string>> = {
@@ -145,7 +148,7 @@ const excludeOperations = computed<excludeOperationTypes>(() => {
   return ['delete', 'bookmark'].concat(isSampleType ? ['problem'] : []) as excludeOperationTypes
 })
 
-const { fetch: getMarkingTask, loading, result: taskPool } = useFetch('getMarkingTask')
+const { fetch: getMarkingTask, loading } = useFetch('getMarkingTask')
 const { fetch: submitMarkTask, loading: submitting } = useFetch('submitMarkTask')
 const { fetch: getMarkStatus, result: markStatus } = useFetch('getMarkStatus')
 
@@ -159,24 +162,27 @@ const historyTaskChange = (task: HistoryTaskType) => {
 
 const debounceGetMarkingTask = debounce(getMarkingTask, 5000)
 
-const getNextTask = (force = false) => {
+/**
+ * @param force 即时更新任务
+ * @param isRefresh 是否有插队任务
+ */
+const getNextTask = (force = false, isRefresh = false) => {
   currentTask.value = currentTaskPool.shift()
   currentTaskType.value =
     currentTask.value && markStatusIcon[currentTask.value.taskType] ? currentTask.value.taskType : 'FORMAL'
-  if (currentTaskPool.length < 2) {
-    force ? getMarkingTask() : debounceGetMarkingTask()
+  if (currentTaskPool.length < (isRefresh ? Number.MAX_SAFE_INTEGER : CACHE_NUM)) {
+    const getTaskApi = force ? getMarkingTask : debounceGetMarkingTask
+    getTaskApi()?.then((result) => {
+      if (result?.length) {
+        currentTaskPool[isRefresh ? 'push' : 'unshift'](...result)
+        if (currentTaskPool.length && !currentTask.value) {
+          getNextTask()
+        }
+      }
+    })
   }
 }
 
-watch(taskPool, () => {
-  if (taskPool.value) {
-    currentTaskPool = currentTaskPool.concat(taskPool.value)
-    if (currentTaskPool.length && !currentTask.value) {
-      getNextTask()
-    }
-  }
-})
-
 /** 给分板 */
 const scoringPanelVisible = ref<boolean>(true)
 
@@ -211,7 +217,7 @@ const onSubmit: InstanceType<typeof ScoringPanelWithConfirm>['onSubmit'] = async
       scoringPanelVisible.value = true
       return ElMessage.warning('阅卷速度过快')
     }
-    await submitMarkTask({
+    const submitResult = await submitMarkTask({
       spentTime,
       markScore: totalScore,
       markScores: scores,
@@ -219,7 +225,7 @@ const onSubmit: InstanceType<typeof ScoringPanelWithConfirm>['onSubmit'] = async
       taskId: currentTask.value.taskId,
       taskType: currentTask.value.taskType,
     })
-    await getNextTask(true)
+    await getNextTask(true, submitResult.refresh)
   } catch (error) {
     console.error(error)
     scoringPanelVisible.value = true
@@ -247,7 +253,7 @@ const onSubmitProblem = async () => {
   if (!currentTask.value) {
     return
   }
-  await submitMarkTask({
+  const submitResult = await submitMarkTask({
     markScore: 0,
     markScores: [],
     spentTime: getSpentTime(),
@@ -256,7 +262,7 @@ const onSubmitProblem = async () => {
     taskId: currentTask.value.taskId,
     taskType: currentTask.value.taskType,
   })
-  await getNextTask(true)
+  await getNextTask(true, submitResult.refresh)
 }
 
 /** 提交问题卷 & 雷同卷 */