import { useQuery, useQueryClient } from '@tanstack/react-query' import { App, Button, Card, Descriptions, Form, InputNumber, Space, Table, Tag } from 'antd' import { useEffect, useState } from 'react' import { fetchAdminWorkCategories, fetchAdminWorkerHallConfig, saveAdminWorkerHallConfig, } from '@/services/admin' import type { WorkCategory } from '@/types/worker-platform' type HallConfigFormValues = { maxVisibleOrders: number categoryMaxVisibleOrders: Record } export default function HallConfigPanel() { const { message } = App.useApp() const queryClient = useQueryClient() const [form] = Form.useForm() const [saving, setSaving] = useState(false) const configQuery = useQuery({ queryKey: ['admin-worker-hall-config'], queryFn: fetchAdminWorkerHallConfig, }) const config = configQuery.data?.data useEffect(() => { if (config) { form.setFieldsValue({ maxVisibleOrders: config.maxVisibleOrders, categoryMaxVisibleOrders: config.categoryMaxVisibleOrders || {}, }) } }, [config, form]) const categoriesQuery = useQuery({ queryKey: ['admin-worker-platform-categories'], queryFn: fetchAdminWorkCategories, }) async function saveConfig(values: HallConfigFormValues) { setSaving(true) try { await saveAdminWorkerHallConfig({ maxVisibleOrders: Number(values.maxVisibleOrders), categoryMaxVisibleOrders: values.categoryMaxVisibleOrders || {}, }) await Promise.all([ queryClient.invalidateQueries({ queryKey: ['admin-worker-hall-config'] }), queryClient.invalidateQueries({ queryKey: ['admin-worker-platform-summary'] }), ]) message.success('大厅配置已保存') } catch (error) { message.error(error instanceof Error ? error.message : '保存大厅配置失败') } finally { setSaving(false) } } return ( {config?.visibleOrderCount || 0} {config?.queuedOrderCount || 0} {config?.maxVisibleOrders || '-'}
分类上限 未填写的分类沿用大厅总上限;填写后仅限制该分类最多展示数量。
rowKey="categoryId" size="small" pagination={false} loading={categoriesQuery.isLoading} dataSource={categoriesQuery.data?.data.items || []} columns={[ { title: '分类', dataIndex: 'name' }, { title: '状态', render: (_, category) => ( {category.status === 'active' ? '启用' : '停用'} ), }, { title: '最多展示', render: (_, category) => ( ), }, ]} />
) }