import { useEffect, useState } from 'react'; import { View, Text, Button } from '@tarojs/components'; import { useRouter } from '@tarojs/taro'; import HqHeader from '../../components/HqHeader'; import { request, toast } from '../../lib/api'; import { ORDER_STATUS_LABELS, badgeClass, fmtMoney, fmtTime } from '../../lib/constants'; type StatusLog = { fromStatus?: string; toStatus?: string; createdAt: string }; type OrderDetail = { id: string; orderNo: string; status: string; payAmount: number | string; totalAmount?: number | string; quantity?: number; receiverName?: string; receiverPhone?: string; receiverAddress?: string; createdAt: string; product?: { name: string; skuCode: string }; city?: { name: string }; delivery?: { provider?: string; trackingNo?: string } | null; statusLogs?: StatusLog[]; }; const NEXT: Record> = { PENDING_SHIP: [{ status: 'OUT_WAREHOUSE', label: '标记出库' }], OUT_WAREHOUSE: [{ status: 'SHIPPING', label: '标记配送中' }], SHIPPING: [{ status: 'PENDING_RECEIVE', label: '标记待收货' }], PENDING_RECEIVE: [{ status: 'COMPLETED', label: '标记已完成' }], }; export default function OrderDetailPage() { const router = useRouter(); const id = router.params.id; const [order, setOrder] = useState(null); const [saving, setSaving] = useState(false); function load() { if (!id) return; request(`/admin/orders/${id}`).then(setOrder).catch(() => undefined); } useEffect(load, [id]); async function transition(status: string) { if (!id || saving) return; setSaving(true); try { const d = await request(`/admin/orders/${id}/status`, { method: 'PUT', data: { status } }); setOrder(d); toast('订单状态已更新', 'success'); } catch (e) { toast(e instanceof Error ? e.message : '操作失败'); } finally { setSaving(false); } } const actions = order ? NEXT[order.status] ?? [] : []; return ( {!order && 加载中…} {order && ( <> {order.orderNo} {ORDER_STATUS_LABELS[order.status] || order.status} {order.product?.name || '—'} SKU {order.product?.skuCode || '—'} · 数量 {order.quantity ?? 1} 实付金额 ¥{fmtMoney(order.payAmount)} 收货人 {order.receiverName || '—'} {order.receiverPhone || ''} 收货地址 {order.receiverAddress || '—'} 所属城市 {order.city?.name || '—'} 物流 {order.delivery?.provider || '—'} {order.delivery?.trackingNo || ''} 状态流转 {(order.statusLogs ?? []).length === 0 && 暂无记录} {(order.statusLogs ?? []).map((log, i) => ( {ORDER_STATUS_LABELS[log.toStatus || ''] || log.toStatus} {fmtTime(log.createdAt)} ))} {actions.length > 0 && ( {actions.map((a) => ( ))} )} )} ); }