fix: 阅卷页面
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Claude Code 2025-11-29 19:14:00 +08:00
parent 28f847de75
commit fbc35a7849
1 changed files with 82 additions and 45 deletions

View File

@ -8,7 +8,7 @@
</route>
<script lang="ts" setup>
import type { TeacherMarkingTasksResponse } from '@/service/types'
import type { ExamMarkingTaskResponse, TeacherMarkingTasksResponse } from '@/service/types'
import { useQuery } from '@tanstack/vue-query'
import { computed, ref } from 'vue'
import TaskCard from '@/components/marking/TaskCard.vue'
@ -22,6 +22,10 @@ defineOptions({
// Tab |
const activeTab = ref<'tasks' | 'monitoring'>('tasks')
//
const currentTasksExpanded = ref(true)
const historyTasksExpanded = ref(true)
//
const historyAcademicYear = ref<string>('') //
@ -48,23 +52,40 @@ const responseData = computed<TeacherMarkingTasksResponse | undefined>(() => {
return tasksData.value
})
//
const currentTask = computed(() => {
return responseData.value?.current_task ? [responseData.value?.current_task] : []
//
function filterTasksByCalculated(tasks: ExamMarkingTaskResponse[], isCalculated: number): ExamMarkingTaskResponse[] {
return tasks
.map((task) => {
const filteredSubjects = (task.subjects || []).filter(
subject => subject.is_calculated === isCalculated,
)
if (filteredSubjects.length === 0)
return null
return {
...task,
subjects: filteredSubjects,
} as ExamMarkingTaskResponse
})
.filter((task): task is ExamMarkingTaskResponse => task !== null)
}
// current_tasks is_calculated = 0
const currentTasks = computed(() => {
const tasksList = responseData.value?.current_tasks?.list || []
return filterTasksByCalculated(tasksList, 0)
})
//
// history_tasks is_calculated = 1
const historyTasks = computed(() => {
const historyList = responseData.value?.history_tasks?.list || []
const tasksList = responseData.value?.history_tasks?.list || []
let calculatedTasks = filterTasksByCalculated(tasksList, 1)
if (!historyAcademicYear.value) {
return historyList
return calculatedTasks
}
//
return historyList.filter((task) => {
//
//
return calculatedTasks.filter((task) => {
if (!task.exam_date)
return false
@ -128,18 +149,23 @@ function handleRefresh() {
<wd-tabs v-model:active="activeTab" class="mb-4 px-4">
<wd-tab name="tasks" title="阅卷任务">
<view class="p-2 space-y-4">
<!-- 当前任务区域 -->
<!-- 当前任务区域未统分科目 -->
<view>
<view class="mb-3 flex items-center">
<view class="mb-3 flex cursor-pointer items-center" @click="currentTasksExpanded = !currentTasksExpanded">
<wd-icon :name="currentTasksExpanded ? 'arrow-down' : 'arrow-right'" size="16" class="mr-1" />
<text class="text-base font-semibold">当前任务</text>
<text class="ml-2 text-sm text-gray-500">({{ currentTasks.length }})</text>
</view>
<!-- 当前任务卡片 -->
<view v-if="!currentTask" class="py-8 text-center">
<view v-if="currentTasksExpanded">
<view v-if="currentTasks.length === 0" class="py-8 text-center">
<text class="text-sm text-gray-500">暂无当前任务</text>
</view>
<view v-for="task in currentTask" :key="task.exam_id">
<view v-else class="space-y-3">
<TaskCard
v-for="task in currentTasks"
:key="task.exam_id"
:task="task"
:is-current="true"
:is-monitor="false"
@ -149,11 +175,16 @@ function handleRefresh() {
/>
</view>
</view>
</view>
<!-- 次任务区域 -->
<!-- 史任务区域已统分科目 -->
<view>
<view class="mb-3 flex items-center justify-between">
<text class="text-base font-semibold">历次任务</text>
<view class="mb-3 flex cursor-pointer items-center justify-between" @click="historyTasksExpanded = !historyTasksExpanded">
<view class="flex items-center">
<wd-icon :name="historyTasksExpanded ? 'arrow-down' : 'arrow-right'" size="16" class="mr-1" />
<text class="text-base font-semibold">历史任务</text>
<text class="ml-2 text-sm text-gray-500">({{ historyTasks.length }})</text>
</view>
<!-- 学年筛选 -->
<wd-picker
v-model="historyAcademicYear"
@ -161,12 +192,14 @@ function handleRefresh() {
placeholder="选择学年"
size="small"
style="width: 120px"
@click.stop
/>
</view>
<!-- 历次任务列表 -->
<!-- 历史任务列表 -->
<view v-if="historyTasksExpanded">
<view v-if="historyTasks.length === 0" class="py-8 text-center">
<text class="text-sm text-gray-500">暂无历任务</text>
<text class="text-sm text-gray-500">暂无历任务</text>
</view>
<view v-else class="space-y-3">
<TaskCard
@ -182,22 +215,26 @@ function handleRefresh() {
</view>
</view>
</view>
</view>
</wd-tab>
<wd-tab name="monitoring" title="阅卷监控">
<view class="p-2 space-y-4">
<!-- 当前任务区域 -->
<!-- 当前任务区域未统分科目 -->
<view>
<view class="mb-3 flex items-center">
<text class="text-base font-semibold">当前任务</text>
<text class="ml-2 text-sm text-gray-500">({{ currentTasks.length }})</text>
</view>
<!-- 当前任务卡片 -->
<view v-if="!currentTask" class="py-8 text-center">
<view v-if="currentTasks.length === 0" class="py-8 text-center">
<text class="text-sm text-gray-500">暂无当前任务</text>
</view>
<view v-for="task in currentTask" :key="task.exam_id">
<view v-else class="space-y-3">
<TaskCard
v-for="task in currentTasks"
:key="task.exam_id"
:task="task"
:is-current="true"
:is-monitor="true"