Files
dtx_store/pages/pay/pay.vue

300 lines
13 KiB
Vue

<template>
<view>
<oct-pay :price="price" :coins="coins" :payNo="payNo" color="#34CE98" price-color="#e6576b"
:payPlatform="platform" @onPay="pay" />
<payKeyboard v-if="showKeyBoard" title="Mi安全键盘" @success="enterSuccess" @close="close"></payKeyboard>
</view>
</template>
<script>
import payKeyboard from '@/components/mi-payKeyboard/mi-payKeyboard.vue'
import eventBus from '../../utils/eventBus.js';
import {
wxPAY,
alPAY,
dtPAY,
collagePAY,
payIndex
} from '@/apis/interfaces/pay'
export default {
components: {
payKeyboard
},
data() {
return {
payNo: "",
price: "",
coins: "",
platform: ['dtpay'],
oepnType: '',
canpay: true,
has_transfer_password: true,
password: '',
showKeyBoard: false,
type: '',
}
},
mounted() {
this.payNo = this.$Route.query.orderNo
this.price = Number(this.$Route.query.price).toFixed(2)
if (this.$Route.query.oepnType === 'order') {
this.oepnType = this.$Route.query.oepnType
}
if (this.$Route.query.type) {
this.type = this.$Route.query.type
}
},
onShow() {
this.payIndex();
},
methods: {
pay(e) {
if (e.platform === 'dtpay') return this.inputPassword();
uni.getProvider({
service: 'payment',
success: res => {
if (res.provider.findIndex(val => val === e.platform) < 0) {
switch (e.platform) {
case 'wxpay':
uni.showToast({
title: '支付失败,您暂未安装微信',
icon: 'none'
})
break;
case 'alipay':
uni.showToast({
title: '支付失败,您暂未安装支付宝',
icon: 'none'
})
break;
}
return
}
if (e.platform === 'wxpay') this.getWXPAY(e.platform)
if (e.platform === 'alipay') this.getALPAY(e.platform)
}
})
},
//获取支付
payIndex() {
payIndex().then(res => {
this.has_transfer_password = res.has_transfer_password;
this.coins = res.score
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none",
mask: true,
})
})
},
// 输入支付密码
inputPassword() {
if (!this.has_transfer_password) {
uni.showModal({
title: '温馨提示',
content: '是否现在就去设置支付密码',
confirmText: '立即设置',
confirmColor: "#34CE98",
cancelText: '再想想',
cancelColor: "#666666",
success: (res) => {
if (res.confirm) {
this.$Router.push({
name: "AccountResetPassword"
})
}
this.canpay = true
}
})
} else {
this.showKeyBoard = true
}
},
// 输入正确的回调
enterSuccess(password) {
this.password = password
this.showKeyBoard = false
this.getDTPAY();
},
// 点击[取消] 关闭输入框 的回调
close() {
this.showKeyBoard = false;
this.canpay = true;
},
// 调用 dt 支付
getDTPAY() {
if (this.canpay) {
this.canpay = false
let requestUrl = dtPAY
if (this.type === 'pin') {
requestUrl = collagePAY
}
requestUrl(this.payNo, this.password).then(res => {
if (res.state === 'warning') {
uni.showModal({
title: '当前DT积分不足',
content: '不能支付该订单,是否放弃当前支付',
confirmText: '立即充值',
confirmColor: "#34CE98",
cancelText: '放弃支付',
cancelColor: "#666666",
success: (res) => {
if (res.confirm) {
this.$Router.push({
name: "AccountRecharge"
})
} else {
uni.navigateBack();
}
this.canpay = true
}
})
} else {
if (this.oepnType === 'order') {
uni.showModal({
title: '支付成功',
content: '该订单已支付成功',
confirmText: ' 返回订单',
confirmColor: "#34CE98",
showCancel: false,
success: (res) => {
if (res.confirm) {
this.$Router.back();
eventBus.$emit('paySuccess', this.payNo);
}
this.canpay = true
}
})
} else {
if (this.type === 'pin') {
console.log('pin........', res)
this.canpay = true
if (res.detailId) {
uni.showLoading({
title:'跳转中',
mask:true,
})
setTimeout(() => {
uni.hideLoading()
uni.navigateTo({
url: '/pages/group-book/success/success?id=' + res.detailId
})
}, 2000)
} else {
uni.showModal({
title: '温馨提示',
content: '该订单拼团成功',
confirmText: '查看订单',
confirmColor: "#34CE98",
cancelText: '再逛逛',
cancelColor: "#666666",
success: (res) => {
if(res.confirm){
uni.navigateTo({
url:'/pages/group-book/list/list'
})
} if(res.cancel){
uni.navigateTo({
url:'/pages/store/index'
})
}
}
})
}
} else {
uni.showModal({
title: '支付成功',
content: '该订单已支付成功',
confirmText: '我的订单',
confirmColor: "#34CE98",
cancelText: '再逛逛',
cancelColor: "#666666",
success: (res) => {
if (res.confirm) {
this.$Router.push({
name: "Order",
params: {
index: 0
},
})
} else {
uni.navigateBack();
}
this.canpay = true
}
})
}
}
}
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none",
mask: true,
})
this.canpay = true
})
}
},
getALPAY(payType) {
alPAY(this.payNo).then(res => {
this.callPay(res, payType)
})
},
getWXPAY(payType) {
wxPAY(this.payNo).then(res => {
let config = JSON.parse(res)
this.callPay(config, payType)
})
},
callPay(orderInfo, payType) {
uni.requestPayment({
provider: payType,
orderInfo,
success: payRes => {
uni.showModal({
title: '支付成功',
content: '订单已支付,我们将尽快为您安排发货,可在订单管理查询订单动态',
showCancel: false,
success: onRes => {
if (onRes.confirm) {
if (this.$Route.query.oepnType === 'order') {
this.$store.commit('setRefresh', 1)
}
this.$Router.back()
}
}
})
},
fail: payErr => {
if (payErr.errCode == '-100') {
uni.showToast({
title: '支付被取消',
icon: 'none'
})
} else {
uni.showToast({
title: payErr.errMsg,
icon: 'none'
})
}
}
})
}
}
}
</script>
<style>
</style>