'use client'
import { useState } from 'react'
import { useRouter, useParams } from 'next/navigation'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card'
import { Button } from '@/components/ui/Button'
import { Modal, ConfirmModal } from '@/components/ui/Modal'
import { SuccessTag, WarningTag, ErrorTag } from '@/components/ui/Tag'
import { ReviewSteps, getAgencyReviewSteps } from '@/components/ui/ReviewSteps'
import {
ArrowLeft,
FileText,
CheckCircle,
XCircle,
AlertTriangle,
User,
Clock,
Eye,
Shield,
Download,
MessageSquareWarning
} from 'lucide-react'
import { FilePreview, FileInfoCard, FilePreviewModal, type FileInfo } from '@/components/ui/FilePreview'
// 模拟脚本任务数据
const mockScriptTask = {
id: 'script-001',
title: '夏日护肤推广脚本',
creatorName: '小美护肤',
projectName: 'XX品牌618推广',
submittedAt: '2026-02-06 14:30',
aiScore: 88,
status: 'agent_reviewing',
// 文件信息
file: {
id: 'file-001',
fileName: '夏日护肤推广_脚本v2.docx',
fileSize: '245 KB',
fileType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
fileUrl: '/demo/scripts/script-001.docx', // 实际开发时替换为真实URL
uploadedAt: '2026-02-06 14:30',
} as FileInfo,
// 申诉信息
isAppeal: false,
appealReason: '',
// 脚本内容(AI解析后的结构化内容,用于展示)
scriptContent: {
opening: '大家好!今天给大家分享一款超级好用的夏日护肤神器~',
productIntro: '这款XX品牌的防晒霜,SPF50+,PA++++,真的是夏天出门必备!质地轻薄不油腻,涂上去清清爽爽的。',
demo: '我先在手背上试一下,大家看,延展性特别好,轻轻一抹就推开了,完全不会搓泥。',
closing: '夏天防晒真的很重要,姐妹们赶紧冲!链接在小黄车1号链接~',
},
aiAnalysis: {
violations: [
{ id: 'v1', type: '违禁词', content: '神器', suggestion: '建议替换为"好物"或"必备品"', severity: 'medium' },
],
complianceChecks: [
{ item: '品牌名称正确', passed: true },
{ item: 'SPF标注准确', passed: true },
{ item: '无绝对化用语', passed: false, note: '"超级好用"建议修改' },
{ item: '引导语规范', passed: true },
],
sellingPoints: [
{ point: 'SPF50+ PA++++', covered: true },
{ point: '轻薄质地', covered: true },
{ point: '不油腻', covered: true },
{ point: '延展性好', covered: true },
],
},
}
function ReviewProgressBar({ taskStatus }: { taskStatus: string }) {
const steps = getAgencyReviewSteps(taskStatus)
const currentStep = steps.find(s => s.status === 'current')
return (
审核流程
当前:{currentStep?.label || '代理商审核'}
)
}
export default function AgencyScriptReviewPage() {
const router = useRouter()
const params = useParams()
const [showApproveModal, setShowApproveModal] = useState(false)
const [showRejectModal, setShowRejectModal] = useState(false)
const [showForcePassModal, setShowForcePassModal] = useState(false)
const [rejectReason, setRejectReason] = useState('')
const [forcePassReason, setForcePassReason] = useState('')
const [viewMode, setViewMode] = useState<'file' | 'parsed'>('file') // 'file' 显示原文件, 'parsed' 显示解析内容
const [showFilePreview, setShowFilePreview] = useState(false)
const task = mockScriptTask
const handleApprove = () => {
setShowApproveModal(false)
alert('已提交品牌方终审!')
router.push('/agency/review')
}
const handleReject = () => {
if (!rejectReason.trim()) {
alert('请填写驳回原因')
return
}
setShowRejectModal(false)
alert('已驳回')
router.push('/agency/review')
}
const handleForcePass = () => {
if (!forcePassReason.trim()) {
alert('请填写强制通过原因')
return
}
setShowForcePassModal(false)
alert('已强制通过并提交品牌方终审!')
router.push('/agency/review')
}
return (
{/* 顶部导航 */}
{task.title}
{task.isAppeal && (
申诉
)}
{task.creatorName}
{task.submittedAt}
{/* 申诉理由 */}
{task.isAppeal && task.appealReason && (
)}
{/* 审核流程进度条 */}
{/* 左侧:脚本内容 */}
{/* 文件信息卡片 */}
setShowFilePreview(true)}
/>
{viewMode === 'file' ? (
文件预览
) : (
AI 解析内容
(AI 自动提取的结构化内容)
开场白
{task.scriptContent.opening}
产品介绍
{task.scriptContent.productIntro}
使用演示
{task.scriptContent.demo}
结尾引导
{task.scriptContent.closing}
)}
{/* 右侧:AI 分析面板 */}
{/* AI 评分 */}
AI 综合评分
= 85 ? 'text-accent-green' : task.aiScore >= 70 ? 'text-yellow-400' : 'text-accent-coral'}`}>
{task.aiScore}
{/* 违规检测 */}
违规检测 ({task.aiAnalysis.violations.length})
{task.aiAnalysis.violations.map((v) => (
{v.type}
「{v.content}」
{v.suggestion}
))}
{task.aiAnalysis.violations.length === 0 && (
未发现违规内容
)}
{/* 合规检查 */}
合规检查
{task.aiAnalysis.complianceChecks.map((check, idx) => (
{check.passed ? (
) : (
)}
{check.item}
{check.note && (
{check.note}
)}
))}
{/* 卖点覆盖 */}
卖点覆盖
{task.aiAnalysis.sellingPoints.map((sp, idx) => (
{sp.covered ? (
) : (
)}
{sp.point}
))}
{/* 底部决策栏 */}
项目:{task.projectName}
{/* 通过确认弹窗 */}
setShowApproveModal(false)}
onConfirm={handleApprove}
title="确认通过"
message="确定要通过此脚本的审核吗?通过后将提交给品牌方进行终审。"
confirmText="确认通过"
/>
{/* 驳回弹窗 */}
setShowRejectModal(false)} title="驳回审核">
请填写驳回原因,达人将收到通知并根据您的反馈进行修改。
{/* 强制通过弹窗 */}
setShowForcePassModal(false)} title="强制通过">
强制通过将跳过问题检测,操作将被记录并提交品牌方终审
{/* 文件预览弹窗 */}
setShowFilePreview(false)}
/>
)
}