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