import { useState } from 'react'; import { Button, Descriptions, Drawer, Form, Select, Table, Typography, message } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { request } from '../lib/api'; import { fmtTime } from '../lib/constants'; import { useAdminList } from '../lib/useAdminList'; type Row = { id: string; ticketNo: string; ticketType: string; status: string; refType: string; refId: string; remark?: string; createdAt: string; }; export default function TicketsPage() { const [filters, setFilters] = useState>({}); const { data, loading, page, pageSize, setPage, setPageSize, reload } = useAdminList( '/admin/tickets', () => { const qs = new URLSearchParams(); if (filters.ticketType) qs.set('ticketType', filters.ticketType); if (filters.status) qs.set('status', filters.status); return qs; }, [filters], ); const [detail, setDetail] = useState | null>(null); const [drawerOpen, setDrawerOpen] = useState(false); async function approve(id: string) { await request(`/admin/tickets/${id}/approve`, { method: 'POST', body: JSON.stringify({}) }); message.success('已审批通过'); reload(); setDrawerOpen(false); } async function reject(id: string) { await request(`/admin/tickets/${id}/reject`, { method: 'POST', body: JSON.stringify({ remark: '驳回' }), }); message.success('已驳回'); reload(); setDrawerOpen(false); } const columns: ColumnsType = [ { title: '工单号', dataIndex: 'ticketNo', width: 180 }, { title: '类型', dataIndex: 'ticketType', width: 100 }, { title: '状态', dataIndex: 'status', width: 90 }, { title: '关联', width: 140, render: (_, r) => `${r.refType}#${r.refId}` }, { title: '备注', dataIndex: 'remark', ellipsis: true }, { title: '时间', dataIndex: 'createdAt', width: 160, render: fmtTime }, { title: '操作', width: 80, render: (_, row) => ( ), }, ]; return (
工单中心
{ setFilters(v); setPage(1); }}>
{ setPage(p); setPageSize(ps); } }} /> setDrawerOpen(false)} extra={detail && (detail.status === 'PENDING' || detail.status === 'OPEN') ? ( <> ) : null}> {detail && ( {String(detail.ticketNo)} {String(detail.ticketType)} {String(detail.status)} {String(detail.refType)} #{String(detail.refId)} {String(detail.remark ?? '—')} )} ); }