import { Button } from "@/components/ui/button"; import { MoreHorizontal, Plus } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { ColumnDef } from "@tanstack/react-table"; import { Workflow as WorkflowType } from "@/domain/workflow"; import { DataTable } from "@/components/workflow/DataTable"; import { useState } from "react"; import { list, remove, save } from "@/repository/workflow"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { Switch } from "@/components/ui/switch"; import { useTranslation } from "react-i18next"; import CustomAlertDialog from "@/components/workflow/CustomAlertDialog"; const Workflow = () => { const navigate = useNavigate(); const [data, setData] = useState([]); const [pageCount, setPageCount] = useState(0); const { t } = useTranslation(); const [alertOpen, setAlertOpen] = useState(false); const [alertProps, setAlertProps] = useState<{ title: string; description: string; onConfirm: () => void; }>(); const fetchData = async (page: number, pageSize?: number) => { const resp = await list({ page: page, perPage: pageSize }); setData(resp.items); setPageCount(resp.totalPages); }; const columns: ColumnDef[] = [ { accessorKey: "name", header: "名称", cell: ({ row }) => { let name: string = row.getValue("name"); if (!name) { name = "未命名工作流"; } return
{name}
; }, }, { accessorKey: "description", header: "描述", cell: ({ row }) => { let description: string = row.getValue("description"); if (!description) { description = "-"; } return description; }, }, { accessorKey: "executionMethod", header: "执行方式", cell: ({ row }) => { const method = row.getValue("executionMethod"); if (!method) { return "-"; } else if (method === "manual") { return "手动"; } else if (method === "auto") { const crontab: string = row.getValue("crontab"); return (
定时
{crontab}
); } }, }, { accessorKey: "enabled", header: "是否启用", cell: ({ row }) => { const enabled: boolean = row.getValue("enabled"); return ( <> { handleCheckedChange(row.original.id ?? ""); }} /> ); }, }, { accessorKey: "created", header: "创建时间", cell: ({ row }) => { const date: string = row.getValue("created"); return new Date(date).toLocaleString(); }, }, { accessorKey: "updated", header: "更新时间", cell: ({ row }) => { const date: string = row.getValue("updated"); return new Date(date).toLocaleString(); }, }, { id: "actions", cell: ({ row }) => { const workflow = row.original; return ( 操作 { navigate(`/workflow/detail?id=${workflow.id}`); }} > 编辑 { handleDeleteClick(workflow.id ?? ""); }} > {t("common.delete")} ); }, }, ]; const handleCheckedChange = async (id: string) => { const resp = await save({ id, enabled: !data.find((item) => item.id === id)?.enabled }); if (resp) { setData((prev) => { return prev.map((item) => { if (item.id === id) { return resp; } return item; }); }); } }; const handleDeleteClick = (id: string) => { setAlertProps({ title: "删除工作流", description: "确定删除工作流吗?", onConfirm: async () => { const resp = await remove(id); if (resp) { setData((prev) => { return prev.filter((item) => item.id !== id); }); } }, }); setAlertOpen(true); }; const handleCreateClick = () => { navigate("/workflow/detail"); }; return ( <>
工作流
); }; export default Workflow;