You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

183 lines
4.6 KiB

<template>
<view>
<view class="flex-col flex-center py-80">
<baseMoney :money="payPriceShow" symbolSize="48" integerSize="64" decimalSize="48" color="#333" weight></baseMoney>
<view class="flex-y-center mt-20">
<text class="fs-24 text--w111-333 lh-36rpx pr-10">支付剩余时间</text>
<countDown
:is-day="false"
tip-text=" "
day-text=" "
hour-text=":"
minute-text=":"
second-text=" "
bgColor="#FFFFFF"
colors="#FF7E00"
dotColor="#FF7E00"
:datatime="invalidTime"></countDown>
</view>
</view>
<view class="px-20">
<view class="bg--w111-fff rd-24rpx px-24">
<view class="pt-60 flex-center fs-30 lh-42rpx fw-500">
<text>方式一</text>
<view class="flex-y-center pl-30" @tap="checkType('weixin')">
<text class="iconfont" :class="paytype == 'weixin' ? 'icon-ic_Selected' : 'icon-ic_unselect'"></text>
<text class="pl-10">微信扫码</text>
</view>
<view class="flex-y-center ml-50" @tap="checkType('alipay')">
<text class="iconfont" :class="paytype == 'alipay' ? 'icon-ic_Selected' : 'icon-ic_unselect'"></text>
<text class="pl-10">支付宝扫码</text>
</view>
</view>
<view class="flex-center mt-40 pb-50 border-b" v-show="config.code">
<w-qrcode :options="config"></w-qrcode>
</view>
<view class="pt-50 flex-center fs-30 lh-42rpx fw-500">方式二用户进入商城支付订单</view>
<view class="py-60 flex-center">
<image class="guide" :src="imgHost + '/statics/images/pay_guide.png'"></image>
</view>
</view>
</view>
<view class="h-200"></view>
<view class="fixed-lb w-full pb-safe">
<view class="w-full h-128 flex-center">
<view class="w-710 h-80 flex-center rd-40rpx fs-28 bg-primary text--w111-fff" @tap="backPage">返回</view>
</view>
</view>
</view>
</template>
<script>
import countDown from '@/components/countDown';
import { getCashierApi, getPayStatusApi } from "@/api/admin.js";
import {HTTP_REQUEST_URL} from '@/config/app';
export default {
data() {
return {
imgHost:HTTP_REQUEST_URL,
payPriceShow:0,
invalidTime:0,
orderId: '',
paytype:'weixin',
userId:0,
qrcode:'',
config: {
code: '',
size: 280, // 二维码大小
level: 3, //等级 0~4
bgColor: '#FFFFFF',
color: ['#333', '#333'], //边框颜色支持渐变色
},
timer: null
}
},
components: {
countDown,
},
onLoad(options) {
this.userId = options.uid || 0;
if (options.order_id) {
this.orderId = options.order_id;
this.getCashierOrder();
}
},
onUnload() {
this.stopSetInterval();
},
methods: {
getCashierOrder(){
let data = {
uni: this.orderId,
paytype: this.paytype,
quitUrl: '/pages/behalf/cashier/index'
};
getCashierApi(this.userId,data).then(res=>{
if(res.data.status == 'SUCCESS'){
return this.$util.Tips({
title: '支付成功'
}, {
tab: 5,
url: '/pages/behalf/record/index'
});
}
this.payPriceShow = res.data.result.pay_price;
this.invalidTime = res.data.result.jsConfig.invalid;
this.config.code = this.paytype == 'weixin' ? res.data.result.jsConfig.code_url : res.data.result.jsConfig.qrCode;
this.createSetInterval(res.data.result.order_id);
}).catch(err=>{
return this.$util.Tips({
title: err
})
})
},
checkType(val){
this.paytype = val;
this.getCashierOrder();
},
createSetInterval(order_id) {
this.stopSetInterval();
this.timer = setInterval(() => {
this.getOrderResult(order_id);
}, 2000);
},
stopSetInterval() {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
},
getOrderResult(id){
//接口响应成功以后销毁定时器
getPayStatusApi({
order_id:id,
end_time:this.invalidTime
}).then(res=>{
if(res.data.time == 0){
this.stopSetInterval();
this.getCashierOrder();
}
if(res.data.status || res.data.time == 0){
this.stopSetInterval();
uni.reLaunch({
url:'/pages/behalf/record/index'
})
}
}).catch(err=>{
return this.$util.Tips({
title: err
})
})
},
backPage(){
uni.reLaunch({
url:'/pages/admin/work/index'
})
}
}
}
</script>
<style lang="scss">
/deep/ .styleAll{
padding: 0 6rpx;
border: 1rpx solid #DDDDDD;
border-radius: 8rpx;
font-family: Regular;
line-height: 40rpx;
}
.border-b{
border-bottom: 1px dashed #ccc;
}
.icon-ic_Selected{
color: $primary-admin;
}
.bg-primary{
background-color: $primary-admin;
}
.guide{
width: 570rpx;
height: 214rpx;
}
</style>