mall_client/zyhs3_uniapp/pages/merchants/collection/code.vue

178 lines
4.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>