'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 { Modal } from '@/components/ui/Modal' import { Search, Plus, Filter, FileText, Video, ChevronRight, Calendar, Users, Pencil } from 'lucide-react' // 项目类型定义 interface Project { id: string name: string status: string deadline: string scriptCount: { total: number; passed: number; pending: number; rejected: number } videoCount: { total: number; passed: number; pending: number; rejected: number } agencyCount: number creatorCount: number } // 模拟项目数据 const initialProjects: Project[] = [ { 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, onEditDeadline }: { project: Project; onEditDeadline: (project: Project) => void }) { 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} { e.preventDefault() e.stopPropagation() onEditDeadline(project) }} className="p-1 rounded hover:bg-bg-page transition-colors" title="修改截止日期" > {/* 脚本进度 */} 脚本审核 {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 [projects, setProjects] = useState(initialProjects) // 编辑截止日期相关状态 const [showDeadlineModal, setShowDeadlineModal] = useState(false) const [editingProject, setEditingProject] = useState(null) const [newDeadline, setNewDeadline] = useState('') // 打开编辑截止日期弹窗 const handleEditDeadline = (project: Project) => { setEditingProject(project) setNewDeadline(project.deadline) setShowDeadlineModal(true) } // 保存截止日期 const handleSaveDeadline = () => { if (!editingProject || !newDeadline) return setProjects(prev => prev.map(p => p.id === editingProject.id ? { ...p, deadline: newDeadline } : p )) setShowDeadlineModal(false) setEditingProject(null) setNewDeadline('') } const filteredProjects = projects.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 && ( 暂无匹配的项目 创建新项目 )} {/* 编辑截止日期弹窗 */} { setShowDeadlineModal(false) setEditingProject(null) setNewDeadline('') }} title="修改截止日期" > {editingProject && ( 项目名称 {editingProject.name} )} 新截止日期 setNewDeadline(e.target.value)} className="w-full pl-12 pr-4 py-3 border border-border-subtle rounded-lg bg-bg-elevated text-text-primary focus:outline-none focus:ring-2 focus:ring-accent-indigo" /> { setShowDeadlineModal(false) setEditingProject(null) setNewDeadline('') }} > 取消 保存 ) }
管理所有营销项目的审核进度
暂无匹配的项目
项目名称
{editingProject.name}