权益额
@@ -302,25 +453,78 @@ export default function ProxyOrderPage() {
>
) : (
- {selectedProduct ? '请确认数量与地址后查看费用' : '请选择商品'}
+ {selectedProduct ? '请确认数量与履约信息后查看费用' : '请选择商品'}
)}
- {msg &&
{msg}
}
+ {confirmStep ? (
+
+
+
+ 确认线下已收款后,将向您的登录手机号发送验证码
+
+
+
+ setPartnerSmsCode(e.target.value.replace(/\D/g, '').slice(0, 6))}
+ />
+
+
+
+
+ ) : null}
-
+ {msg ? (
+
+ {msg}
+
+ ) : null}
+
+ {!confirmStep ? (
+
+ ) : (
+
+
+
+
+ )}
- 提交后将自动创建/关联用户,订单类型为「线下代下单」,状态直接标记为已收货,并发放对应权益。
+ 线下已收款确认后,将自动创建/关联用户,订单标记为代下单并直接完成,同时发放对应权益。客户订单列表会显示您的姓名。
>
)}
diff --git a/apps/h5-partner/src/pages/ProxyOrderProductsPage.tsx b/apps/h5-partner/src/pages/ProxyOrderProductsPage.tsx
new file mode 100644
index 0000000..6feb39f
--- /dev/null
+++ b/apps/h5-partner/src/pages/ProxyOrderProductsPage.tsx
@@ -0,0 +1,69 @@
+import { useEffect, useState } from 'react';
+import { useNavigate, useSearchParams } from 'react-router-dom';
+import PageHeader from '@dukang/shared-ui/PageHeader';
+import { request } from '../lib/api';
+import { toastError } from '../lib/toast';
+import type { PartnerProxyOrderOptions, PartnerProxyOrderProductOption } from '@dukang/shared-types';
+
+function fmtMoney(n: number) {
+ return n.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
+}
+
+export default function ProxyOrderProductsPage() {
+ const navigate = useNavigate();
+ const [searchParams] = useSearchParams();
+ const selectedId = searchParams.get('selected') || '';
+ const [products, setProducts] = useState
([]);
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ request('PARTNER_H5', '/partner/proxy-orders/options')
+ .then((data) => setProducts(Array.isArray(data.products) ? data.products : []))
+ .catch((e) => toastError(e instanceof Error ? e.message : '加载失败'))
+ .finally(() => setLoading(false));
+ }, []);
+
+ function pick(product: PartnerProxyOrderProductOption) {
+ navigate(`/proxy-order?productId=${encodeURIComponent(product.id)}`, { replace: true });
+ }
+
+ return (
+
+
navigate(-1)} />
+
+ {loading ? 加载中…
: null}
+ {!loading && products.length === 0 ? (
+ 暂无可售商品
+ ) : null}
+ {products.map((p) => {
+ const benefit = p.benefitAmount != null ? Number(p.benefitAmount) : Number(p.price);
+ const active = p.id === selectedId;
+ return (
+
+ );
+ })}
+
+
+ );
+}
diff --git a/apps/h5-partner/src/styles.css b/apps/h5-partner/src/styles.css
index 787cd51..83582bc 100644
--- a/apps/h5-partner/src/styles.css
+++ b/apps/h5-partner/src/styles.css
@@ -3315,6 +3315,145 @@ body {
border-top: 1px dashed rgba(166, 29, 36, 0.15);
}
+.partner-proxy-mode-tabs {
+ display: flex;
+ gap: 8px;
+}
+
+.partner-proxy-mode-tab {
+ flex: 1;
+ padding: 10px 12px;
+ border-radius: 12px;
+ border: 1px solid var(--color-border);
+ background: #fff;
+ font-size: 14px;
+ color: var(--color-ink-black);
+}
+
+.partner-proxy-mode-tab.is-active {
+ border-color: var(--color-heritage-red);
+ color: var(--color-heritage-red);
+ background: rgba(166, 29, 36, 0.06);
+ font-weight: 600;
+}
+
+.partner-proxy-auto-receive {
+ display: flex;
+ align-items: flex-start;
+ gap: 8px;
+ margin: 4px 0 16px;
+ font-size: 13px;
+ line-height: 1.45;
+ color: var(--color-ink-black);
+}
+
+.partner-proxy-auto-receive input {
+ margin-top: 3px;
+ flex-shrink: 0;
+}
+
+.partner-proxy-product-picker {
+ position: relative;
+ width: 100%;
+ text-align: left;
+ padding: 12px 36px 12px 14px;
+ border-radius: 12px;
+ border: 1px solid var(--color-border);
+ background: #fff;
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+}
+
+.partner-proxy-product-picker-arrow {
+ position: absolute;
+ right: 14px;
+ top: 50%;
+ transform: translateY(-50%);
+ font-size: 22px;
+ color: var(--color-muted, #999);
+}
+
+.partner-proxy-product-list {
+ padding: 0 16px 24px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.partner-proxy-product-card {
+ display: flex;
+ gap: 12px;
+ width: 100%;
+ text-align: left;
+ padding: 12px;
+ border-radius: 16px;
+ border: 1px solid var(--color-border);
+ background: #fff;
+}
+
+.partner-proxy-product-card--active {
+ border-color: var(--color-heritage-red);
+ box-shadow: 0 0 0 1px rgba(166, 29, 36, 0.2);
+}
+
+.partner-proxy-product-thumb {
+ width: 72px;
+ height: 72px;
+ border-radius: 12px;
+ overflow: hidden;
+ background: #f3f1ee;
+ flex-shrink: 0;
+}
+
+.partner-proxy-product-thumb img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+
+.partner-proxy-product-thumb-empty {
+ display: block;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(135deg, #f3f1ee, #e8e4de);
+}
+
+.partner-proxy-product-main {
+ flex: 1;
+ min-width: 0;
+}
+
+.partner-proxy-product-row {
+ display: flex;
+ justify-content: space-between;
+ gap: 8px;
+}
+
+.partner-proxy-product-name {
+ font-weight: 600;
+ font-size: 15px;
+ color: var(--color-ink-black);
+}
+
+.partner-proxy-product-price {
+ color: var(--color-heritage-red);
+ font-weight: 600;
+ flex-shrink: 0;
+}
+
+.partner-proxy-product-spec,
+.partner-proxy-product-benefit {
+ margin: 4px 0 0;
+ font-size: 12px;
+ color: var(--color-muted, #888);
+}
+
+.partner-proxy-confirm {
+ padding-top: 8px;
+ border-top: 1px dashed rgba(0, 0, 0, 0.08);
+}
+
.partner-warehouse-denied {
display: flex;
flex-direction: column;
diff --git a/apps/h5-user/src/pages/OrderDetailPage.tsx b/apps/h5-user/src/pages/OrderDetailPage.tsx
index 3b3cc5f..ad3366b 100644
--- a/apps/h5-user/src/pages/OrderDetailPage.tsx
+++ b/apps/h5-user/src/pages/OrderDetailPage.tsx
@@ -37,6 +37,8 @@ type Order = {
id: string;
orderNo: string;
orderType?: string;
+ isProxyOrder?: boolean;
+ proxyPartnerName?: string | null;
status: string;
originOrderId?: string | null;
remark?: string | null;
@@ -138,6 +140,7 @@ export default function OrderDetailPage() {
const [trackNodes, setTrackNodes] = useState([]);
const isReship = order?.orderType === 'RESHIPMENT';
+ const isProxy = order?.orderType === 'PROXY' || order?.isProxyOrder === true;
async function loadTrack() {
if (!id) return;
@@ -240,6 +243,11 @@ export default function OrderDetailPage() {
{banner.title}