From 06ca8af21804eaf87e3891c1cf027e23b7d26d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E8=BF=9B?= Date: Sat, 7 Nov 2026 20:33:42 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20H5=20=E5=BB=B6=E6=9C=9F=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8F=AF=E4=BD=9C=E5=BA=9F=EF=BC=8C=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E8=AE=A2=E5=8D=95=E7=9B=B4=E6=8E=A5=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E7=BB=A7=E7=BB=AD=E6=94=AF=E4=BB=98=E6=88=96?= =?UTF-8?q?=E4=BD=9C=E5=BA=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 延期订单详情待支付时显示作废订单,作废后可重新办理延期 - 延期页有未完成订单时直接打开该订单详情;作废返回后重新查资格 --- api/modules/packageSilence.js | 10 +++++++ pages/silence-extension/silence-extension.vue | 22 +++++++++++++- pages/silence-orders/detail.vue | 29 ++++++++++++++++++- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/api/modules/packageSilence.js b/api/modules/packageSilence.js index 688782b..ebb2e4b 100644 --- a/api/modules/packageSilence.js +++ b/api/modules/packageSilence.js @@ -51,6 +51,16 @@ export const packageSilenceApi = { }); }, + // 作废自己的待支付延期订单(后端先查单,已支付则按支付成功办理并拒绝作废) + cancelOrder(id) { + return request({ + url: `${BASE}/orders/${id}/cancel`, + method: 'POST', + data: {}, + showError: false + }); + }, + getRecords(package_usage_id) { return request({ url: `${BASE}/records`, diff --git a/pages/silence-extension/silence-extension.vue b/pages/silence-extension/silence-extension.vue index 469d52a..eaf045e 100644 --- a/pages/silence-extension/silence-extension.vue +++ b/pages/silence-extension/silence-extension.vue @@ -8,7 +8,7 @@ {{ blockedMessage }} 未完成订单:{{ pendingOrderNo }} - 查看我的延期订单 + 去支付或作废该订单 返回 @@ -285,6 +285,21 @@ } }; + // 有未完成订单时直接打开该订单详情:可继续支付,也可作废后重新办理 + const openPendingOrder = async () => { + try { + const data = await packageSilenceApi.getOrders({ order_no: pendingOrderNo.value, page: 1, page_size: 1 }); + const target = Array.isArray(data?.items) ? data.items[0] : null; + if (target?.id) { + uni.navigateTo({ url: `/pages/silence-orders/detail?id=${target.id}` }); + return; + } + } catch (error) { + console.error('查询未完成延期订单失败', error); + } + openOrders(); + }; + const openOrders = () => { uni.navigateTo({ url: '/pages/silence-orders/silence-orders' }); }; @@ -302,6 +317,11 @@ }); onShow(() => { + // 从订单详情作废未完成订单后返回:重新查资格,允许重新下单 + if (pendingOrderNo.value && packageUsageId.value) { + loadEligibility(); + return; + } if (consumePendingPaymentRefresh(SILENCE_REFRESH_TARGET.EXTENSION)) checkLastOrder(); }); diff --git a/pages/silence-orders/detail.vue b/pages/silence-orders/detail.vue index 3d51e9b..3004463 100644 --- a/pages/silence-orders/detail.vue +++ b/pages/silence-orders/detail.vue @@ -16,6 +16,9 @@ 继续支付 + + {{ cancelling ? '作废中...' : '作废订单' }} + @@ -50,6 +53,29 @@ }); const canContinuePay = computed(() => order.value?.status === 'pending_payment' && !!order.value?.qr_content); + const canCancel = computed(() => order.value?.status === 'pending_payment'); + const cancelling = ref(false); + + const cancelOrder = () => { + if (cancelling.value || !order.value) return; + uni.showModal({ + title: '作废延期订单', + content: '作废后该订单不能再支付,可以重新办理延期。确定作废吗?', + success: async (res) => { + if (!res.confirm) return; + cancelling.value = true; + try { + order.value = await packageSilenceApi.cancelOrder(order.value.id); + uni.showToast({ title: '已作废', icon: 'success' }); + } catch (error) { + uni.showToast({ title: getSilenceErrorMessage(error, '作废失败,请稍后重试'), icon: 'none', duration: 2500 }); + await load(); + } finally { + cancelling.value = false; + } + } + }); + }; const load = async () => { if (!orderId.value) return; @@ -125,7 +151,8 @@ } } - .pay-btn { + .pay-btn, + .cancel-btn { margin-top: 32rpx; text-align: center; }