178 lines
4.4 KiB
Vue
178 lines
4.4 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="main bg-base">
|
|||
|
|
<view class="box">
|
|||
|
|
<view class="store">
|
|||
|
|
<image :src="storeInfo.logoImage" mode="" class="img"></image>
|
|||
|
|
<text class="font34 color-b3">{{storeInfo.name}}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="qrcode">
|
|||
|
|
<text class="color-purple font60" style="margin-bottom: 20rpx;display: block;" v-if="amount">¥{{amount}}</text>
|
|||
|
|
<tki-qrcode
|
|||
|
|
ref="qrcode"
|
|||
|
|
:val="url"
|
|||
|
|
icon="/static/logo.png"
|
|||
|
|
:size="400"
|
|||
|
|
:iconSize="30"
|
|||
|
|
:onval="true"
|
|||
|
|
></tki-qrcode>
|
|||
|
|
<text class="color-b9 font28" style="margin-top: 10rpx;" v-if="bonusPoints">赠送积分:{{bonusPoints}}</text>
|
|||
|
|
</view>
|
|||
|
|
<text class="font26 color-b9">该码只能该用户支付,并且该码只能收款一次,如需重复付款请重新生成收款码</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="user color-w" v-if="scanOrPaymentUserInfo">
|
|||
|
|
<view>
|
|||
|
|
<image :src="scanOrPaymentUserInfo.headPortrait" mode="" class="logo"></image>
|
|||
|
|
</view>
|
|||
|
|
<view class="info">
|
|||
|
|
<text>{{scanOrPaymentUserInfo.nickname}}</text>
|
|||
|
|
<text style="margin-top: 10rpx;">{{scanOrPaymentUserInfo.username}}</text>
|
|||
|
|
</view>
|
|||
|
|
<text class="font26" v-if="collectionStatus">付款成功</text>
|
|||
|
|
<text class="font26" v-else>支付中...</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import url from "@/common/http/url.js"
|
|||
|
|
import tkiQrcode from "@/components/tki-qrcode/tki-qrcode.vue"
|
|||
|
|
const music = uni.createInnerAudioContext(); //创建播放器对象
|
|||
|
|
let timer = null
|
|||
|
|
export default{
|
|||
|
|
components: { tkiQrcode },
|
|||
|
|
data(){
|
|||
|
|
return {
|
|||
|
|
storeInfo: {},
|
|||
|
|
amount: "",
|
|||
|
|
url: "",
|
|||
|
|
bonusPoints: "",
|
|||
|
|
collectionStatus: false,
|
|||
|
|
scanOrPaymentUserInfo: null
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onLoad() {
|
|||
|
|
this.$http("GET", url.store.getStoreInfo).then(res=>{
|
|||
|
|
this.storeInfo = res.data
|
|||
|
|
// this.icon = res.data.logoImage
|
|||
|
|
})
|
|||
|
|
let data = uni.getStorageSync("collectionData")
|
|||
|
|
if (data) {
|
|||
|
|
this.url = data.data
|
|||
|
|
// this.amount = data.amount
|
|||
|
|
this.bonusPoints = data.bonusPoints
|
|||
|
|
console.log("......url....", this.url)
|
|||
|
|
uni.removeStorageSync("collectionData")
|
|||
|
|
setTimeout(()=> {
|
|||
|
|
this.$refs.qrcode._makeCode()
|
|||
|
|
}, 300)
|
|||
|
|
this.interver()
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods:{
|
|||
|
|
interver(){
|
|||
|
|
let _this = this
|
|||
|
|
let result = this.url
|
|||
|
|
let r = null
|
|||
|
|
if ((result.indexOf("https") > -1 || result.indexOf("http") > -1) && result.indexOf("data") > -1){
|
|||
|
|
let reg = new RegExp("(^|&)data=([^&]*)(&|$)");
|
|||
|
|
let json = result.substr(1).match(reg)
|
|||
|
|
try{
|
|||
|
|
// r = JSON.parse(decodeURI(json[2]))
|
|||
|
|
r = JSON.parse(json[2])
|
|||
|
|
}catch(err){}
|
|||
|
|
} else {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
timer = setInterval(()=>{
|
|||
|
|
_this.$http("GET", url.pay.checkStoreCollection, {data: r.data}).then(res=>{
|
|||
|
|
_this.collectionStatus = res.data.collectionStatus
|
|||
|
|
_this.scanOrPaymentUserInfo = res.data.scanOrPaymentUserInfo
|
|||
|
|
_this.amount = res.data.amount
|
|||
|
|
if (res.data && res.data.collectionStatus) {
|
|||
|
|
_this.clearInter()
|
|||
|
|
music.loop = false; //循环播放
|
|||
|
|
music.src = this.$staticUrl + "music/collection.mp3"; // 收款成功提示
|
|||
|
|
music.play(); //执行播放
|
|||
|
|
setTimeout(()=>{
|
|||
|
|
uni.redirectTo({
|
|||
|
|
url: "success?amount="+_this.amount
|
|||
|
|
})
|
|||
|
|
}, 500)
|
|||
|
|
}
|
|||
|
|
}).catch(()=>{
|
|||
|
|
_this.clearInter()
|
|||
|
|
})
|
|||
|
|
}, 600)
|
|||
|
|
},
|
|||
|
|
clearInter(){
|
|||
|
|
clearInterval(timer)
|
|||
|
|
timer = null
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onHide() {
|
|||
|
|
this.clearInter()
|
|||
|
|
},
|
|||
|
|
onUnload() {
|
|||
|
|
this.clearInter()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.main{
|
|||
|
|
width: 100%;
|
|||
|
|
min-height: 100vh;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: center;
|
|||
|
|
flex-direction: column;
|
|||
|
|
}
|
|||
|
|
.box{
|
|||
|
|
width: 600rpx;
|
|||
|
|
min-height: 50vh;
|
|||
|
|
padding: 30rpx 30rpx 30rpx;
|
|||
|
|
background-color: white;
|
|||
|
|
border-radius: 20rpx;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: center;
|
|||
|
|
flex-direction: column;
|
|||
|
|
text-align: center;
|
|||
|
|
.store{
|
|||
|
|
width: 100%;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
}
|
|||
|
|
.img{
|
|||
|
|
width: 100rpx;
|
|||
|
|
height: 100rpx;
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
margin-right: 20rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.qrcode{
|
|||
|
|
flex: 1;
|
|||
|
|
margin-bottom: 30rpx;
|
|||
|
|
}
|
|||
|
|
.user{
|
|||
|
|
width: 660rpx;
|
|||
|
|
margin: 20rpx 0;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
.logo{
|
|||
|
|
width: 100rpx;
|
|||
|
|
height: 100rpx;
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
margin-right: 20rpx;
|
|||
|
|
}
|
|||
|
|
.info{
|
|||
|
|
display: flex;
|
|||
|
|
flex-direction: column;
|
|||
|
|
flex-grow: 1;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|