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.
yanzong_qianduan/pages/serve/pay.vue

235 lines
4.9 KiB

<template>
<view class="pay">
<view class="pay-hd">
<view class="a">订单号<text>{{order_id}}</text></view>
<view class="a">支付价格<text>{{orderInfo.pay_price}}</text></view>
</view>
<view class="pay-bd">
<view class="title">选择支付方式</view>
<view class="item" v-for="(a,i) in list2" @click="tabItem(i)">
<image v-if="tabIndex == i" src="@/static/invoice/select-on.png"></image>
<image v-else src="@/static/invoice/select.png"></image>
{{a.method == 'wechat'?'微信支付':'余额支付'}}<text v-if="a.method == 'balance'">余额{{userInfo.balance}}</text>
</view>
</view>
<view class="pay-btn" @click="clickPay()">确认支付</view>
</view>
</template>
<script>
import { Wechat } from '@/core/payment'
import * as newFunApi from '@/api/newFun'
export default {
data() {
return {
tabIndex: 0,
type: "",
order_id: "",
userInfo: {},
list2: [],
orderInfo: {},
isClick: true,
};
},
onLoad(o) {
console.log(o)
this.order_id = o.order_id;
this.type = o.type;
this.toServerOrder();
},
methods: {
clickPay(){
if(this.isClick == false){
return;
}
this.isClick = false;
if(this.list2[this.tabIndex].method == "balance"){
if(Number(this.orderInfo.pay_price) <= Number(this.userInfo.balance)){
this.toPay()
}else{
this.isClick = true;
uni.showToast({
icon: "none",
title: "余额不足,请选择其他支付方式"
})
}
}else if(this.list2[this.tabIndex].method == "wechat"){
this.toPay1()
}
},
//创建支付方式信息
async toServerOrder(order_id) {
let {status, data, message } = await newFunApi.serverOrderInfo({
client: 'MP-WEIXIN',
order_id: this.order_id
})
if(status == 200){
this.userInfo = data.personal
this.orderInfo = data.order
this.list2 = data.paymentMethods;
console.log(data)
console.log(this.orderInfo)
console.log(this.list2)
console.log(this.userInfo)
}else{
uni.showToast({
icon: "none",
title: message
})
}
},
async toPay1() {
const that = this;
const {status, data } = await newFunApi.serverOrderPay({
order_id: this.order_id,
method: 'wechat',
client: "MP-WEIXIN",
})
if(status == 200) {
Wechat.payment(data.payment)
.then((result) => {
console.log(22,result)
uni.showToast({
title: "支付成功"
})
this.isClick = true;
setTimeout(()=>{
if(that.type == 'fuwu'){
uni.redirectTo({
url: "/pages/news/recycling/orderList"
})
}else if(that.type == 'fuwuorder'){
uni.navigateBack({
delta:1
})
}
},1000)
})
.catch(err => {
uni.showToast({
title: "支付失败"
})
this.isClick = true;
setTimeout(()=>{
if(that.type == 'fuwu'){
uni.redirectTo({
url: "/pages/news/recycling/orderList"
})
}else if(that.type == 'fuwuorder'){
uni.navigateBack({
delta:1
})
}
},1000)
})
}
},
//去支付 余额支付
async toPay() {
const that = this;
const {status, message} = await newFunApi.serverOrderPay({
order_id: this.order_id,
method: 'balance',
client: "MP-WEIXIN",
})
if(status == 200) {
uni.showToast({
title: "支付成功"
})
this.isClick = true;
setTimeout(()=>{
if(that.type == 'fuwu'){
uni.redirectTo({
url: "/pages/news/recycling/orderList"
})
}else if(that.type == 'fuwuorder'){
uni.navigateBack({
delta:1
})
}
},1000)
}else{
this.isClick = true;
uni.showToast({
icon: "none",
title: message
})
}
},
tabItem(i){
this.tabIndex = i
}
}
}
</script>
<style lang="scss" scoped>
.pay{
overflow: hidden;
&-hd{
width: 710rpx;
padding: 0 20rpx;
box-sizing: border-box;
background-color: #fff;
margin: 0 auto;
margin-top: 20rpx;
.a{
padding: 20rpx 0;
display: flex;
align-items: center;
font-size: 28rpx;
color: #666;
text{
margin-left: 20rpx;
color: #212121;
}
}
}
&-bd{
width: 710rpx;
padding: 0 20rpx;
box-sizing: border-box;
background-color: #fff;
margin: 0 auto;
margin-top: 20rpx;
.title{
padding: 30rpx 0;
font-size: 30rpx;
}
.item{
padding: 20rpx 0;
display: flex;
align-items: center;
font-size: 28rpx;
color: #212121;
image{
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
text{
margin-left: 20rpx;
color: #666;
}
}
}
&-btn{
width: 710rpx;
padding: 0 20rpx;
line-height: 80rpx;
box-sizing: border-box;
background-color: #ff3939;
margin: 0 auto;
margin-top: 160rpx;
text-align: center;
font-size: 36rpx;
color: #fff;
border-radius: 20rpx;
}
}
</style>