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