import React, { useState } from 'react'; import { Plus, Search, Eye, Play, Pause, Clock, User, ChevronRight, Filter, FileText, AlertTriangle, CheckCircle, XCircle, MoreHorizontal, Edit, Download, Bot, Users, Workflow, X, ArrowRight, Target, Layers, } from 'lucide-react'; import { useTheme } from '@/contexts/ThemeContext'; import { PageType } from '@/components/Sidebar'; interface TaskListPageProps { title: string; category: string; subCategory: string; onNavigate: (page: PageType) => void; } type TaskType = 'single' | 'consultation' | 'scene' | 'multi-agent'; type TaskStatus = 'draft' | 'pending' | 'running' | 'paused' | 'blocked' | 'completed'; type ColumnType = 'unanalyzed' | 'analyzing' | 'completed'; interface Task { id: string; name: string; type: TaskType; status: TaskStatus; agent?: string; scene?: string; participants?: string[]; currentPhase?: string; currentRound?: number; summary?: string; creator: string; createTime: string; updateTime: string; column: ColumnType; } const TaskListPage: React.FC = ({ title, category, subCategory, onNavigate }) => { const { theme } = useTheme(); const isDark = theme === 'dark'; // 主题颜色变量 const cardBg = isDark ? 'bg-slate-800/30' : 'bg-white'; const cardBorder = isDark ? 'border-blue-800/30' : 'border-red-100'; const textPrimary = isDark ? 'text-white' : 'text-gray-900'; const textSecondary = isDark ? 'text-slate-400' : 'text-gray-600'; const textMuted = isDark ? 'text-slate-500' : 'text-gray-400'; const inputBg = isDark ? 'bg-slate-900/50' : 'bg-white'; // 生成模拟数据 const [tasks] = useState([ // 未分析列 { id: '2026-0320-001', name: '端午节品牌传播方案', type: 'scene', scene: '宣传策略生成', status: 'draft', column: 'unanalyzed', summary: '针对端午节品牌活动制定完整传播策略方案', creator: '李策划', createTime: '2026-03-20 10:00', updateTime: '2026-03-20 10:00', }, { id: '2026-0320-002', name: '新品上市用户调研', type: 'single', agent: 'AudienceAgent', status: 'pending', column: 'unanalyzed', summary: '对新品目标用户进行画像分析', creator: '王运营', createTime: '2026-03-20 09:30', updateTime: '2026-03-20 09:30', }, // 分析中列 { id: '2026-0319-001', name: '五四青年节宣传活动策略', type: 'scene', scene: '宣传策略生成', status: 'running', currentPhase: '行为分析', column: 'analyzing', summary: '正在按场景模板执行目标、受众、行为、叙事等分析...', creator: '张策略', createTime: '2026-03-19 10:30', updateTime: '2026-03-20 09:45', }, { id: '2026-0319-002', name: '青年传播方向会商分析', type: 'consultation', participants: ['GoalAgent', 'AudienceAgent', 'NarrativeAgent'], status: 'running', currentRound: 2, column: 'analyzing', summary: '围绕宣传方向、叙事方式和受众切入点开展多视角会商...', creator: '王策划', createTime: '2026-03-19 14:00', updateTime: '2026-03-20 09:00', }, { id: '2026-0318-001', name: '年度品牌升级方案推演', type: 'scene', scene: '宣传方案推演', status: 'paused', currentPhase: '叙事分析', column: 'analyzing', summary: '任务已暂停,等待人工介入确认叙事方向', creator: '王策划', createTime: '2026-03-18 14:00', updateTime: '2026-03-20 08:30', }, // 已完成列 { id: '2026-0318-002', name: '核心受众画像分析', type: 'single', agent: 'AudienceAgent', status: 'completed', column: 'completed', summary: '已完成目标受众识别、关切提炼和阻力分析', creator: '赵运营', createTime: '2026-03-18 09:00', updateTime: '2026-03-18 16:30', }, { id: '2026-0319-003', name: '五四青年节宣传策略', type: 'scene', scene: '宣传策略生成', status: 'completed', column: 'completed', summary: '已完成宣传策略方案生成', creator: '张策略', createTime: '2026-03-19 10:00', updateTime: '2026-03-19 18:00', }, { id: '2026-0319-004', name: '青年品牌传播路径会商', type: 'consultation', participants: ['GoalAgent', 'NarrativeAgent', 'RiskAgent'], status: 'completed', column: 'completed', summary: '已完成多智能体会商,形成结论与分歧报告', creator: '王策划', createTime: '2026-03-19 14:30', updateTime: '2026-03-19 17:00', }, ]); const [searchQuery, setSearchQuery] = useState(''); const [modeFilter, setModeFilter] = useState('all'); const [showAnalysisModal, setShowAnalysisModal] = useState(false); const [selectedTaskForAnalysis, setSelectedTaskForAnalysis] = useState(null); // 获取任务类型配置 const getTypeConfig = (type: TaskType) => { if (isDark) { switch (type) { case 'single': return { label: '单智能体', color: 'bg-cyan-500/20 text-cyan-400', icon: Bot }; case 'scene': return { label: '场景执行', color: 'bg-purple-500/20 text-purple-400', icon: Workflow }; case 'consultation': return { label: '多智能体会商', color: 'bg-orange-500/20 text-orange-400', icon: Users }; case 'multi-agent': return { label: '多智能体协同', color: 'bg-green-500/20 text-green-400', icon: Layers }; } } else { switch (type) { case 'single': return { label: '单智能体', color: 'bg-blue-100 text-blue-600', icon: Bot }; case 'scene': return { label: '场景执行', color: 'bg-purple-100 text-purple-600', icon: Workflow }; case 'consultation': return { label: '多智能体会商', color: 'bg-orange-100 text-orange-600', icon: Users }; case 'multi-agent': return { label: '多智能体协同', color: 'bg-green-100 text-green-600', icon: Layers }; } } }; // 获取状态配置 const getStatusConfig = (status: TaskStatus, column: ColumnType) => { if (column === 'unanalyzed') { switch (status) { case 'draft': return { label: '草稿', color: isDark ? 'bg-slate-500/20 text-slate-400' : 'bg-gray-100 text-gray-600' }; case 'pending': return { label: '待启动', color: isDark ? 'bg-slate-500/20 text-slate-400' : 'bg-gray-100 text-gray-600' }; default: return { label: '待配置', color: isDark ? 'bg-yellow-500/20 text-yellow-400' : 'bg-yellow-100 text-yellow-600' }; } } else if (column === 'analyzing') { switch (status) { case 'running': return { label: '运行中', color: isDark ? 'bg-blue-500/20 text-blue-400' : 'bg-red-100 text-red-600' }; case 'paused': return { label: '已暂停', color: isDark ? 'bg-yellow-500/20 text-yellow-400' : 'bg-yellow-100 text-yellow-600' }; case 'blocked': return { label: '阻塞中', color: isDark ? 'bg-red-500/20 text-red-400' : 'bg-orange-100 text-orange-600' }; default: return { label: '待处理', color: isDark ? 'bg-purple-500/20 text-purple-400' : 'bg-purple-100 text-purple-600' }; } } else { return { label: '已完成', color: isDark ? 'bg-green-500/20 text-green-400' : 'bg-green-100 text-green-600' }; } }; // 筛选任务 const filteredTasks = tasks.filter(task => { const matchesSearch = task.name.toLowerCase().includes(searchQuery.toLowerCase()) || task.id.toLowerCase().includes(searchQuery.toLowerCase()); const matchesMode = modeFilter === 'all' || task.type === modeFilter; return matchesSearch && matchesMode; }); const unanalyzedTasks = filteredTasks.filter(t => t.column === 'unanalyzed'); const analyzingTasks = filteredTasks.filter(t => t.column === 'analyzing'); const completedTasks = filteredTasks.filter(t => t.column === 'completed'); // 统计数据 const stats = { total: tasks.length, unanalyzed: unanalyzedTasks.length, analyzing: analyzingTasks.length, completed: completedTasks.length, }; // 处理开始分析按钮点击 const handleStartAnalysis = (task: Task) => { setSelectedTaskForAnalysis(task); setShowAnalysisModal(true); }; // 处理分析模式选择 const handleSelectAnalysisMode = (mode: TaskType) => { setShowAnalysisModal(false); if (mode === 'single') { onNavigate('task-single'); } else if (mode === 'scene') { onNavigate('task-scene'); } else if (mode === 'consultation') { onNavigate('task-consult-create'); } else if (mode === 'multi-agent') { onNavigate('multi-agent-qa'); } }; // 处理卡片点击 const handleTaskClick = (task: Task) => { if (task.column === 'completed') { if (task.type === 'consultation') { onNavigate('task-consult-result'); } else { onNavigate('strategy-result'); } } else if (task.column === 'analyzing') { if (task.type === 'scene') { onNavigate('task-scene'); } else if (task.type === 'consultation') { onNavigate('task-consult'); } else { onNavigate('task-single'); } } }; // 渲染任务卡片 const TaskCard = ({ task }: { task: Task }) => { const typeConfig = getTypeConfig(task.type); const statusConfig = getStatusConfig(task.status, task.column); const TypeIcon = typeConfig.icon; return (
handleTaskClick(task)} > {/* 卡片头部:模式标签 + 状态标签 */}
{typeConfig.label} {statusConfig.label}
{/* 任务名称 */}

{task.name}

{/* 任务编号 */}

TASK-{task.id}

{/* 任务摘要 */}

{task.summary}

{/* 补充信息区 */}
{task.type === 'single' && task.agent && (
执行智能体: {task.agent}
)} {task.type === 'scene' && task.scene && (
关联场景: {task.scene}
)} {task.type === 'consultation' && ( <>
参与智能体: {task.participants?.length || 0}个
{task.currentRound && (
当前轮次: 第{task.currentRound}轮
)} )} {task.column === 'analyzing' && task.currentPhase && (
当前阶段: {task.currentPhase}
)}
{/* 时间信息 */}
{task.creator}
{task.column === 'completed' ? `完成于 ${task.updateTime}` : `更新于 ${task.updateTime}`}
{/* 操作按钮区 */}
{task.column === 'unanalyzed' && ( <> )} {task.column === 'analyzing' && ( <> )} {task.column === 'completed' && ( <> )}
); }; // 渲染看板列 const KanbanColumn = ({ title, count, color, tasks }: { title: string; count: number; color: string; tasks: Task[] }) => (

{title}

{count}
{tasks.length === 0 ? (

暂无任务

) : ( tasks.map(task => ) )}
); return (
{/* 顶部工具栏 */}
{category} / {subCategory}

任务中心

{/* 搜索和筛选 */}
setSearchQuery(e.target.value)} className={`w-full pl-10 pr-4 py-2 border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-red-500/20 transition-colors ${inputBg} ${cardBorder} ${textPrimary} placeholder:${textMuted}`} />
{/* 统计概览栏 */}
{/* 看板区 */}
{/* 选择分析模式弹窗 */} {showAnalysisModal && selectedTaskForAnalysis && (
setShowAnalysisModal(false)}>
e.stopPropagation()} >

选择分析模式

为任务「{selectedTaskForAnalysis.name}」选择分析方式

{/* 单智能体分析 */} {/* 多智能体协同分析 */} {/* 多智能体会商 */} {/* 场景执行 */}
)}
); }; export default TaskListPage;