import React, { useState, useEffect } from 'react'; import { Card, Table, Tag, Button, Space, Spin, message, Typography } from 'antd'; import { ClockCircleOutlined, BookOutlined, CalendarOutlined, CheckCircleOutlined } from '@ant-design/icons'; import { useNavigate } from 'react-router-dom'; import { request } from '../utils/request'; import { useUserStore } from '../stores/userStore'; const { Title, Text } = Typography; interface ExamTask { id: string; name: string; subjectId: string; subjectName: string; startAt: string; endAt: string; totalScore: number; timeLimitMinutes: number; completed?: boolean; score?: number; } export const UserTaskPage: React.FC = () => { const [tasks, setTasks] = useState([]); const [loading, setLoading] = useState(true); const navigate = useNavigate(); const { user } = useUserStore(); useEffect(() => { if (user) { fetchUserTasks(); } }, [user]); const fetchUserTasks = async () => { try { setLoading(true); const response = await request.get(`/api/exam-tasks/user/${user?.id}`); if (response.data.success) { setTasks(response.data.data); } } catch (error) { message.error('获取考试任务失败'); } finally { setLoading(false); } }; const startTask = (task: ExamTask) => { const now = new Date(); const startAt = new Date(task.startAt); const endAt = new Date(task.endAt); if (now < startAt) { message.warning('考试任务尚未开始'); return; } if (now > endAt) { message.warning('考试任务已结束'); return; } // 跳转到科目选择页面,带上任务ID navigate('/subjects', { state: { selectedTask: task.id } }); }; const getStatusColor = (task: ExamTask) => { const now = new Date(); const startAt = new Date(task.startAt); const endAt = new Date(task.endAt); if (now < startAt) return 'blue'; if (now > endAt) return 'red'; return 'green'; }; const getStatusText = (task: ExamTask) => { const now = new Date(); const startAt = new Date(task.startAt); const endAt = new Date(task.endAt); if (now < startAt) return '未开始'; if (now > endAt) return '已结束'; return '进行中'; }; const columns = [ { title: '任务名称', dataIndex: 'name', key: 'name', render: (text: string) => {text} }, { title: '考试科目', dataIndex: 'subjectName', key: 'subjectName', render: (text: string) => ( {text} ) }, { title: '总分', dataIndex: 'totalScore', key: 'totalScore', render: (score: number) => {score}分 }, { title: '时长', dataIndex: 'timeLimitMinutes', key: 'timeLimitMinutes', render: (minutes: number) => ( {minutes}分钟 ) }, { title: '时间范围', key: 'timeRange', render: (record: ExamTask) => ( {new Date(record.startAt).toLocaleDateString()} {new Date(record.endAt).toLocaleDateString()} ) }, { title: '状态', key: 'status', render: (record: ExamTask) => ( {getStatusText(record)} ) }, { title: '操作', key: 'action', render: (record: ExamTask) => { const now = new Date(); const startAt = new Date(record.startAt); const endAt = new Date(record.endAt); const canStart = now >= startAt && now <= endAt; return ( ); } } ]; if (loading) { return (
); } return (
我的考试任务 查看您被分派的所有考试任务
`共 ${total} 条记录` }} locale={{ emptyText: '暂无考试任务' }} />
); };