feat: H5 延期订单可作废,未完成订单直接进入详情继续支付或作废
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Has been cancelled
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Has been cancelled
- 延期订单详情待支付时显示作废订单,作废后可重新办理延期 - 延期页有未完成订单时直接打开该订单详情;作废返回后重新查资格
This commit is contained in:
@@ -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`,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<view class="blocked-title">{{ blockedMessage }}</view>
|
||||
<view v-if="pendingOrderNo" class="blocked-desc">未完成订单:{{ pendingOrderNo }}</view>
|
||||
<view class="blocked-actions">
|
||||
<view v-if="pendingOrderNo" class="btn-apple btn-primary" @tap="openOrders">查看我的延期订单</view>
|
||||
<view v-if="pendingOrderNo" class="btn-apple btn-primary" @tap="openPendingOrder">去支付或作废该订单</view>
|
||||
<view class="btn-apple btn-secondary" @tap="goBack">返回</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -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();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="canContinuePay" class="btn-apple btn-primary pay-btn" @tap="continuePay">继续支付</view>
|
||||
<view v-if="canCancel" class="btn-apple btn-secondary cancel-btn" @tap="cancelOrder">
|
||||
{{ cancelling ? '作废中...' : '作废订单' }}
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</template>
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user