'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" /> setStatusFilter(e.target.value)} className="px-3 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 && ( 暂无匹配的项目 创建新项目 )} ) }
管理所有营销项目的审核进度
暂无匹配的项目