<script setup> import {orderQuery} from "~/api/goods/index.js"; import { showLoadingToast, closeToast } from 'vant'; definePageMeta({ i18n: 'payment.text1', }) const router = useRouter() const {t} = useI18n(); const route = useRoute(); const resData = ref({}) let timer = null let startTime = Date.now() const queryOrder = async () => { // 首先检查是否已经超过5秒 if (Date.now() - startTime > 5000) { clearInterval(timer) closeToast() return } showLoadingToast({ message:t('common.loading'), forbidClick: true, }); try { const res = await orderQuery({ orderNo: route.query.orderNo }) if (res.status === 0) { resData.value = res.data // 只在支付成功时停止轮询 if (resData.value.status === 1) { clearInterval(timer) closeToast() } } } catch (error) { clearInterval(timer) closeToast() } } // 立即执行一次 await queryOrder() // 开始轮询 timer = setInterval(async () => { await queryOrder() }, 1000) // 组件卸载时清除定时器 onUnmounted(() => { if (timer) { clearInterval(timer) closeToast() } }) const statusLabel = { 1: t('payment.text2'), 2: t('payment.text3'), 3: t('payment.text4'), 4: t('payment.text5'), } </script> <template> <div class="w-[100vw] h-screen-nav bg-[url('@/static/images/3532@2x.png')] bg-cover grow-1 flex flex-col items-center px-30px"> <div class="flex flex-col items-center mt-150px"> <img v-if="resData.status===1" class="w-119px h-120px mb-36px" src="@/static/images/5554@2x1.png" alt=""> <img v-else class="w-119px h-120px mb-36px" src="@/static/images/zu6021@2x.png" alt=""> <div class="text-#000 text-16px mb-25px">{{ statusLabel[resData.status] }}!</div> <div class="text-#999 text-16px">{{ resData.currency }}{{ resData.money }}</div> </div> </div> </template> <style scoped> </style>