'use client' import { useState } from 'react' import { useRouter, useParams } from 'next/navigation' import { useToast } from '@/components/ui/Toast' import { ArrowLeft, FileText, Download, Eye, Target, Ban, File, Building2, Calendar, Clock, ChevronRight } from 'lucide-react' import { ResponsiveLayout } from '@/components/layout/ResponsiveLayout' import { Modal } from '@/components/ui/Modal' import { Button } from '@/components/ui/Button' // 代理商Brief文档类型 type AgencyBriefFile = { id: string name: string size: string uploadedAt: string description?: string } // 模拟任务数据 const mockTaskInfo = { id: 'task-001', taskName: 'XX品牌618推广', agencyName: '星辰传媒', brandName: 'XX护肤品牌', deadline: '2026-06-18', createdAt: '2026-02-08', } // 模拟代理商Brief数据 const mockAgencyBrief = { files: [ { id: 'af1', name: '达人拍摄指南.pdf', size: '1.5MB', uploadedAt: '2026-02-02', description: '详细的拍摄流程和注意事项' }, { id: 'af2', name: '产品卖点话术.docx', size: '800KB', uploadedAt: '2026-02-02', description: '推荐使用的话术和表达方式' }, { id: 'af3', name: '品牌视觉参考.pdf', size: '3.2MB', uploadedAt: '2026-02-02', description: '视觉风格和拍摄参考示例' }, { id: 'af4', name: '产品素材包.zip', size: '15.6MB', uploadedAt: '2026-02-02', description: '产品图片、视频素材等' }, ] as AgencyBriefFile[], sellingPoints: [ { id: 'sp1', content: 'SPF50+ PA++++', required: true }, { id: 'sp2', content: '轻薄质地,不油腻', required: true }, { id: 'sp3', content: '延展性好,易推开', required: false }, { id: 'sp4', content: '适合敏感肌', required: false }, { id: 'sp5', content: '夏日必备防晒', required: true }, ], blacklistWords: [ { id: 'bw1', word: '最好', reason: '绝对化用语' }, { id: 'bw2', word: '第一', reason: '绝对化用语' }, { id: 'bw3', word: '神器', reason: '夸大宣传' }, { id: 'bw4', word: '完美', reason: '绝对化用语' }, { id: 'bw5', word: '100%', reason: '虚假宣传' }, ], contentRequirements: [ '视频时长:60-90秒', '需展示产品质地和使用效果', '需在户外或阳光下拍摄', '需提及产品核心卖点', ], } export default function TaskBriefPage() { const router = useRouter() const params = useParams() const toast = useToast() const [previewFile, setPreviewFile] = useState(null) const handleDownload = (file: AgencyBriefFile) => { toast.info(`下载文件: ${file.name}`) } const handleDownloadAll = () => { toast.info('下载全部文件') } const requiredPoints = mockAgencyBrief.sellingPoints.filter(sp => sp.required) const optionalPoints = mockAgencyBrief.sellingPoints.filter(sp => !sp.required) return (
{/* 顶部导航 */}

{mockTaskInfo.taskName}

查看任务要求和Brief文档

{/* 任务基本信息 */}

任务信息

代理商

{mockTaskInfo.agencyName}

品牌方

{mockTaskInfo.brandName}

分配时间

{mockTaskInfo.createdAt}

截止日期

{mockTaskInfo.deadline}

{/* 主要内容区域 - 可滚动 */}
{/* Brief文档列表 */}

Brief 文档

({mockAgencyBrief.files.length}个文件)
{mockAgencyBrief.files.map((file) => (

{file.name}

{file.size}

{file.description && (

{file.description}

)}
))}
{/* 内容要求 */}

内容要求

    {mockAgencyBrief.contentRequirements.map((req, index) => (
  • {req}
  • ))}
{/* 卖点要求 */}

卖点要求

{requiredPoints.length > 0 && (

必选卖点(必须在内容中提及)

{requiredPoints.map((sp) => ( {sp.content} ))}
)} {optionalPoints.length > 0 && (

可选卖点(建议提及)

{optionalPoints.map((sp) => ( {sp.content} ))}
)}
{/* 违禁词 */}

违禁词(请勿在内容中使用)

{mockAgencyBrief.blacklistWords.map((bw) => ( 「{bw.word}」{bw.reason} ))}
{/* 底部操作按钮 */}
{/* 文件预览弹窗 */} setPreviewFile(null)} title={previewFile?.name || '文件预览'} size="lg" >

文件预览区域

实际开发中将嵌入文件预览组件

{previewFile && ( )}
) }