import { useEffect, useState, useCallback } from "react"; import { Table, Button, Upload, Space, message, Popconfirm } from "antd"; import { EditOutlined, DeleteOutlined, DownloadOutlined, PlusOutlined } from "@ant-design/icons"; import { useNavigate } from "react-router-dom"; import type { TemplateListItem } from "../types"; import * as templateApi from "../api/templates"; export default function TemplateList() { const navigate = useNavigate(); const [templates, setTemplates] = useState([]); const [loading, setLoading] = useState(false); const fetchTemplates = useCallback(async () => { setLoading(true); try { const data = await templateApi.listTemplates(); setTemplates(data); } catch { message.error("获取模板列表失败"); } finally { setLoading(false); } }, []); useEffect(() => { fetchTemplates(); }, [fetchTemplates]); const handleDelete = async (id: string) => { await templateApi.deleteTemplate(id); message.success("删除成功"); fetchTemplates(); }; const columns = [ { title: "模板名称", dataIndex: "name", key: "name" }, { title: "创建时间", dataIndex: "created_at", key: "created_at", render: (v: string) => new Date(v).toLocaleString(), }, { title: "更新时间", dataIndex: "updated_at", key: "updated_at", render: (v: string) => new Date(v).toLocaleString(), }, { title: "操作", key: "actions", width: 240, render: (_: unknown, record: TemplateListItem) => ( handleDelete(record.id)}> ); }