import { useCallback, useEffect, useState } from 'react'; import { useSearchParams } from 'react-router-dom'; import { Card, Descriptions, Drawer, Select, Space, Table, Tag } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { request } from '../lib/api'; import { fmtTime } from '../lib/constants'; type Row = { id: string; eventType: string; refType: string; refId: string; status?: string | null; param1?: string | null; param2?: string | null; param3?: string | null; remark?: string | null; createdAt: string; }; const EVENT_OPTIONS = [ { value: '', label: '全部领域事件' }, { value: 'ORDER_STATUS', label: '订单状态' }, { value: 'BENEFIT_LEDGER', label: '权益流水' }, { value: 'STORE_AUDIT', label: '门店审核' }, { value: 'TICKET_COLLAB', label: '工单协作' }, { value: 'PROMO_TOUCH', label: '推广触达' }, ]; export default function DomainEventsPage() { const [params, setParams] = useSearchParams(); const eventType = params.get('eventType') ?? ''; const refType = params.get('refType') ?? ''; const refId = params.get('refId') ?? ''; const [data, setData] = useState<{ items: Row[]; total: number; page: number; pageSize: number } | null>(null); const [loading, setLoading] = useState(false); const [detail, setDetail] = useState(null); const load = useCallback(() => { setLoading(true); const q = new URLSearchParams(); if (eventType) q.set('eventType', eventType); if (refType) q.set('refType', refType); if (refId) q.set('refId', refId); q.set('page', params.get('page') ?? '1'); q.set('pageSize', '20'); request<{ items: Row[]; total: number; page: number; pageSize: number }>( `/admin/logs/domain-events?${q.toString()}`, ) .then(setData) .finally(() => setLoading(false)); }, [eventType, refType, refId, params]); useEffect(() => { load(); }, [load]); const columns: ColumnsType = [ { title: '时间', dataIndex: 'createdAt', width: 170, render: (v) => fmtTime(v) }, { title: '类型', dataIndex: 'eventType', width: 130, render: (v) => {v} }, { title: '关联', render: (_, r) => `${r.refType} #${r.refId}` }, { title: '状态', dataIndex: 'status', width: 100 }, { title: '摘要', render: (_, r) => r.param1 || r.remark || '—' }, { title: '操作', width: 80, render: (_, r) => ( { setDetail(await request(`/admin/logs/domain-events/${r.id}`)); }} > 详情 ), }, ]; return (