'use client' import { useState } from 'react' import Link from 'next/link' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card' import { Button } from '@/components/ui/Button' import { SuccessTag, PendingTag, WarningTag } from '@/components/ui/Tag' import { FileText, Search, Filter, Clock, CheckCircle, AlertTriangle, ChevronRight, Settings } from 'lucide-react' // 模拟 Brief 列表 const mockBriefs = [ { id: 'brief-001', projectName: 'XX品牌618推广', brandName: 'XX护肤品牌', status: 'configured', uploadedAt: '2026-02-01', configuredAt: '2026-02-02', creatorCount: 15, sellingPoints: 5, blacklistWords: 12, }, { id: 'brief-002', projectName: '新品口红系列', brandName: 'XX美妆品牌', status: 'pending', uploadedAt: '2026-02-05', configuredAt: null, creatorCount: 0, sellingPoints: 0, blacklistWords: 0, }, { id: 'brief-003', projectName: '护肤品秋季活动', brandName: 'XX护肤品牌', status: 'configured', uploadedAt: '2025-09-15', configuredAt: '2025-09-16', creatorCount: 10, sellingPoints: 4, blacklistWords: 8, }, ] function StatusTag({ status }: { status: string }) { if (status === 'configured') return 已配置 if (status === 'pending') return 待配置 return 处理中 } export default function AgencyBriefsPage() { const [searchQuery, setSearchQuery] = useState('') const [statusFilter, setStatusFilter] = useState('all') const filteredBriefs = mockBriefs.filter(brief => { const matchesSearch = brief.projectName.toLowerCase().includes(searchQuery.toLowerCase()) || brief.brandName.toLowerCase().includes(searchQuery.toLowerCase()) const matchesStatus = statusFilter === 'all' || brief.status === statusFilter return matchesSearch && matchesStatus }) const pendingCount = mockBriefs.filter(b => b.status === 'pending').length const configuredCount = mockBriefs.filter(b => b.status === 'configured').length return ( {/* 页面标题 */} Brief 配置 配置项目 Brief,设置审核规则 {pendingCount} 待配置 {configuredCount} 已配置 {/* 搜索和筛选 */} setSearchQuery(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-border-subtle rounded-lg bg-bg-elevated text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-indigo" /> setStatusFilter('all')} className={`px-4 py-2 rounded-md text-sm font-medium transition-colors ${ statusFilter === 'all' ? 'bg-bg-card text-text-primary shadow-sm' : 'text-text-secondary hover:text-text-primary' }`} > 全部 setStatusFilter('pending')} className={`px-4 py-2 rounded-md text-sm font-medium transition-colors ${ statusFilter === 'pending' ? 'bg-bg-card text-text-primary shadow-sm' : 'text-text-secondary hover:text-text-primary' }`} > 待配置 setStatusFilter('configured')} className={`px-4 py-2 rounded-md text-sm font-medium transition-colors ${ statusFilter === 'configured' ? 'bg-bg-card text-text-primary shadow-sm' : 'text-text-secondary hover:text-text-primary' }`} > 已配置 {/* Brief 列表 */} {filteredBriefs.map((brief) => ( {brief.status === 'configured' ? ( ) : ( )} {brief.projectName} {brief.brandName} 上传于 {brief.uploadedAt} {brief.status === 'configured' && ( {brief.sellingPoints} 卖点 {brief.blacklistWords} 违禁词 {brief.creatorCount} 达人 )} {brief.status === 'pending' ? ( <> 去配置 > ) : ( <> 查看详情 > )} ))} {filteredBriefs.length === 0 && ( 暂无匹配的 Brief )} ) }
配置项目 Brief,设置审核规则
暂无匹配的 Brief