Compare commits
40 Commits
9ee59626a5
...
309760863a
Author | SHA1 | Date | |
---|---|---|---|
|
309760863a | ||
|
f5a51ffa7c | ||
|
17a32a89de | ||
|
304a98e88b | ||
|
36fcab91a3 | ||
|
2036e060ac | ||
|
bfd42e5364 | ||
|
30a46e6817 | ||
|
ad7833a312 | ||
|
0ab8b5f9d1 | ||
|
60431c8aec | ||
|
1321652fd9 | ||
|
f17d5913ac | ||
|
ae4d2b91cd | ||
|
790dd3e5cf | ||
|
46dd94c8c7 | ||
|
2192624cc9 | ||
|
aadb4da5f7 | ||
|
8a998fdb1f | ||
|
bcbf855258 | ||
|
09e3861b06 | ||
|
8d16e66455 | ||
|
746cda119d | ||
|
81fc536df2 | ||
|
665abb28d0 | ||
|
ee8b3a5bce | ||
|
4c8e63bd7d | ||
|
13bc4f4883 | ||
|
415267e307 | ||
|
ebe909c4d7 | ||
|
44bb45327e | ||
|
76f1395794 | ||
|
e49b6a78d4 | ||
|
629e31bc21 | ||
|
0562ef19c7 | ||
|
cd4c6929f3 | ||
|
85fb2c3dc4 | ||
|
e9635ec269 | ||
|
e72ce59fca | ||
|
1f3bff1174 |
@ -101,4 +101,12 @@ export async function contractView(data) {
|
|||||||
method: 'POST',
|
method: 'POST',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
export async function createBuyOrderV3(data) {
|
||||||
|
|
||||||
|
return await request( {
|
||||||
|
url:'/api/v1/m/auction/createBuyOrder/v3',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {liveStore} from "~/stores/live/index.js";
|
import {liveStore} from "~/stores/live/index.js";
|
||||||
import {createBuyOrder} from "~/api/goods/index.js";
|
import {createBuyOrder,createBuyOrderV3} from "~/api/goods/index.js";
|
||||||
import {goodStore} from "~/stores/goods/index.js";
|
import {goodStore} from "~/stores/goods/index.js";
|
||||||
import { showLoadingToast ,closeToast} from 'vant';
|
import { showLoadingToast ,closeToast} from 'vant';
|
||||||
import {authStore} from "~/stores/auth/index.js";
|
import {authStore} from "~/stores/auth/index.js";
|
||||||
@ -32,7 +32,7 @@ const confirmPay=async ()=>{
|
|||||||
forbidClick: true,
|
forbidClick: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
const res=await createBuyOrder({
|
const res=await createBuyOrderV3({
|
||||||
buyUid:payment.value.buyUid,
|
buyUid:payment.value.buyUid,
|
||||||
price:payStatus.value===0?payment.value.leftPrice:amount.value,
|
price:payStatus.value===0?payment.value.leftPrice:amount.value,
|
||||||
currency:payment.value.leftCurrency,
|
currency:payment.value.leftCurrency,
|
||||||
@ -41,16 +41,18 @@ const confirmPay=async ()=>{
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (res.status===0){
|
if (res.status===0){
|
||||||
checkoutSessionUrl.value=res.data.checkoutSessionUrl
|
payment.value.payUid=res.data.payUid
|
||||||
payUid.value=res.data.payUid
|
router.push('/payment/qrcode')
|
||||||
router.push({
|
// checkoutSessionUrl.value=res.data.checkoutSessionUrl
|
||||||
path:'/checkoutPage',
|
// payUid.value=res.data.payUid
|
||||||
query:{
|
// router.push({
|
||||||
payUid:res.data.payUid,
|
// path:'/checkoutPage',
|
||||||
returnUrl:'/payment/result',
|
// query:{
|
||||||
stripeKey:res.data.checkoutSessionUrl
|
// payUid:res.data.payUid,
|
||||||
}
|
// returnUrl:'/payment/result',
|
||||||
})
|
// stripeKey:res.data.checkoutSessionUrl
|
||||||
|
// }
|
||||||
|
// })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const handleInput = (e) => {
|
const handleInput = (e) => {
|
||||||
|
86
app/pages/payment/qrcode/index.client.vue
Normal file
86
app/pages/payment/qrcode/index.client.vue
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<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="text-#000 text-16px mb-25px">等待销售员确认</div>
|
||||||
|
<img :src="qrCodeUrl" alt="" class="mb-10px">
|
||||||
|
<div class="text-#848484 text-14px">已生成订单确认二维码</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
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, {
|
||||||
|
width: 283,
|
||||||
|
margin: 1,
|
||||||
|
errorCorrectionLevel: 'H',
|
||||||
|
color: {
|
||||||
|
dark: '#2B53AC', // 深色部分使用蓝色
|
||||||
|
light: '#ffffff' // 浅色部分使用白色
|
||||||
|
},
|
||||||
|
rendererOpts: {
|
||||||
|
quality: 1.0
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return url;
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
qrCodeUrl.value = await generateQRCodeURL(JSON.stringify({
|
||||||
|
type:'auction-order',
|
||||||
|
buyUid: payment.value.buyUid,
|
||||||
|
payUid:payment.value.payUid
|
||||||
|
}))
|
||||||
|
</script>
|
@ -18,6 +18,7 @@ const localState = ref({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const groupByDate = (data) => {
|
const groupByDate = (data) => {
|
||||||
|
|
||||||
if (!Array.isArray(data)) return []
|
if (!Array.isArray(data)) return []
|
||||||
|
|
||||||
return Object.values(data.reduce((acc, curr) => {
|
return Object.values(data.reduce((acc, curr) => {
|
||||||
@ -48,8 +49,10 @@ const onRefresh = async () => {
|
|||||||
|
|
||||||
const goPay = (item) => {
|
const goPay = (item) => {
|
||||||
payment.value.leftPrice=item.leftCnyPrice
|
payment.value.leftPrice=item.leftCnyPrice
|
||||||
|
payment.value.nickName=item.nickName
|
||||||
payment.value.leftCurrency=item.leftCurrency
|
payment.value.leftCurrency=item.leftCurrency
|
||||||
payment.value.buyUid=item.uuid
|
payment.value.buyUid=item.uuid
|
||||||
|
payment.value.artworkTitle=item?.auctionArtworkInfo?.artworkTitle
|
||||||
payment.value.auctionArtworkUuid=item?.auctionArtworkUuid
|
payment.value.auctionArtworkUuid=item?.auctionArtworkUuid
|
||||||
if (item.status===1){
|
if (item.status===1){
|
||||||
router.push('/signature/protocol')
|
router.push('/signature/protocol')
|
||||||
|
@ -13,7 +13,9 @@ export const authStore = createGlobalState(() => {
|
|||||||
leftPrice:'',
|
leftPrice:'',
|
||||||
leftCurrency:'',
|
leftCurrency:'',
|
||||||
buyUid:'',
|
buyUid:'',
|
||||||
auctionArtworkUuid:''
|
auctionArtworkUuid:'',
|
||||||
|
payUid:'',
|
||||||
|
nickName:''
|
||||||
})
|
})
|
||||||
const payUid=useLocalStorage('payUid','')
|
const payUid=useLocalStorage('payUid','')
|
||||||
return{
|
return{
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import dotenv from 'dotenv'
|
import dotenv from 'dotenv'
|
||||||
import process from 'node:process'
|
import process from 'node:process'
|
||||||
import imagemin from 'vite-plugin-imagemin'
|
|
||||||
import { currentLocales } from './i18n/i18n'
|
import { currentLocales } from './i18n/i18n'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
@ -127,33 +126,6 @@ export default defineNuxtConfig({
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
imagemin({
|
|
||||||
gifsicle: {
|
|
||||||
optimizationLevel: 7,
|
|
||||||
interlaced: false
|
|
||||||
},
|
|
||||||
optipng: {
|
|
||||||
optimizationLevel: 7
|
|
||||||
},
|
|
||||||
mozjpeg: {
|
|
||||||
quality: 70
|
|
||||||
},
|
|
||||||
pngquant: {
|
|
||||||
quality: [0.8, 0.9],
|
|
||||||
speed: 4
|
|
||||||
},
|
|
||||||
svgo: {
|
|
||||||
plugins: [
|
|
||||||
{
|
|
||||||
name: 'removeViewBox'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'removeEmptyAttrs',
|
|
||||||
active: false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fingerprintjs/fingerprintjs": "^4.5.1",
|
"@fingerprintjs/fingerprintjs": "^4.5.1",
|
||||||
|
"@intlify/message-compiler": "^11.1.3",
|
||||||
"@nuxtjs/i18n": "^9.1.1",
|
"@nuxtjs/i18n": "^9.1.1",
|
||||||
"@vue-office/pdf": "^2.0.10",
|
"@vue-office/pdf": "^2.0.10",
|
||||||
"@vueuse/components": "^12.8.2",
|
"@vueuse/components": "^12.8.2",
|
||||||
@ -53,8 +54,7 @@
|
|||||||
"sass-loader": "^16.0.4",
|
"sass-loader": "^16.0.4",
|
||||||
"sharp": "^0.33.5",
|
"sharp": "^0.33.5",
|
||||||
"typescript": "~5.7.2",
|
"typescript": "~5.7.2",
|
||||||
"vant": "^4.9.15",
|
"vant": "^4.9.15"
|
||||||
"vite-plugin-imagemin": "^0.6.1"
|
|
||||||
},
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"peerDependencyRules": {
|
"peerDependencyRules": {
|
||||||
|
5523
pnpm-lock.yaml
5523
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
@ -24,7 +24,7 @@ export default defineConfig({
|
|||||||
],
|
],
|
||||||
shortcuts: [
|
shortcuts: [
|
||||||
// shortcuts to multiple utilities
|
// shortcuts to multiple utilities
|
||||||
['btn', 'px-6 py-3 rounded-3 inline-block bg-primary text-white cursor-pointer hover:bg-primary-hover disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50'],
|
['btn', 'px-6 py-3 rounded-3 inline-block bg-primary text-white cursor-pointer disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50'],
|
||||||
],
|
],
|
||||||
|
|
||||||
presets: [
|
presets: [
|
||||||
|
Loading…
Reference in New Issue
Block a user