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; }