import { useState } from 'react'; import { Button, Descriptions, Drawer, Form, Input, Space, Table, Typography, message, } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import OrderTrackDrawer from '../components/OrderTrackDrawer'; import { request } from '../lib/api'; import { ORDER_STATUS_LABELS, fmtTime } from '../lib/constants'; import { useAdminList } from '../lib/useAdminList'; type Row = { id: string; orderId: string; provider: string; trackingNo: string | null; providerOrderNo: string | null; updatedAt: string; order?: { id: string; orderNo: string; status: string; receiverName: string; receiverPhone: string; deliveryType: string; }; }; export default function DeliveriesPage() { const [form] = Form.useForm(); const [editForm] = Form.useForm(); const [filters, setFilters] = useState>({}); const { data, loading, page, pageSize, setPage, setPageSize, reload } = useAdminList( '/admin/deliveries', () => { const qs = new URLSearchParams(); if (filters.provider) qs.set('provider', filters.provider); if (filters.trackingNo) qs.set('trackingNo', filters.trackingNo); if (filters.orderNo) qs.set('orderNo', filters.orderNo); return qs; }, [filters], ); const [detail, setDetail] = useState(null); const [drawerOpen, setDrawerOpen] = useState(false); const [trackOpen, setTrackOpen] = useState(false); const [trackOrderId, setTrackOrderId] = useState(null); const [trackOrderNo, setTrackOrderNo] = useState(null); const [trackOrderStatus, setTrackOrderStatus] = useState(null); function openTrack(row: Row) { const orderId = row.orderId || row.order?.id; if (!orderId) { message.warning('缺少关联订单,无法查询路由'); return; } setTrackOrderId(orderId); setTrackOrderNo(row.order?.orderNo ?? null); setTrackOrderStatus(row.order?.status ?? null); setTrackOpen(true); } const columns: ColumnsType = [ { title: '订单号', dataIndex: ['order', 'orderNo'], width: 170 }, { title: 'provider', dataIndex: 'provider', width: 90 }, { title: '运单号', dataIndex: 'trackingNo', width: 140, render: (v) => v || '—' }, { title: '第三方单号', dataIndex: 'providerOrderNo', width: 140, render: (v) => v || '—' }, { title: '订单状态', dataIndex: ['order', 'status'], width: 100, render: (s) => ORDER_STATUS_LABELS[s] || s }, { title: '收货人', dataIndex: ['order', 'receiverName'], width: 90 }, { title: '更新', dataIndex: 'updatedAt', width: 160, render: fmtTime }, { title: '操作', width: 140, render: (_, row) => ( ), }, ]; return (
快递/配送单
{ setFilters(v); setPage(1); }}>
{ setPage(p); setPageSize(ps); } }} /> setDrawerOpen(false)} extra={ }> {detail && ( <> {detail.order?.orderNo} {detail.order?.receiverName} {detail.order?.receiverPhone}
)}
setTrackOpen(false)} /> ); }