import { useState } from "react"; import { Button, Form, Input, InputNumber, Message, Modal, Select, Space, Switch, Table, Tag } from "@arco-design/web-react"; import { IconDelete, IconEdit, IconPlus } from "@arco-design/web-react/icon"; import { channelApi } from "../api"; import type { Channel, ChannelQuery, CreateChannelPayload } from "../api"; import { Panel } from "../components/Panel"; import { usePageData } from "../hooks/usePageData"; const INITIAL_QUERY: ChannelQuery = { page: 1, pageSize: 20 }; const CHANNEL_STATUS_LABEL: Record = { active: "启用", disabled: "停用", }; type ChannelFormValues = CreateChannelPayload; export default function ChannelPage() { const { data, loading, reload, changePage } = usePageData(channelApi.listChannels, INITIAL_QUERY); const [createVisible, setCreateVisible] = useState(false); const [editingChannel, setEditingChannel] = useState(null); const [saving, setSaving] = useState(false); const createChannel = async (values: ChannelFormValues) => { setSaving(true); try { await channelApi.createChannel({ ...values, sortOrder: Number(values.sortOrder) || 0, isDefault: Boolean(values.isDefault), status: values.status || "active", }); Message.success("频道创建成功"); setCreateVisible(false); await reload(); } finally { setSaving(false); } }; const updateChannel = async (values: ChannelFormValues) => { if (!editingChannel) { return; } setSaving(true); try { await channelApi.updateChannel(editingChannel.id, { ...values, sortOrder: Number(values.sortOrder) || 0, isDefault: Boolean(values.isDefault), status: values.status || "active", }); Message.success("频道已更新"); setEditingChannel(null); await reload(); } finally { setSaving(false); } }; const deleteChannel = (channel: Channel) => { Modal.confirm({ title: "删除频道", content: `确认删除频道「${channel.name}」?`, okButtonProps: { status: "danger" }, onOk: async () => { await channelApi.deleteChannel(channel.id); Message.success("频道已删除"); await reload(); }, }); }; const renderForm = (onSubmit: (values: ChannelFormValues) => Promise, initialValues: ChannelFormValues) => (
); return (
} onClick={() => setCreateVisible(true)}>新增频道} noPadding> changePage(page, pageSize), }} columns={[ { title: "ID", dataIndex: "id", width: 80 }, { title: "名称", dataIndex: "name" }, { title: "编码", dataIndex: "code", width: 180 }, { title: "排序", dataIndex: "sortOrder", width: 100 }, { title: "默认", dataIndex: "isDefault", width: 100, render: (value) => (value ? : ), }, { title: "状态", dataIndex: "status", width: 100, render: (status) => {CHANNEL_STATUS_LABEL[String(status)] || String(status)}, }, { title: "操作", width: 180, render: (_, record) => ( ), }, ]} /> setCreateVisible(false)} footer={null} style={{ width: 640 }}> {renderForm(createChannel, { sortOrder: 0, status: "active", isDefault: false })} setEditingChannel(null)} footer={null} style={{ width: 640 }}> {editingChannel && renderForm(updateChannel, { name: editingChannel.name, code: editingChannel.code, description: editingChannel.description, sortOrder: editingChannel.sortOrder, status: editingChannel.status, isDefault: editingChannel.isDefault, })} ); }