'use client' import { useState, useEffect, useCallback } from 'react' import { useRouter } from 'next/navigation' import { ArrowLeft, CheckCircle, XCircle, Clock, Video, Filter, ChevronRight, Loader2 } from 'lucide-react' import { ResponsiveLayout } from '@/components/layout/ResponsiveLayout' import { cn } from '@/lib/utils' import { api } from '@/lib/api' import { USE_MOCK } from '@/contexts/AuthContext' import { useToast } from '@/components/ui/Toast' import type { TaskResponse } from '@/types/task' // 历史任务状态类型 type HistoryStatus = 'completed' | 'expired' | 'cancelled' // 历史任务数据类型 type HistoryTask = { id: string title: string description: string status: HistoryStatus completedAt?: string expiredAt?: string platform: string } // 模拟历史数据 const mockHistory: HistoryTask[] = [ { id: 'hist-001', title: 'MM春季护肤品推广', description: '产品测评 · 已发布', status: 'completed', completedAt: '2026-01-20', platform: '抖音', }, { id: 'hist-002', title: 'NN零食新品试吃', description: '美食测评 · 已发布', status: 'completed', completedAt: '2026-01-15', platform: '小红书', }, { id: 'hist-003', title: 'OO运动装备测评', description: '运动视频 · 已过期', status: 'expired', expiredAt: '2026-01-10', platform: '抖音', }, { id: 'hist-004', title: 'PP家居用品展示', description: '生活vlog · 已取消', status: 'cancelled', expiredAt: '2026-01-05', platform: 'B站', }, { id: 'hist-005', title: 'QQ电子产品开箱', description: '科技测评 · 已发布', status: 'completed', completedAt: '2025-12-28', platform: '抖音', }, { id: 'hist-006', title: 'RR母婴用品推荐', description: '种草视频 · 已发布', status: 'completed', completedAt: '2025-12-20', platform: '小红书', }, ] function mapTaskResponseToHistory(task: TaskResponse): HistoryTask { return { id: task.id, title: task.name, description: task.project.name, status: task.stage === 'completed' ? 'completed' : 'completed', completedAt: task.updated_at?.split('T')[0], platform: '抖音', // backend doesn't return platform info yet } } // 状态配置 const statusConfig: Record = { completed: { label: '已完成', color: 'text-accent-green', bgColor: 'bg-accent-green/15', icon: CheckCircle }, expired: { label: '已过期', color: 'text-text-tertiary', bgColor: 'bg-bg-elevated', icon: Clock }, cancelled: { label: '已取消', color: 'text-accent-coral', bgColor: 'bg-accent-coral/15', icon: XCircle }, } // 骨架屏 function HistorySkeleton() { return (
{[...Array(4)].map((_, i) => (
))}
) } // 历史任务卡片 function HistoryCard({ task, onClick }: { task: HistoryTask; onClick: () => void }) { const status = statusConfig[task.status] const StatusIcon = status.icon return (
{task.title} {task.description}
{task.platform} {task.completedAt || task.expiredAt}
{status.label}
) } export default function CreatorHistoryPage() { const router = useRouter() const toast = useToast() const [filter, setFilter] = useState('all') const [loading, setLoading] = useState(true) const [historyTasks, setHistoryTasks] = useState([]) const loadHistory = useCallback(async () => { if (USE_MOCK) { setHistoryTasks(mockHistory) setLoading(false) return } try { setLoading(true) const response = await api.listTasks(1, 50, 'completed') const mapped = response.items.map(mapTaskResponseToHistory) setHistoryTasks(mapped) } catch (err) { const message = err instanceof Error ? err.message : '加载历史记录失败' toast.error(message) console.error('加载历史记录失败:', err) } finally { setLoading(false) } }, [toast]) useEffect(() => { loadHistory() }, [loadHistory]) const filteredHistory = filter === 'all' ? historyTasks : historyTasks.filter(t => t.status === filter) return (
{/* 顶部栏 */}

历史记录

查看已完成和过期的任务

{/* 统计信息 */}
{historyTasks.filter(t => t.status === 'completed').length} 已完成
{historyTasks.filter(t => t.status === 'expired').length} 已过期
{historyTasks.filter(t => t.status === 'cancelled').length} 已取消
{/* 任务列表 */}
{loading ? ( ) : filteredHistory.length === 0 ? (

暂无历史记录

完成的任务将显示在这里

) : ( filteredHistory.map((task) => ( router.push(`/creator/task/${task.id}`)} /> )) )}
) }