v3.5.4版本提交
CI / verify (pull_request) Has been cancelled

This commit is contained in:
2026-08-21 15:48:15 +08:00
parent 26334ed072
commit a01217539c
32 changed files with 2278 additions and 147 deletions
@@ -32,12 +32,14 @@ type OrderPreview = {
quantityOk?: boolean;
quantityMessage?: string | null;
minQty?: number;
saleUnit?: 'BOTTLE' | 'BOX';
};
export default function OrderConfirmPickupPage() {
const router = useRouter();
const productId = router.params.productId ?? '';
const [quantity, setQuantity] = useState(Math.max(2, Number(router.params.qty || 2)));
const skuId = router.params.skuId ?? '';
const [quantity, setQuantity] = useState(Math.max(1, Number(router.params.qty || 2)));
const [preview, setPreview] = useState<OrderPreview | null>(null);
const [previewLoading, setPreviewLoading] = useState(false);
const [loading, setLoading] = useState(false);
@@ -50,7 +52,7 @@ export default function OrderConfirmPickupPage() {
setPreviewLoading(true);
request<OrderPreview>('/trade/orders/preview', {
method: 'POST',
data: { productId, quantity, onSitePickup: true },
data: { productId, quantity, onSitePickup: true, ...(skuId ? { skuId } : {}) },
})
.then((data) => {
if (!cancelled) {
@@ -70,15 +72,16 @@ export default function OrderConfirmPickupPage() {
return () => {
cancelled = true;
};
}, [productId, quantity]);
}, [productId, skuId, quantity]);
const unitLabel = preview?.saleUnit === 'BOX' ? '箱' : '瓶';
const minQty = preview?.minQty ?? 2;
const quantityOk = preview ? preview.quantityOk !== false && quantity >= minQty : false;
const canSubmit = !!preview && quantityOk && !loading && !previewLoading;
function updateQuantity(next: number) {
if (next < minQty) {
const tip = `现场提货至少购买 ${minQty}`;
const tip = `现场提货至少购买 ${minQty}${unitLabel}`;
toast(tip);
setMsg(tip);
if (next < 1) return;
@@ -91,12 +94,13 @@ export default function OrderConfirmPickupPage() {
async function doSubmit() {
const order = await request<{ id: string }>('/trade/orders', {
method: 'POST',
data: { productId, quantity, onSitePickup: true },
data: { productId, quantity, onSitePickup: true, ...(skuId ? { skuId } : {}) },
});
Taro.redirectTo({
url: buildPayUrl({
orderId: order.id,
productId,
skuId: skuId || undefined,
qty: String(quantity),
}),
});