diff --git a/app/pages/payment/qrcode/index.client.vue b/app/pages/payment/qrcode/index.client.vue index c5b00c6..b8f1a47 100644 --- a/app/pages/payment/qrcode/index.client.vue +++ b/app/pages/payment/qrcode/index.client.vue @@ -9,11 +9,54 @@ import QRCode from 'qrcode'; import { ref } from 'vue'; import {authStore} from "~/stores/auth/index.js"; +import {orderQuery} from "~/api/goods/index.js"; const {payment}= authStore() definePageMeta({ i18n: 'payment.title' }) +const router=useRouter() +const resData=ref({}) +let timer = null +const queryOrder = async () => { + try { + const res = await orderQuery({ + orderNo: payment.value.payUid + }) + + if (res.status === 0) { + resData.value = res.data + + // 只在支付成功时停止轮询 + if (resData.value.status === 1) { + clearInterval(timer) + router.push({ + path: '/payment/result', + query:{ + orderNo:payment.value.payUid + } + }) + } + } + } catch (error) { + clearInterval(timer) + } +} + +// 立即执行一次 +await queryOrder() const qrCodeUrl=ref('') +// 开始轮询 +timer = setInterval(async () => { + await queryOrder() +}, 1000) + +// 组件卸载时清除定时器 +onUnmounted(() => { + if (timer) { + clearInterval(timer) + closeToast() + } +}) async function generateQRCodeURL(text) { try { const url = await QRCode.toDataURL(text, {