微信内置浏览器支付完成后跳转到一个提示页面再返回i充值页数据不刷新怎么解决,监听路由,visibilitychange事件监听器都不行
topUP页面支付跳转到details页做轮询请求后端接口是否成功支付,5秒后自动或者直接返回topUP充值页面,充值金额不是最新的,要刷新才行,
onMounted(() => {
openID.value = localStorage.getItem("OpenID");
appID.value = localStorage.getItem("APPID");
// 添加visibilitychange事件监听器
document.addEventListener('visibilitychange', handleVisibilityChange);
console.log("首页参数:", cardInfo.value?.CardAvailableCredit);
// 页面加载时,检查是否已缓存卡片信息,如果没有则获取
try {
if (localStorage.getItem("AppWeChat") === "1") {
if (!userStore.cardInfo.EmployeeDeptName) {
fetchCardInfo();
}
} else {
router.push({
name: "error",
query: {
message: t("PlatformUnavailable"),
},
});
return;
}
} catch (error) {
console.error("获取卡片信息失败:", error);
// showToast(t('FailedToGetCardInfo'));
}
});
onUnmounted(() => {
// 移除visibilitychange事件监听器
document.removeEventListener('visibilitychange', handleVisibilityChange);
});
// 处理页面可见性变化的函数
const handleVisibilityChange = () => {
console.log('页面可见性变化:', document.visibilityState);
// 当页面变为可见时(从其他页面返回),刷新数据
if (document.visibilityState === 'visible') {
console.log('页面重新可见,刷新数据...');
// 清理缓存并刷新数据
localStorage.removeItem("cardInfo");
fetchCardInfo();
// 也可以选择直接刷新页面
// location.reload();
}
};
const orderNo = ref("");
const handleRecharge = () => {
if (!amount.value) {
showToast(t("PleaseEnterRechargeAmount"));
return;
}
orderNo.value = generateOrderNo(cardInfo.value.EmployeeID, 5);
// 处理充值逻辑
showLoadingToast({
message: t("Recharging"),
forbidClick: true,
});
try {
passageApi
.getWeChatRecharge(amount.value * 100, orderNo.value)
.then((res) => {
console.log("res", res);
// 请求成功后关闭loading
document.querySelector(".van-loading-toast")?.remove();
// 可以根据响应结果显示成功消息
if (res && res.success) {
const payParams = res.data.pay_params;
console.log("payParams", payParams);
WeixinJSBridge.invoke(
"getBrandWCPayRequest",
{
appId: payParams.appId,
timeStamp: payParams.timeStamp,
nonceStr: payParams.nonceStr,
package: payParams.package,
signType: payParams.signType,
paySign: payParams.paySign,
},
function (res) {
WeixinJSBridge.log(res.err_msg);
// alert(res.err_code + res.err_desc + res.err_msg);
if (res.err_msg == "get_brand_wcpay_request:ok") {
console.log("用户支付成功,等待服务器确认...");
router.push({
name: "payDetails",
query: { orderNo: orderNo.value },
});
// 先刷新页面
// setTimeout(() => {
// location.reload();
// // 刷新后延迟一小段时间再跳转,确保页面已完全加载
// setTimeout(() => {
// router.push({
// name: "payDetails",
// query: { orderNo: orderNo.value },
// });
// }, 300);
// }, 100);
// do something
} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
alert(t("PaymentCancelled"));
// setTimeout(() => {
// location.reload();
// }, 100);
router.push({
name: "payDetails",
query: { orderNo: orderNo.value },
});
// do something
} else if (res.err_msg == "get_brand_wcpay_request:fail") {
alert(t("PaymentFailed"));
// do something
}
}
);
// setTimeout(() => {
// router.push({ name: "home" });
// }, 1500);
} else {
// showToast(res?.message || t('RechargeFailed'));
console.log("充值接口失败");
}
})
.catch((error) => {
console.error("充值请求失败:", error);
showToast(t("RechargeFailed"));
})
.finally(() => {
// 无论请求成功或失败,都关闭loading
amount.value = "";
document.querySelector(".van-loading-toast")?.remove();
});
} catch (error) {
// 请求失败时也关闭loading
document.querySelector(".van-loading-toast")?.remove();
console.error("充值请求失败:", error);
showToast(t("RechargeFailed"));
}
};
details
// 轮询订单状态
const pollOrderStatus = async () => {
const orderNo = route.query.orderNo;
// if (!orderNo) {
// showToast(t('InvalidOrder'));
// return;
// }
//
const poll = async () => {
attempts++;
try {
// const res = await passageApi.queryOrderStatus('50491631762399696474');
const res = await passageApi.queryOrderStatus(orderNo);
if (res.success) {
infoData.value = res.data;
// 如果已确定最终状态,可以提前停止轮询(但倒计时仍继续)
if (res.data.RechargeStatus === 1 ) {
clearInterval(pollingTimer);
}
}
} catch (error) {
console.error('查询订单失败:', error);
if (attempts >= maxAttempts) {
clearInterval(pollingTimer);
}
}
// 继续轮询(直到达到最大次数)
if (attempts < maxAttempts && !infoData.value?.RechargeStatus) {
pollingTimer = setTimeout(poll, 1500);
}
};
poll();
};
// Add confetti particles dynamically
onMounted(() => {
const orderNo = route.query.orderNo;
// if (orderNo) {
pollOrderStatus();
startCountdown(); // 启动秒倒计时
// }
});