diff --git a/apps/h5-user/src/pages/OrderConfirmPage.tsx b/apps/h5-user/src/pages/OrderConfirmPage.tsx index 115b797..aa9a650 100644 --- a/apps/h5-user/src/pages/OrderConfirmPage.tsx +++ b/apps/h5-user/src/pages/OrderConfirmPage.tsx @@ -70,6 +70,7 @@ export default function OrderConfirmPage() { const [addresses, setAddresses] = useState([]); const [addressId, setAddressId] = useState(params.get('addressId') || ''); const [preview, setPreview] = useState(null); + const [previewLoading, setPreviewLoading] = useState(false); const [loading, setLoading] = useState(false); const [msg, setMsg] = useState(''); @@ -104,13 +105,35 @@ export default function OrderConfirmPage() { }, [refreshProfile]); useEffect(() => { - if (!productId || !addressId) return; + if (!productId) return; + let cancelled = false; + setPreviewLoading(true); + const body: { productId: string; quantity: number; addressId?: string } = { + productId, + quantity, + }; + if (addressId) body.addressId = addressId; + request('USER_H5', '/trade/orders/preview', { method: 'POST', - body: JSON.stringify({ productId, quantity, addressId }), + body: JSON.stringify(body), }) - .then(setPreview) - .catch((e) => setMsg(e instanceof Error ? e.message : String(e))); + .then((data) => { + if (!cancelled) setPreview(data); + }) + .catch((e) => { + if (!cancelled) { + setPreview(null); + setMsg(e instanceof Error ? e.message : String(e)); + } + }) + .finally(() => { + if (!cancelled) setPreviewLoading(false); + }); + + return () => { + cancelled = true; + }; }, [productId, quantity, addressId]); function updateQuantity(next: number) { @@ -331,9 +354,13 @@ export default function OrderConfirmPage() { 配送方式

- {isCross ? '物流配送' : '小飞侠配送'} + {!addressId + ? '选择地址后确认' + : isCross + ? '物流配送' + : '小飞侠配送'}

- {!isCross && ( + {addressId && !isCross && (

预计24小时内送达

)}
@@ -358,10 +385,14 @@ export default function OrderConfirmPage() { )} - {!preview && productId && addressId && ( + {previewLoading && !preview && productId && (
加载订单信息...
)} + {!previewLoading && !preview && productId && ( +
无法加载商品信息
+ )} + {msg &&

{msg}

} @@ -376,10 +407,10 @@ export default function OrderConfirmPage() {