import { useState } from 'react'; import { Button, Descriptions, Drawer, Form, Input, InputNumber, Modal, Select, Space, Table, Tag, Typography, message, } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { request, type Paginated } from '../lib/api'; import { CITY_STATUS_LABELS, fmtTime } from '../lib/constants'; import { useAdminList } from '../lib/useAdminList'; type Row = { id: string; code: string; name: string; province: string; status: string; storeCount: number; orderCount: number; createdAt: string; partner?: { id: string; companyName: string }; }; type PartnerOption = { id: string; companyName: string }; export default function CitiesPage() { const [form] = Form.useForm(); const [editForm] = Form.useForm(); const [createForm] = Form.useForm(); const [filters, setFilters] = useState>({}); const { data, loading, page, pageSize, setPage, setPageSize, reload } = useAdminList( '/admin/cities', () => { const qs = new URLSearchParams(); if (filters.name) qs.set('name', filters.name); if (filters.code) qs.set('code', filters.code); if (filters.status) qs.set('status', filters.status); return qs; }, [filters], ); const [detail, setDetail] = useState | null>(null); const [drawerOpen, setDrawerOpen] = useState(false); const [createOpen, setCreateOpen] = useState(false); const [partners, setPartners] = useState([]); async function loadPartners() { const res = await request>('/admin/partners?pageSize=200'); setPartners(res.items); } const columns: ColumnsType = [ { title: '编码', dataIndex: 'code', width: 90 }, { title: '城市', dataIndex: 'name', width: 100 }, { title: '省份', dataIndex: 'province', width: 90 }, { title: '状态', dataIndex: 'status', width: 90, render: (s) => {CITY_STATUS_LABELS[s] || s} }, { title: '开城合伙人', dataIndex: ['partner', 'companyName'], width: 140, ellipsis: true }, { title: '门店', dataIndex: 'storeCount', width: 70 }, { title: '订单', dataIndex: 'orderCount', width: 70 }, { title: '创建', dataIndex: 'createdAt', width: 160, render: fmtTime }, { title: '操作', width: 80, render: (_, row) => ( ), }, ]; return (
开城城市
{ setFilters(v); setPage(1); }}> ({ value, label }))} />
)} setCreateOpen(false)} onOk={async () => { const v = await createForm.validateFields(); await request('/admin/cities', { method: 'POST', body: JSON.stringify(v) }); message.success('已创建'); setCreateOpen(false); createForm.resetFields(); void reload(); }}>
({ value, label }))} />
); }