import { useEffect, useState, useCallback } from 'react'; import { Table, Button, Modal, Form, Input, Select, message, Tag, Card } from 'antd'; import { PlusOutlined } from '@ant-design/icons'; import type { ColumnsType } from 'antd/es/table'; import { listTemplates, createTemplate, type MessageTemplateInfo } from '../../api/messageTemplates'; import { AuthButton } from '../../components/AuthButton'; const channelMap: Record = { in_app: { label: '站内', color: '#2563eb' }, email: { label: '邮件', color: '#059669' }, sms: { label: '短信', color: '#d97706' }, wechat: { label: '微信', color: '#7C3AED' }, }; export default function MessageTemplates() { const [data, setData] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(false); const [modalOpen, setModalOpen] = useState(false); const [form] = Form.useForm(); const fetchData = useCallback(async (p = page) => { setLoading(true); try { const result = await listTemplates(p, 20); setData(result.data); setTotal(result.total); } catch { message.error('加载模板列表失败'); } finally { setLoading(false); } }, [page]); useEffect(() => { fetchData(1); }, [fetchData]); const handleCreate = async () => { try { const values = await form.validateFields(); await createTemplate(values); message.success('模板创建成功'); setModalOpen(false); form.resetFields(); fetchData(); } catch { message.error('创建失败'); } }; const columns: ColumnsType = [ { title: '名称', dataIndex: 'name', key: 'name', render: (v: string) => {v}, }, { title: '编码', dataIndex: 'code', key: 'code', render: (v: string) => ( {v} ), }, { title: '通道', dataIndex: 'channel', key: 'channel', width: 90, render: (c: string) => { const info = channelMap[c] || { label: c, color: '#475569' }; return ( {info.label} ); }, }, { title: '标题模板', dataIndex: 'title_template', key: 'title_template', ellipsis: true, }, { title: '语言', dataIndex: 'language', key: 'language', width: 80, }, { title: '创建时间', dataIndex: 'created_at', key: 'created_at', width: 180, render: (v: string) => ( {v} ), }, ]; return (
共 {total} 个模板
{ setPage(p); fetchData(p); }, showTotal: (t) => `共 ${t} 条记录`, }} /> { setModalOpen(false); form.resetFields(); }} width={520} >