<script setup> import {liveStore} from "~/stores/live/index.js"; import {createBuyOrder,createBuyOrderV3} from "~/api/goods/index.js"; import {goodStore} from "~/stores/goods/index.js"; import { showLoadingToast ,closeToast} from 'vant'; import {authStore} from "~/stores/auth/index.js"; import {message} from "~/components/x-message/useMessage.js"; const {checkoutSessionUrl,payment,payUid}= authStore() const payStatus=ref(0) definePageMeta({ i18n: 'payment.title' }) const {t}=useI18n() const router=useRouter() const changePayStatus=()=>{ payStatus.value=payStatus.value===0?1:0 } const { auctionData} = liveStore() const amount=ref('') const confirmPay=async ()=>{ if (payStatus.value===1&&!amount.value){ message.warning(t('payment.amountRequired')) return } if (Number(payment.value.leftPrice)<Number(amount.value)){ message.warning(t('payment.exceedAmount')) return } showLoadingToast({ message: t('payment.loading'), forbidClick: true, }); const res=await createBuyOrderV3({ buyUid:payment.value.buyUid, price:payStatus.value===0?payment.value.leftPrice:amount.value, currency:payment.value.leftCurrency, testReturnHost:window.location.origin, testReturnEndPoint:'/payment/result' }) if (res.status===0){ payment.value.payUid=res.data.payUid router.push('/payment/qrcode') // checkoutSessionUrl.value=res.data.checkoutSessionUrl // payUid.value=res.data.payUid // router.push({ // path:'/checkoutPage', // query:{ // payUid:res.data.payUid, // returnUrl:'/payment/result', // stripeKey:res.data.checkoutSessionUrl // } // }) } } const handleInput = (e) => { // 只允许数字和小数点,且只保留两位小数 const value = e.target.value // 清除非数字和小数点 let newValue = value.replace(/[^\d.]/g, '') // 确保只有一个小数点 newValue = newValue.replace(/\.{2,}/g, '.') // 只保留第一个小数点 newValue = newValue.replace(/^(\d*\.\d*)\./, '$1') // 保留两位小数 if (newValue.indexOf('.') > 0) { newValue = newValue.slice(0, newValue.indexOf('.') + 3) } // 禁止输入以0开头的多位整数 newValue = newValue.replace(/^0+(\d)/, '$1') amount.value = newValue } </script> <template> <div class="w-[100vw] h-screen-nav bg-[url('@/static/images/3532@2x.png')] bg-cover flex-grow-1 flex flex-col items-center pt-183px px-30px"> <div class="mb-30px"> <img class="w-126px h-126px" src="@/static/images/dddf34@2x.png" alt=""> </div> <div class="text-#1A1A1A text-16px mb-25px font-bold">{{payStatus===0 ? t('payment.fullPayment') : t('payment.partialPayment')}}</div> <div class="text-#999999 text-16px mb-24px font-bold" v-if="payStatus===0">CNY {{payment?.leftPrice}}</div> <div class="mb-12px" v-else> <input v-model="amount" class="w-272px h-48px bg-#F3F3F3 px-11px text-16px" type="text" :placeholder="`${t('payment.placeholder.amount')}CNY${payment?.leftPrice}`" @input="handleInput"> </div> <!-- <div class="text-#2B53AC text-14px" @click="changePayStatus">{{payStatus===1 ? t('payment.fullPayment') : t('payment.partialPayment')}}</div> --> <div class="w-full mt-auto mb-40px"> <van-button type="primary" block @click="confirmPay"> {{ t('payment.confirm') }} </van-button> </div> </div> </template> <style scoped> </style>