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