"use client"; import { useState } from "react"; import Link from "next/link"; import { DataTable, Column } from "@/components/admin/common/DataTable"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Progress } from "@/components/ui/progress"; import { MoreHorizontal, Eye, Trash2, FolderOpen, } from "lucide-react"; import { useAdminProjects, useDeleteAdminProject, AdminProject, AdminProjectFilters, } from "@/lib/hooks/admin/useAdminProjects"; import { useConfirm } from "@/components/ui/confirm-dialog"; interface ProjectTableProps { filters?: AdminProjectFilters; } export function ProjectTable({ filters = {} }: ProjectTableProps) { const [page, setPage] = useState(1); const { confirm, ConfirmDialog } = useConfirm(); const { data, isLoading } = useAdminProjects({ ...filters, page, page_size: 20, }); const deleteMutation = useDeleteAdminProject(); const handleDelete = (project: AdminProject) => { confirm({ title: "确认删除项目?", description: `确定要删除项目 "${project.name}" 吗?此操作无法撤销。`, variant: "destructive", onConfirm: () => deleteMutation.mutate(project.id), }); }; const getStatusBadge = (status: string) => { const variants: Record = { active: { variant: "default", label: "进行中" }, archived: { variant: "secondary", label: "已归档" }, deleted: { variant: "destructive", label: "已删除" }, }; const config = variants[status] || { variant: "outline", label: status }; return {config.label}; }; const getTypeBadge = (type: string) => { const labels: Record = { video: "视频", comic: "漫画", }; return {labels[type] || type}; }; const columns: Column[] = [ { key: "name", header: "项目名称", width: "25%", render: (project) => (
{project.name} {project.description && ( {project.description} )}
), }, { key: "owner", header: "所有者", width: "15%", render: (project) => (
{project.ownerName || "未知用户"} {project.ownerEmail && ( {project.ownerEmail} )}
), }, { key: "type", header: "类型", width: "10%", render: (project) => getTypeBadge(project.type), }, { key: "status", header: "状态", width: "10%", render: (project) => getStatusBadge(project.status), }, { key: "progress", header: "进度", width: "15%", render: (project) => (
{project.progress || 0}%
), }, { key: "created_at", header: "创建时间", width: "15%", render: (project) => ( {project.createdAt ? new Date(project.createdAt).toLocaleDateString("zh-CN") : "-"} ), }, { key: "actions", header: "操作", width: "10%", render: (project) => ( 查看详情 打开项目 handleDelete(project)} > 删除项目 ), }, ]; return ( <> item.id} isLoading={isLoading} emptyMessage="暂无项目数据" pagination={ data?.pagination ? { page, pageSize: 20, total: data.pagination.total, onPageChange: setPage, } : undefined } /> ); }