fix(trade): on-site pickup pay success marks order COMPLETED

This commit is contained in:
2026-08-02 13:42:15 +08:00
parent 4ba51c502b
commit cb6ecaaba6
5 changed files with 24 additions and 11 deletions
@@ -252,7 +252,7 @@ export default function ProxyOrderModal({ open, onClose, onSuccess }: ProxyOrder
message={`订单 ${created.orderNo} 待支付 ¥${fmtMoney(created.payAmount)},请扫码支付`} message={`订单 ${created.orderNo} 待支付 ¥${fmtMoney(created.payAmount)},请扫码支付`}
description={ description={
created.deliveryType === 'ON_SITE_PICKUP' created.deliveryType === 'ON_SITE_PICKUP'
? '支付完成后将进入现场提货闭环' ? '支付完成后订单即为已完成,并发放好客权益'
: '支付完成后将进入待发货,由总部履约发货' : '支付完成后将进入待发货,由总部履约发货'
} }
/> />
+1 -1
View File
@@ -325,7 +325,7 @@ export default function ProxyOrderPage() {
</p> </p>
<p className="label-md text-muted" style={{ marginTop: 8 }}> <p className="label-md text-muted" style={{ marginTop: 8 }}>
{created.deliveryType === 'ON_SITE_PICKUP' {created.deliveryType === 'ON_SITE_PICKUP'
? '支付成功后进入现场提货闭环' ? '支付成功后订单即为已完成,并发放好客权益'
: '支付成功后进入待发货,由总部履约'} : '支付成功后进入待发货,由总部履约'}
</p> </p>
+14 -5
View File
@@ -41,6 +41,7 @@ export default function PayPage() {
const [showBindPhone, setShowBindPhone] = useState(false); const [showBindPhone, setShowBindPhone] = useState(false);
const [wxSessionKey, setWxSessionKey] = useState<string | null>(null); const [wxSessionKey, setWxSessionKey] = useState<string | null>(null);
const [orderNo, setOrderNo] = useState(''); const [orderNo, setOrderNo] = useState('');
const [deliveryType, setDeliveryType] = useState('');
const refreshPayReadiness = useCallback(async () => { const refreshPayReadiness = useCallback(async () => {
try { try {
@@ -78,9 +79,15 @@ export default function PayPage() {
setOrderNo(''); setOrderNo('');
return; return;
} }
request<{ orderNo?: string }>('USER_H5', `/trade/orders/${orderId}`) request<{ orderNo?: string; deliveryType?: string }>('USER_H5', `/trade/orders/${orderId}`)
.then((order) => setOrderNo(order.orderNo || '')) .then((order) => {
.catch(() => setOrderNo('')); setOrderNo(order.orderNo || '');
setDeliveryType(order.deliveryType || '');
})
.catch(() => {
setOrderNo('');
setDeliveryType('');
});
}, [orderId]); }, [orderId]);
useEffect(() => { useEffect(() => {
@@ -140,11 +147,13 @@ export default function PayPage() {
if (!paid) { if (!paid) {
alert('支付结果确认中,请稍后在订单列表查看'); alert('支付结果确认中,请稍后在订单列表查看');
} }
navigate('/orders?tab=paid'); navigate(
deliveryType === 'ON_SITE_PICKUP' ? '/orders?tab=completed' : '/orders?tab=paid',
);
return; return;
} }
navigate('/orders?tab=paid'); navigate(deliveryType === 'ON_SITE_PICKUP' ? '/orders?tab=completed' : '/orders?tab=paid');
} catch (e) { } catch (e) {
if (isWechatAuthRequiredError(e)) { if (isWechatAuthRequiredError(e)) {
setNeedsWechatAuth(true); setNeedsWechatAuth(true);
+2 -1
View File
@@ -144,7 +144,8 @@ export default function PayPage() {
toast('支付成功', 'success'); toast('支付成功', 'success');
} }
if (deliveryType === 'ON_SITE_PICKUP') { if (deliveryType === 'ON_SITE_PICKUP') {
Taro.redirectTo({ url: `/pages/pickup-receive/index?id=${orderId}` }); // 现场提货支付即完成 → 订单详情(已完成)
Taro.redirectTo({ url: `/pages/order-detail/index?id=${orderId}` });
} else { } else {
Taro.redirectTo({ url: '/pages/orders/index?tab=paid' }); Taro.redirectTo({ url: '/pages/orders/index?tab=paid' });
} }
@@ -288,8 +288,9 @@ export class TradeService {
order.cityId, order.cityId,
order.receiverDistrict, order.receiverDistrict,
); );
// 现场提货:支付即完成(PRD SC-02 / REQ-U-008
const toStatus = const toStatus =
order.deliveryType === 'ON_SITE_PICKUP' ? 'PENDING_RECEIVE' : 'PENDING_SHIP'; order.deliveryType === 'ON_SITE_PICKUP' ? 'COMPLETED' : 'PENDING_SHIP';
await this.prisma.$transaction(async (tx) => { await this.prisma.$transaction(async (tx) => {
await tx.order.update({ await tx.order.update({
@@ -400,8 +401,9 @@ export class TradeService {
order.cityId, order.cityId,
order.receiverDistrict, order.receiverDistrict,
); );
// 现场提货:支付即完成(PRD SC-02 / REQ-U-008
const toStatus = const toStatus =
order.deliveryType === 'ON_SITE_PICKUP' ? 'PENDING_RECEIVE' : 'PENDING_SHIP'; order.deliveryType === 'ON_SITE_PICKUP' ? 'COMPLETED' : 'PENDING_SHIP';
await this.prisma.$transaction(async (tx) => { await this.prisma.$transaction(async (tx) => {
const current = await tx.order.findUnique({ where: { id: order.id } }); const current = await tx.order.findUnique({ where: { id: order.id } });
if (!current || current.payStatus === 'PAID') return; if (!current || current.payStatus === 'PAID') return;
@@ -1812,8 +1814,9 @@ export class TradeService {
order.cityId, order.cityId,
order.receiverDistrict, order.receiverDistrict,
); );
// 现场提货:支付即完成(代下单同 C 端 PRD)
const toStatus = const toStatus =
order.deliveryType === 'ON_SITE_PICKUP' ? 'PENDING_RECEIVE' : 'PENDING_SHIP'; order.deliveryType === 'ON_SITE_PICKUP' ? 'COMPLETED' : 'PENDING_SHIP';
await this.prisma.$transaction(async (tx) => { await this.prisma.$transaction(async (tx) => {
await tx.order.update({ await tx.order.update({