import { useCallback, useState } from 'react'; import { View, Text, Image } from '@tarojs/components'; import Taro, { useDidShow, useRouter } from '@tarojs/taro'; import PageShell from '../../components/PageShell'; import SubPageHeader from '../../components/SubPageHeader'; import { request, toast } from '../../lib/api'; import { getProductMainImage } from '../../lib/product-images'; type OrderDetail = { id: string; orderNo?: string; status?: string; payAmount?: number | string; productName?: string; productSpec?: string; quantity?: number; product?: { name?: string; spec?: string; mainImageUrl?: string | null; carouselUrls?: string[] | null; }; imageUrl?: string | null; mainImageUrl?: string | null; }; export default function PickupReceivePage() { const router = useRouter(); const orderId = router.params.id ?? router.params.orderId ?? ''; const [order, setOrder] = useState(null); const [loading, setLoading] = useState(false); const [submitting, setSubmitting] = useState(false); const load = useCallback(() => { if (!orderId) return; setLoading(true); request(`/trade/orders/${orderId}`) .then((data) => setOrder(data)) .catch((e) => toast(e instanceof Error ? e.message : '加载失败')) .finally(() => setLoading(false)); }, [orderId]); useDidShow(() => { load(); }); async function confirmReceive() { if (!orderId || submitting) return; setSubmitting(true); try { await request(`/trade/orders/${orderId}/confirm-receive`, { method: 'POST', data: {}, }); toast('确认收货成功', 'success'); setTimeout(() => { Taro.redirectTo({ url: '/pages/orders/index?tab=done' }); }, 500); } catch (e) { toast(e instanceof Error ? e.message : '确认失败'); } finally { setSubmitting(false); } } const name = order?.productName || order?.product?.name || '商品'; const spec = order?.productSpec || order?.product?.spec; const image = order?.mainImageUrl || order?.imageUrl || (order?.product ? getProductMainImage(order.product) : '') || ''; const amount = Number(order?.payAmount ?? 0); const canConfirm = order?.status === 'PENDING_RECEIVE' || order?.status === 'DELIVERED'; return ( 现场取货 请确认已在现场拿到商品后再点击确认收货 {loading && !order ? ( 加载中… ) : null} {order ? ( <> 订单号 {order.orderNo || '—'} {image ? ( ) : null} {name} {spec ? {spec} : null} ×{order.quantity ?? 1} 实付金额 ¥{Number.isFinite(amount) ? amount.toFixed(2) : '—'} ) : null} { if (!canConfirm || submitting) return; void confirmReceive(); }} > {submitting ? '提交中…' : canConfirm ? '确认收货' : '订单状态不可确认'} ); }