import { useRef, useState, useMemo } from "react"; import { Table, Button, Space, Popconfirm, Flex, message, Tooltip } from "antd"; import { EditOutlined, DeleteOutlined, PlusOutlined } from "@ant-design/icons"; import { useQuery, useMutation } from "@tanstack/react-query"; import { GetVqdTask, DeleteVqdTask } from "../api/vqdtask"; import type { VqdTaskItem } from "../types/vqdtask"; import type { ColumnsType } from "antd/es/table"; import AddVqdTask, { AddVqdTaskRef } from "./AddVqdTask"; import { useGlobal } from "../Context"; import { FormatFileSizeToString } from "../utils/rate"; import { formatSecondsToHMS } from "../utils/time"; import Filter from "./Filter"; export default function VqdTaskPage() { const { ErrorHandle } = useGlobal(); const dialogRef = useRef(null); const [pagination, setPagination] = useState({ page: 1, size: 10, name: "" }); // 获取任务列表 const { data: storageResponse, isLoading, refetch, } = useQuery({ queryKey: ["storage", pagination], queryFn: () => GetVqdTask({ ...pagination }) .then((res) => res.data) .catch((err) => { ErrorHandle(err); throw err; }), // refetchInterval: 4000, retry: 2, }); // 删除任务 const [delLoadings, setDelLoadings] = useState([]); const { mutate: deleteMutation } = useMutation({ mutationFn: DeleteVqdTask, onMutate: (id: number) => { setDelLoadings((prev) => [...prev, id]); }, onSuccess: (_, ctx) => { setDelLoadings((prev) => prev.filter((item) => item !== ctx)); message.success("删除成功"); refetch(); }, onError: (error: Error, ctx) => { setDelLoadings((prev) => prev.filter((item) => item !== ctx)); ErrorHandle(error); }, }); // 打开新增模态框 const handleAdd = () => { dialogRef.current?.open(); }; // 打开编辑模态框 const handleEdit = (disk: VqdTaskItem) => { dialogRef.current?.open(disk); }; // 处理分页变化 const handleTableChange = (page: number, pageSize?: number) => { setPagination((prev) => ({ ...prev, page: page, size: pageSize || prev.size, })); }; // 客户端分页数据 const dataSource = useMemo(() => { const items = storageResponse?.items || []; const start = (pagination.page - 1) * pagination.size; const end = start + pagination.size; return items.slice(start, end); }, [storageResponse, pagination]); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const rowSelection = { selectedRowKeys, onChange: ( newSelectedRowKeys: React.Key[], selectedRows: VqdTaskItem[] ) => { setSelectedRowKeys([...newSelectedRowKeys]); }, }; // 表格列定义 const columns: ColumnsType = [ { title: "名称", dataIndex: "name", align: "center", }, { title: "关联通道", dataIndex: "channel_name", align: "center", render: (text, record) => ( {text} ), }, { title: "模板", dataIndex: "task_template_name", align: "center", render: (text, record) => ( {text} ), }, { title: "描述", dataIndex: "des", align: "center", }, { title: "创建日期", dataIndex: "created_at", align: "center", render: (text: string) => (text ? new Date(text).toLocaleString() : "-"), }, { title: "操作", align: "center", width: 120, fixed: "right", render: (_, record) => ( {/* { }} okText="确定" cancelText="取消" > */} { setPagination({ ...pagination, name: value }); }} /> {/* 表格 */} `共 ${total} 条`, onChange: handleTableChange, onShowSizeChange: handleTableChange, }} /> {/* 编辑模态框 */} refetch()} /> ); }