liveh5-nuxt/app/pages/payment/index.vue
2025-02-28 17:32:38 +08:00

95 lines
3.2 KiB
Vue

<script setup>
import {liveStore} from "~/stores/live/index.js";
import {createBuyOrder} 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,openRefreshResults}= 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 createBuyOrder({
buyUid:payment.value.buyUid,
price:payStatus.value===0?payment.value.leftPrice:amount.value,
currency:payment.value.leftCurrency,
testReturnHost:window.location.origin,
testReturnEndPoint:'/payment/result'
})
console.log('res',res);
if (res.status===0){
// if (res.status===0){
// window.location.href=res.data.checkoutSessionUrl
// }
checkoutSessionUrl.value=res.data.checkoutSessionUrl
payUid.value=res.data.payUid
openRefreshResults()
router.push('/payment/checkoutPage')
}
}
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">{{payment.leftCurrency}} {{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')}${payment.leftCurrency}${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>