'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 { Input } from '@/components/ui/Input' import { SuccessTag, PendingTag, WarningTag } from '@/components/ui/Tag' import { Search, Plus, Filter, FileText, Video, ChevronRight, Calendar, Users } from 'lucide-react' // 模拟项目数据 const mockProjects = [ { id: 'proj-001', name: 'XX品牌618推广', status: 'active', deadline: '2026-06-18', scriptCount: { total: 20, passed: 15, pending: 3, rejected: 2 }, videoCount: { total: 20, passed: 12, pending: 5, rejected: 3 }, agencyCount: 3, creatorCount: 15, }, { id: 'proj-002', name: '新品口红系列', status: 'active', deadline: '2026-03-15', scriptCount: { total: 12, passed: 10, pending: 1, rejected: 1 }, videoCount: { total: 12, passed: 8, pending: 3, rejected: 1 }, agencyCount: 2, creatorCount: 8, }, { id: 'proj-003', name: '护肤品秋季活动', status: 'completed', deadline: '2025-11-30', scriptCount: { total: 15, passed: 15, pending: 0, rejected: 0 }, videoCount: { total: 15, passed: 15, pending: 0, rejected: 0 }, agencyCount: 2, creatorCount: 10, }, ] function StatusTag({ status }: { status: string }) { if (status === 'active') return 进行中 if (status === 'completed') return 已完成 return 暂停 } function ProjectCard({ project }: { project: typeof mockProjects[0] }) { const scriptProgress = Math.round((project.scriptCount.passed / project.scriptCount.total) * 100) const videoProgress = Math.round((project.videoCount.passed / project.videoCount.total) * 100) return ( {/* 项目头部 */}

{project.name}

截止 {project.deadline}
{/* 脚本进度 */}
脚本审核 {project.scriptCount.passed}/{project.scriptCount.total}
通过 {project.scriptCount.passed} 待审 {project.scriptCount.pending} 驳回 {project.scriptCount.rejected}
{/* 视频进度 */}
{project.videoCount.passed}/{project.videoCount.total}
通过 {project.videoCount.passed} 待审 {project.videoCount.pending} 驳回 {project.videoCount.rejected}
{/* 参与方统计 */}
{project.agencyCount} 代理商 {project.creatorCount} 达人
) } export default function BrandProjectsPage() { const [searchQuery, setSearchQuery] = useState('') const [statusFilter, setStatusFilter] = useState('all') const filteredProjects = mockProjects.filter(project => { const matchesSearch = project.name.toLowerCase().includes(searchQuery.toLowerCase()) const matchesStatus = statusFilter === 'all' || project.status === statusFilter return matchesSearch && matchesStatus }) return (
{/* 页面标题和操作 */}

项目看板

管理所有营销项目的审核进度

{/* 搜索和筛选 */}
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" />
{/* 项目卡片网格 */}
{filteredProjects.map((project) => ( ))}
{filteredProjects.length === 0 && (

暂无匹配的项目

)}
) }