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.
 
 
 

496 lines
13 KiB

<template>
<view>
<!-- 收银台 -->
<view class="edgeInsetTop"></view>
<view class="wanl-pay">
<view class="price-box">
<!-- <text class="text-df">{{order_no}}</text> -->
<text class="wanl-pip text-price margin-top-sm">{{price}}</text>
</view>
<view class="list-box">
<view class="item" v-for="(item, index) in payList" :key="index">
<text :class="'wlIcon-'+ item.type +'-pay'"></text>
<view class="action">
<text class="title wanl-pip">{{item.name}}</text>
<view v-if="item.type == 'balance'">
<text v-if="isbalance">可用余额 ¥{{user.money}}</text>
<text v-else>余额不足,可用余额 ¥{{user.money}}</text>
</view>
<view v-else>{{item.describe}}</view>
</view>
<view class="radio text-xxl" v-if="item.state" @tap="onSelect(index)">
<text v-if="item.select" class="wlIcon-xuanze-danxuan wanl-orange"></text>
<text v-else class="wlIcon-xuanze wanl-gray-light"></text>
</view>
<view class="radio text-xxl" v-else>
<text class="wlIcon-xuanze-danxuan wanl-gray-light"></text>
</view>
</view>
</view>
<view v-if="disabled">
<button class="mix-btn wanl-bg-redorange"> <text
class="wlIcon-jiazai wlIconfont-spin margin-right-xs"></text>正在支付中... </button>
</view>
<view v-else>
<button v-if="payNum == 1" class="mix-btn wanl-bg-redorange" @tap="confirm()"> 确认支付 </button>
<button v-else class="mix-btn wanl-bg-redorange" @tap="confirm()"> 合并支付 </button>
</view>
<view class="footer text-center">
<view class="text-sm" v-if="order_pay_no">{{order_type === 'groups' ? '拼团':''}}交易号{{order_pay_no}}
</view>
<view> © 万联支付</view>
</view>
</view>
</view>
</template>
<script>
import {
mapState
} from 'vuex';
export default {
data() {
return {
groups: '',
type2: '',
token: '',
kecheng_id:'',
disabled: false,
price: '0.00',
isbalance: false,
order_type: 'goods',
order_no: '',
order_pay_no: '',
payNum: 1, // 支付方式 独立支付-合并支付
payList: []
}
},
computed: {
...mapState(['user'])
},
watch: {
price(val, newval) {
if (val <= parseFloat(this.$store.state.user.money)) {
this.isbalance = true;
this.getPayment();
}
}
},
onLoad(option) {
console.log(777,option)
if (option.groups) {
this.groups = option.groups
}
if (option.type2) {
this.type2 = option.type2
}
if (option.order_id) {
this.kecheng_id = option.order_id
}
this.$api.post({
url: '/wanlshop/pay/getBalance',
success: res => {
this.$store.commit('user/setUserInfo', {
money: res
});
// 获取支付列表
this.getPayment();
}
});
if (option.data) {
var sum = 0,
data = JSON.parse(option.data),
order_ids = [];
if (data.length <= 1) {
this.price = data[0].price;
this.order_type = data[0].type;
this.order_no = `${data[0].type == 'groups' ? '拼团':''}订单号:${data[0].order_no}`;
this.order_no = data[0].order_no
this.order_pay_no = data[0].pay_no;
this.order_id = data[0].order_id;
} else {
data.forEach(item => {
sum = this.$wanlshop.bcadd(sum, item.price);
order_ids.push(item.order_id);
});
this.price = sum;
this.order_id = order_ids;
this.payNum = data.length;
this.order_no = '合并支付 ' + data.length + '个订单';
}
this.token = option.token;
} else if (option.order_id) {
uni.showLoading({
title: '结算中...'
});
this.$api.post({
url: '/wanlshop/pay/getPay',
data: {
order_id: option.order_id,
order_type: option.order_type,
groups: this.groups,
type2: this.type2,
},
success: res => {
uni.hideLoading();
this.token = res.token;
this.price = res.price;
this.order_type = res.order_type;
// this.order_no = `${res.order_type == 'groups' ? '拼团':''}订单号:${res.order_no}`;
this.order_no = res.order_no
this.order_pay_no = res.pay_no;
this.order_id = res.order_id;
}
});
} else {
console.log('非法访问');
}
},
methods: {
getPayment() {
let method = 'wap';
// #ifdef APP-PLUS
method = 'app';
// #endif
// #ifdef MP-BAIDU
method = 'mini';
// #endif
// #ifdef MP-WEIXIN
method = 'miniapp';
// #endif
// #ifdef MP-ALIPAY
method = 'mini';
// #endif
// #ifdef MP-QQ
method = 'mini';
// #endif
// this.payList = [{
// name: '余额支付',
// describe: '',
// type: 'balance',
// method: 'balance',
// state: this.isbalance ? true : false, // 是否可用
// select: this.isbalance ? true : false // 是否选中
// }];
this.payList = [];
// #ifdef H5
if (this.$jssdk.isWechat()) {
this.payList.push({
name: '公众号支付',
describe: '推荐使用公众号支付',
type: 'wechat',
method: 'mp',
state: true,
select: this.isbalance ? false : true
});
} else {
this.payList.push( {
name: '微信支付',
describe: '推荐使用微信支付',
type: 'wechat',
method: method,
state: true,
select: this.isbalance ? false : true
});
// this.payList.push({
// name: '支付宝',
// describe: '',
// type: 'alipay',
// method: method,
// state: true,
// select: false
// }, {
// name: '微信支付',
// describe: '推荐使用微信支付',
// type: 'wechat',
// method: method,
// state: true,
// select: this.isbalance ? false : true
// });
}
// #endif
// #ifndef H5
uni.getProvider({
service: "payment",
success: (e) => {
e.provider.map((value) => {
if (value == 'alipay') {
this.payList.push({
name: '支付宝',
describe: '',
type: value,
method: method,
state: true,
select: false
});
} else if (value == 'wxpay') {
this.payList.push({
name: '微信支付',
describe: '推荐使用微信支付',
type: 'wechat',
method: method,
state: true,
select: this.isbalance ? false : true
});
} else if (value == 'baidu') {
this.payList.push({
name: '百度收银台',
describe: '',
type: value,
method: method,
state: true,
select: false
});
} else if (value == 'appleiap') {
this.payList.push({
name: 'Apple支付',
describe: '',
type: 'apple',
method: method,
state: true,
select: false
});
}
})
}
});
// #endif
},
//确认支付
confirm() {
let data = null;
if (this.disabled) {
return;
}
this.payList.map((value, index, array) => {
if (value.select) {
data = value;
} else {
return;
}
});
// 判断支付是否存在
if (!data) {
uni.showModal({
content: "请选择支付方式",
showCancel: false
});
return;
} else {
this.disabled = true;
// 获取小程序code
// #ifdef MP
uni.login({
success: (e) => {
this.wanlPay(data, e.code);
},
fail: (e) => {
uni.showModal({
content: "无法获取微信code,原因为: " + e.errMsg,
showCancel: false
})
}
})
// #endif
// #ifndef MP
// 如果是公众号获取code
this.wanlPay(data);
// #endif
}
},
async wanlPay(data, code = null) {
this.$api.post({
url: '/wanlshop/pay/payment',
data: {
order_type: this.order_type,
type: data.type,
method: data.method,
code: code,
order_id: this.order_id,
token: this.token
},
success: res => {
// 余额支付/小程序支付
switch (data.type) {
case 'balance':
this.$store.commit('user/setUserInfo', {
money: this.$wanlshop.bcsub(this.$store.state.user.money, this
.price)
});
this.paySuccess();
break;
case 'wechat':
// 微信 H5支付
if (data.method == 'wap') {
setTimeout(() => {
uni.showModal({
content: '请确认微信支付是否已完成',
confirmText: '已完成',
cancelText: '重新支付',
success: response => {
if (response.confirm) {
this.paySuccess();
} else if (response.cancel) {
this.confirm();
}
}
});
}, 2000);
// 异步查询是否支付成功
window.location.href = res;
// 微信 APP支付
} else if (data.method == 'app') {
uni.requestPayment({
provider: 'wxpay',
orderInfo: res,
success: (e) => {
console.log("success", e);
this.paySuccess();
},
fail: (e) => {
// uni.showModal({
// content: "支付失败,原因为: " + e.errMsg,
// showCancel: false
// })
},
complete: () => {
this.disabled = false;
}
})
// 微信 小程序支付
} else if (data.method == 'miniapp') {
console.log('小程序支付')
uni.requestPayment({
appId: res.appId,
nonceStr: res.nonceStr,
package: res.package,
paySign: res.paySign,
signType: res.signType,
timeStamp: res.timeStamp,
success: (e) => {
console.log('小程序支付成功')
this.paySuccess();
},
fail: (e) => {
// uni.showModal({
// content: "支付失败,原因为: " + e.errMsg,
// showCancel: false
// })
}
})
// 微信 公众平台支付
} else if (data.method == 'mp') {
this.$jssdk.wxpay({
data: res,
success: e => {
this.paySuccess();
},
fail: err => {
if (err.errMsg == "chooseWXPay:ok") {
this.$wanlshop.msg('支付成功');
} else if (err.errMsg == "chooseWXPay:cancel") {
// this.$wanlshop.msg('支付失败,取消支付');
} else if (err.errMsg == "chooseWXPay:fail") {
// this.$wanlshop.msg('支付失败');
}
}
})
}
break;
case 'alipay':
if (data.method == 'wap') {
this.disabled = false;
if (this.order_type === 'goods') {
this.$store.commit('statistics/order', {
pay: this.$wanlshop.bcsub(this.$store.state.statistics
.order.pay, this.payNum),
delive: this.$wanlshop.bcadd(this.$store.state
.statistics.order.delive, this.payNum)
});
}
document.write(res);
} else if (data.method == 'app') {
uni.requestPayment({
provider: 'alipay',
orderInfo: res,
success: (e) => {
console.log("success", e);
this.paySuccess();
},
fail: (e) => {
// uni.showModal({
// content: "支付失败,原因为: " + e.errMsg,
// showCancel: false
// })
},
complete: () => {
this.disabled = false;
}
})
}
break;
}
}
});
},
onSelect(key) {
this.payList.map((value, index, array) => {
if (index == key) {
value.select = !value.select;
} else {
value.select = false;
}
});
},
// 支付成功
paySuccess() {
this.disabled = false;
console.log(444, this.order_type)
console.log(this.order_no)
this.$api.post({
url: '/wanlshop/data/zhifuhuidiao',
data: {
type: this.order_type,
order_no: this.order_no,
},
success: res => {
console.log(res)
}
})
if(this.order_type === 'goods'){
// this.$store.commit('statistics/order', {
// pay: this.$wanlshop.bcsub(this.$store.state.statistics.order.pay, this.payNum),
// delive: this.$wanlshop.bcadd(this.$store.state.statistics.order.delive, this.payNum)
// });
uni.navigateTo({
url: '/pages/user/order/details?id='+this.order_id
});
}
if(this.order_type === 'kecheng'){
uni.navigateTo({
url: '/pages/lanhu_kechengxiangqingmulu/index?is_buy=1&id='+this.kecheng_id
});
}
// uni.navigateTo({
// url: '/pages/page/success'
// });
// this.$wanlshop.to(`/pages/page/success?type=pay&order_type=${this.order_type ? this.order_type:'goods'}`);
}
}
}
</script>
<style>
page {
background-color: white;
}
radio-group {
display: block;
}
</style>