修改待支付订单剩余支付时间部分的逻辑

This commit is contained in:
赵毅 2025-11-04 15:11:58 +08:00
parent 3ed1cbed6d
commit f5c197620c

View File

@ -171,31 +171,76 @@ export default {
},
onLoad(options) {
const item = JSON.parse(options?.item);
// 启动倒计时
item.order_status == "1" ? this.startCountdown() : "";
this.status = JSON.stringify(item.order_status);
this.orderInfo = item;
// 启动倒计时
// item.order_status == "1" ? this.startCountdown() : "";
this.startCountdown()
this.status = JSON.stringify(item.order_status);
},
methods: {
startCountdown() {
// 倒计时模拟
let seconds = 10 * 60; // 10分钟
const timer = setInterval(() => {
seconds--;
// 检查订单信息中是否有时效时间戳
if (!this.orderInfo.timeout_time_stamp) {
console.error('订单时效时间戳不存在');
return;
}
// 获取当前时间和订单超时时间
const now = Math.floor(new Date().getTime() / 1000);
const timeoutTime = this.orderInfo.timeout_time_stamp;
// 判断当前时间是否已超过超时时间
if (now > timeoutTime) {
// 已超过超时时间,直接取消订单
this.handleOrderCancellation();
return;
}
// 计算剩余时间(秒)
let remainingSeconds = timeoutTime - now;
// 确保剩余时间不为负数
remainingSeconds = Math.max(0, remainingSeconds);
// 更新倒计时显示的函数
const updateCountdownDisplay = (seconds) => {
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = seconds % 60;
this.countdown = `${hours}:${minutes.toString().padStart(2, "0")}:${secs
.toString()
.padStart(2, "0")}`;
if (seconds <= 0) {
this.countdown = `${hours}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`;
};
// 立即更新一次显示
updateCountdownDisplay(remainingSeconds);
// 设置定时器,每秒更新一次倒计时
const timer = setInterval(() => {
remainingSeconds--;
updateCountdownDisplay(remainingSeconds);
// 检查是否已经超时
if (remainingSeconds <= 0) {
clearInterval(timer);
// 倒计时结束,处理订单
uni.showToast({ title: "订单已取消", icon: "none" });
setTimeout(() => uni.navigateBack(), 1500);
// 倒计时结束,取消订单
this.handleOrderCancellation();
}
}, 1000);
},
// 处理订单取消
handleOrderCancellation() {
const params = {
order_id: this.orderInfo.id,
method: 1,
cancel_reason: '倒计时结束取消',
};
request(afterSaleApi.cancelOrConfirm, "POST", params).then((res) => {
uni.showToast({ title: "订单已取消", icon: "none" });
setTimeout(() => {
uni.navigateBack();
}, 1500);
});
},
cancelOrder() {
uni.showModal({
title: "提示",