{p.name}
diff --git a/apps/h5-user/src/pages/OrderConfirmPage.tsx b/apps/h5-user/src/pages/OrderConfirmPage.tsx
index ebb74f9..44528b1 100644
--- a/apps/h5-user/src/pages/OrderConfirmPage.tsx
+++ b/apps/h5-user/src/pages/OrderConfirmPage.tsx
@@ -4,8 +4,6 @@ import SubPageHeader from '../components/SubPageHeader';
import AppImage from '@dukang/shared-ui/AppImage';
import { request } from '../lib/api';
import { buildProductDetailUrl } from '../lib/navigation';
-import { STITCH_ORDER_PRODUCT_IMAGE } from '../lib/order-images';
-import { tryGetClientGpsLocation } from '../lib/client-location';
import { getProductMainImage } from '../lib/product-images';
import PhoneVerifySheet from '../components/PhoneVerifySheet';
import { useUserSession } from '../contexts/UserSessionContext';
@@ -27,6 +25,8 @@ type PreviewProduct = {
spec: string;
subtitle?: string;
price: number;
+ mainImageUrl?: string | null;
+ carouselUrls?: string[] | null;
};
type OrderPreview = {
@@ -113,9 +113,7 @@ export default function OrderConfirmPage() {
const isCross = forceCross || preview?.deliveryType === 'CROSS_CITY';
const minQty = isCross ? (preview?.city?.crossMinQty ?? 6) : (preview?.city?.localMinQty ?? 2);
- const productIndex = productId ? Math.max(0, Number(productId) - 1) : 0;
- const productImage =
- productIndex === 0 ? STITCH_ORDER_PRODUCT_IMAGE : getProductMainImage(productIndex);
+ const productImage = preview?.product ? getProductMainImage(preview.product) : getProductMainImage();
async function doSubmit() {
const clientLocation = await tryGetClientGpsLocation();
diff --git a/apps/h5-user/src/pages/OrderDetailPage.tsx b/apps/h5-user/src/pages/OrderDetailPage.tsx
index 6ebc7ce..eda061f 100644
--- a/apps/h5-user/src/pages/OrderDetailPage.tsx
+++ b/apps/h5-user/src/pages/OrderDetailPage.tsx
@@ -145,6 +145,7 @@ export default function OrderDetailPage() {
const productImage = item?.productImage || STITCH_ORDER_PRODUCT_IMAGE;
const canEditAddress = order ? EDITABLE_STATUSES.has(order.status) : false;
const canConfirmReceive = order?.status === 'PENDING_RECEIVE' && !isReship;
+ const canRefund = order && ['PENDING_SHIP', 'PENDING_RECEIVE', 'COMPLETED', 'OUT_WAREHOUSE', 'SHIPPING'].includes(order.status);
const productTotal = Number(order?.productAmount ?? order?.payAmount ?? 0);
const freightTotal = Number(order?.freightAmount ?? 0);
@@ -174,6 +175,22 @@ export default function OrderDetailPage() {
}
}
+ async function requestRefund() {
+ if (!id || !canRefund) return;
+ setConfirming(true);
+ try {
+ await request('USER_H5', `/trade/orders/${id}/refund-requests`, {
+ method: 'POST',
+ body: JSON.stringify({ remark: '用户申请退款' }),
+ });
+ await loadOrder();
+ } catch (e) {
+ window.alert(e instanceof Error ? e.message : '申请退款失败');
+ } finally {
+ setConfirming(false);
+ }
+ }
+
if (!order) return
加载中...
;
return (
@@ -380,6 +397,11 @@ export default function OrderDetailPage() {
headset_mic
联系客服
+ {canRefund && order?.status !== 'REFUNDING' && order?.status !== 'REFUNDED' && (
+
+ )}
{canConfirmReceive && (