496 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			496 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Vue
		
	
	
	
|  | <template> | |||
|  | 	<view> | |||
|  | 		<view class="top-box d-c d-c-s"> | |||
|  | 			<view class="f30 gray3 mb20">{{ $t('w_0212') }}</view> | |||
|  | 			<view class="d-b-c"> | |||
|  | 				<view class="f30">{{ currencyIcon() }}</view> | |||
|  | 				<input class="recharge-input fb" type="digit" v-model="money" placeholder="0.00" /> | |||
|  | 			</view> | |||
|  | 		</view> | |||
|  | 		<view class="pay-list"> | |||
|  | 			<view class="pay-item d-s-c f30 gray3" style="border: none;">{{ $t('w_0215') }}</view> | |||
|  | 			<template v-if="pay_type == 20"> | |||
|  | 				<view class="d-b-c pay-item" @click="changePayType(2, 2, '')"> | |||
|  | 					<image class="pay-icon" src="/static/icon/pay-wallet.png" mode=""></image> | |||
|  | 					<view class="flex-1 f26">{{ $t('w_0226') }}</view> | |||
|  | 					<view class="radio-check" :class="{ checked: payType == 2 && payChannel == 2 }"></view> | |||
|  | 					<!-- <view class="domation fb f30">3</view> --> | |||
|  | 					<view class="icon iconfont icon-jiantou" @click="openWX = !openWX" :class="{ checked: openWX }"></view> | |||
|  | 				</view> | |||
|  | 			</template> | |||
|  | 			<template v-if="pay_type == 10"> | |||
|  | 				<view v-if="payConfig.pay12" class="d-b-c pay-item border-b" @click="changePayType(5, 2)"> | |||
|  | 					<u-icon width="48rpx" height="47rpx" name="/static/icon/wx.png"></u-icon> | |||
|  | 					<text class="m-0-20 flex-1">{{ $t('w_0229') }}</text> | |||
|  | 					<view class="radio-check" :class="{ checked: payType == 2 && payChannel == 5 }"></view> | |||
|  | 				</view> | |||
|  | 				<view v-if="payConfig.pay13" class="d-b-c pay-item border-b" @click="changePayType(6, 2)"> | |||
|  | 					<u-icon width="48rpx" height="47rpx" name="/static/icon/wx.png"></u-icon> | |||
|  | 					<text class="m-0-20 flex-1">{{ $t('w_0230') }}</text> | |||
|  | 					<view class="radio-check" :class="{ checked: payType == 2 && payChannel == 6 }"></view> | |||
|  | 				</view> | |||
|  | 				<view v-if="payConfig.pay15" class="d-b-c pay-item" @click="openHF = !openHF"> | |||
|  | 					<u-icon width="48rpx" height="47rpx" name="/static/icon/yhk.png"></u-icon> | |||
|  | 					<text class="m-0-20 flex-1">{{ $t('w_0231') }}</text> | |||
|  | 					<view class="icon iconfont icon-jiantou" :class="{ checked: openHF }"></view> | |||
|  | 				</view> | |||
|  | 				<view class="autoBox" :class="{ open: !openHF }"> | |||
|  | 					<view class="d-b-c pay-item border-b" v-for="(item, index) in adaList" :key="index" @click="changePayType(6, 3, item.bindCode)"> | |||
|  | 						<text class="m-0-20 flex-1">{{ item.bankName + '(' + item.bankNo + ')' }}</text> | |||
|  | 						<view class="radio-check" :class="{ checked: bindCode == item.bindCode }"></view> | |||
|  | 					</view> | |||
|  | 					<view class="d-s-c pay-item border-b" @click="gotoPage('/pages/user/card/otherAdd?type=0')"> | |||
|  | 						<u-icon name="plus-circle" size="24rpx" color="#333"></u-icon> | |||
|  | 						<text class="m-0-20 flex-1">{{ $t('w_0179') }}</text> | |||
|  | 					</view> | |||
|  | 				</view> | |||
|  | 				<view v-if="payConfig.pay4" class="d-b-c pay-item" @click="openJD = !openJD"> | |||
|  | 					<u-icon width="48rpx" height="47rpx" name="/static/icon/yhk.png"></u-icon> | |||
|  | 					<text class="m-0-20 flex-1">{{ $t('w_0234') }}</text> | |||
|  | 					<view class="icon iconfont icon-jiantou" :class="{ checked: openJD }"></view> | |||
|  | 				</view> | |||
|  | 				<view class="autoBox" :class="{ open: !openJD }"> | |||
|  | 					<view class="d-b-c pay-item border-b" v-for="(item, index) in jdList" :key="index" @click="changePayType(4, 3, item.bindCode)"> | |||
|  | 						<text class="m-0-20 flex-1">{{ item.bankName + '(' + item.bankNo + ')' }}</text> | |||
|  | 						<view class="radio-check" :class="{ checked: bindCode == item.bindCode }"></view> | |||
|  | 					</view> | |||
|  | 					<view class="d-s-c pay-item border-b" @click="gotoPage('/pages/user/card/otherAdd?type=1')"> | |||
|  | 						<u-icon name="plus-circle" size="24rpx" color="#333"></u-icon> | |||
|  | 						<text class="m-0-20 flex-1">{{ $t('w_0179') }}</text> | |||
|  | 					</view> | |||
|  | 				</view> | |||
|  | 			</template> | |||
|  | 		</view> | |||
|  | 		<button class="normal-sub-btn" @click="payFunc">{{ $t('MN_F_T_87') }}</button> | |||
|  | 		<!-- 	<template v-if="showPop"> | |||
|  | 			<view class="pop-bg"></view> | |||
|  | 			<view class="pop-success" v-if="showPop"> | |||
|  | 				<view class="d-c d-b-c hh100"> | |||
|  | 					<view class="d-e-c ww100" @click="showPop = false"><u-icon name="close" size="34rpx" | |||
|  | 							color="#999"></u-icon></view> | |||
|  | 					<view><u-icon size="77rpx" name="/static/icon/success.png"></u-icon></view> | |||
|  | 					<view class="f30 gray3 fb">{{$t('w_0334')}}</view> | |||
|  | 					<view class="f28 gray3">{{currencyIcon()}}3000</view> | |||
|  | 					<button class="pop-btn">{{$t('w_0035')}}</button> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 		</template> --> | |||
|  | 		<popInput :title="$t('w_0251')" :password="true" :placeholder="$t('w_0250')" :isShow="isPassword" @close="closePassword"></popInput> | |||
|  | 		<view v-if="isQrcode"> | |||
|  | 			<view class="pop-bg" @click="isQrcode = false"></view> | |||
|  | 			<view class="pop-success-s"> | |||
|  | 				<view class="d-c d-b-c hh100"> | |||
|  | 					<view class="d-e-c ww100" @click="isQrcode = false"><u-icon name="close" size="34rpx" color="#999"></u-icon></view> | |||
|  | 					<view class="f30 gray3 fb tc mb20">{{ $t('w_0226') }}</view> | |||
|  | 					<canvas id="qrcode" canvas-id="qrcode" style="width: 200px;height: 200px;"></canvas> | |||
|  | 					<button class="pop-btn mt20" @click="isQrcode = false">{{ $t('w_0035') }}</button> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 		</view> | |||
|  | 	</view> | |||
|  | </template> | |||
|  | 
 | |||
|  | <script> | |||
|  | /* 引入uQRCode */ | |||
|  | import UQRCode from '@/uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js'; | |||
|  | import popInput from '@/components/pop-input.vue'; | |||
|  | export default { | |||
|  | 	components: { | |||
|  | 		popInput | |||
|  | 	}, | |||
|  | 	data() { | |||
|  | 		return { | |||
|  | 			isPassword: false, | |||
|  | 			money: '', | |||
|  | 			radiovalue1: 10, | |||
|  | 			showPop: false, | |||
|  | 			payConfig: { | |||
|  | 				pay4: true, //京东银行卡
 | |||
|  | 				pay12: true, //宝付微信
 | |||
|  | 				pay13: true, //汇付微信
 | |||
|  | 				pay15: true, //汇付银行卡
 | |||
|  | 				pay20: true //微信APP(true=显示,false=不显示)
 | |||
|  | 			}, | |||
|  | 			jdList: [], | |||
|  | 			adaList: [], | |||
|  | 			payChannel: -1, | |||
|  | 			payType: '', | |||
|  | 			bindCode: '', | |||
|  | 			openJD: false, | |||
|  | 			openHF: false, | |||
|  | 			orderCode: '', | |||
|  | 			flag: '', | |||
|  | 			openZX: false, | |||
|  | 			openZH: false, | |||
|  | 			pay_type: 10, | |||
|  | 			businessType: 3, | |||
|  | 			isQrcode: false, | |||
|  | 			payTime: false | |||
|  | 		}; | |||
|  | 	}, | |||
|  | 	onReady() {}, | |||
|  | 	onLoad() { | |||
|  | 		// #ifdef APP-PLUS
 | |||
|  | 		this.getPayType(); | |||
|  | 		// #endif
 | |||
|  | 		// #ifndef APP-PLUS
 | |||
|  | 		this.pay_type = 10; | |||
|  | 		// #endif
 | |||
|  | 	}, | |||
|  | 	onShow() { | |||
|  | 		this.getPayconfig(); | |||
|  | 		this.getJdFast(); | |||
|  | 		this.getAdaFast(); | |||
|  | 	}, | |||
|  | 	methods: { | |||
|  | 		getQrcode(e) { | |||
|  | 			let self = this; | |||
|  | 			self.isQrcode = true; | |||
|  | 			self.$nextTick(() => { | |||
|  | 				// 获取uQRCode实例
 | |||
|  | 				var qr = new UQRCode(); | |||
|  | 				// 设置二维码内容
 | |||
|  | 				qr.data = e; | |||
|  | 				// 设置二维码大小,必须与canvas设置的宽高一致
 | |||
|  | 				qr.size = 200; | |||
|  | 				// 调用制作二维码方法
 | |||
|  | 				console.log(11111); | |||
|  | 				qr.make(); | |||
|  | 				// 获取canvas上下文
 | |||
|  | 				var canvasContext = uni.createCanvasContext('qrcode', self); // 如果是组件,this必须传入
 | |||
|  | 				console.log(canvasContext); | |||
|  | 				// 设置uQRCode实例的canvas上下文
 | |||
|  | 				qr.canvasContext = canvasContext; | |||
|  | 				// 调用绘制方法将二维码图案绘制到canvas上
 | |||
|  | 				qr.drawCanvas(); | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		getPayType() { | |||
|  | 			let self = this; | |||
|  | 			let url = this.config.yxyapi; | |||
|  | 			uni.request({ | |||
|  | 				url: url + '/yiti.php', | |||
|  | 				data: { | |||
|  | 					type: 2, | |||
|  | 					platform: self.getPlatform() | |||
|  | 				}, | |||
|  | 				success: result => { | |||
|  | 					console.log(result); | |||
|  | 					var data = result.data; | |||
|  | 					self.pay_type = data.pay_type; | |||
|  | 				}, | |||
|  | 				error: error => { | |||
|  | 					console.log('----------------error'); | |||
|  | 					console.log(error); | |||
|  | 				} | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		changePayType(payChannel, payType, bindCode) { | |||
|  | 			if (payChannel == -1 && payType == -1 && bindCode == '') { | |||
|  | 				this.openZH = !this.openZH; | |||
|  | 			} | |||
|  | 			this.payChannel = payChannel; | |||
|  | 			this.payType = payType; | |||
|  | 			this.bindCode = bindCode || ''; | |||
|  | 		}, | |||
|  | 		/* 京东银行卡绑卡列表 */ | |||
|  | 		getPayconfig() { | |||
|  | 			let self = this; | |||
|  | 			self._get('pay/config', {}, res => { | |||
|  | 				self.payConfig = res.data; | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		/* 京东银行卡绑卡列表 */ | |||
|  | 		getJdFast() { | |||
|  | 			let self = this; | |||
|  | 			self._get('pay/jd-fast/list', {}, res => { | |||
|  | 				self.jdList = res.data; | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		/* 汇付银行卡绑卡列表 */ | |||
|  | 		getAdaFast() { | |||
|  | 			let self = this; | |||
|  | 			self._get('pay/ada-fast/list', {}, res => { | |||
|  | 				self.adaList = res.data; | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		closePassword(e) { | |||
|  | 			console.log(e); | |||
|  | 			if (e) { | |||
|  | 				if (this.payChannel == 4) { | |||
|  | 					this.jdFast(e); | |||
|  | 				} | |||
|  | 				if (this.payChannel == 6) { | |||
|  | 					this.adaFast(e); | |||
|  | 				} | |||
|  | 			} | |||
|  | 			this.isPassword = false; | |||
|  | 		}, | |||
|  | 		adaFast(e) { | |||
|  | 			let self = this; | |||
|  | 			let params = { | |||
|  | 				smsCode: e, | |||
|  | 				bindCode: self.bindCode, | |||
|  | 				orderCode: self.orderCode | |||
|  | 			}; | |||
|  | 			self._post('pay/ada-fast/pay-confirm', params, res => { | |||
|  | 				uni.showModal({ | |||
|  | 					title: self.$t('w_0034'), | |||
|  | 					content: res.msg, | |||
|  | 					success() { | |||
|  | 						self.money = ''; | |||
|  | 						self.payChannel = ''; | |||
|  | 						self.orderCode = ''; | |||
|  | 						self.payType = ''; | |||
|  | 						self.bindCode = ''; | |||
|  | 					} | |||
|  | 				}); | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		jdFast(e) { | |||
|  | 			let self = this; | |||
|  | 			let params = { | |||
|  | 				smsCode: e, | |||
|  | 				bindCode: self.bindCode, | |||
|  | 				orderCode: self.orderCode | |||
|  | 			}; | |||
|  | 			self._post('pay/jd-fast/pay-confirm', params, res => { | |||
|  | 				uni.showModal({ | |||
|  | 					title: self.$t('w_0034'), | |||
|  | 					content: res.msg, | |||
|  | 					success() { | |||
|  | 						self.money = ''; | |||
|  | 						self.payChannel = ''; | |||
|  | 						self.orderCode = ''; | |||
|  | 						self.payType = ''; | |||
|  | 						self.bindCode = ''; | |||
|  | 					} | |||
|  | 				}); | |||
|  | 			}); | |||
|  | 		}, | |||
|  | 		/* 点击充值 */ | |||
|  | 		payFunc() { | |||
|  | 			if (!this.money || this.money <= 0) { | |||
|  | 				uni.showToast({ | |||
|  | 					title: this.$t('S_C_70') + this.$t('w_0212'), | |||
|  | 					icon: 'none' | |||
|  | 				}); | |||
|  | 				return; | |||
|  | 			} | |||
|  | 			if (this.payType === '') { | |||
|  | 				uni.showToast({ | |||
|  | 					title: this.$t('CK_KS_38') + this.$t('w_0215'), | |||
|  | 					icon: 'none' | |||
|  | 				}); | |||
|  | 				return; | |||
|  | 			} | |||
|  | 			this.preCharge(); | |||
|  | 		}, | |||
|  | 
 | |||
|  | 		/* 在线预充值 */ | |||
|  | 		preCharge() { | |||
|  | 			let self = this; | |||
|  | 			self._get( | |||
|  | 				'member/api/recharge/preCharge', | |||
|  | 				{ | |||
|  | 					rechargeAmount: self.money | |||
|  | 				}, | |||
|  | 				res => { | |||
|  | 					if (res.flag == 1) { | |||
|  | 						self.orderCode = res.orderCode; | |||
|  | 						self.zxPay(); | |||
|  | 					} else { | |||
|  | 						uni.showToast({ | |||
|  | 							title: self.$t('请稍后再试!'), | |||
|  | 							icon: 'none' | |||
|  | 						}); | |||
|  | 					} | |||
|  | 				} | |||
|  | 			); | |||
|  | 		}, | |||
|  | 		/* 支付状态 */ | |||
|  | 		zxPay() { | |||
|  | 			let self = this; | |||
|  | 			let params = { | |||
|  | 				payChannel: self.payChannel, | |||
|  | 				businessCode: self.orderCode, | |||
|  | 				businessType: self.businessType, | |||
|  | 				payType: self.payType, | |||
|  | 				bindCode: self.bindCode | |||
|  | 			}; | |||
|  | 			uni.showLoading({ | |||
|  | 				title: 'Loading....' | |||
|  | 			}); | |||
|  | 			self._post( | |||
|  | 				'pay/unifiedorder', | |||
|  | 				params, | |||
|  | 				res => { | |||
|  | 					if (res.code == 200) { | |||
|  | 						/* 微信支付 */ | |||
|  | 						if (self.payType == 2) { | |||
|  | 							self.getQrcode(res.data); | |||
|  | 							self.payTime = true; | |||
|  | 							self.payStatus(); | |||
|  | 						} | |||
|  | 						if (self.payType == 3) { | |||
|  | 							self.isPassword = true; | |||
|  | 						} | |||
|  | 					} | |||
|  | 
 | |||
|  | 					console.log(res); | |||
|  | 					uni.hideLoading(); | |||
|  | 					// pay(res, self);
 | |||
|  | 				}, | |||
|  | 				err => { | |||
|  | 					uni.hideLoading(); | |||
|  | 				} | |||
|  | 			); | |||
|  | 		}, | |||
|  | 		closeCode() { | |||
|  | 			this.isQrcode = false; | |||
|  | 			this.payTime = false; | |||
|  | 		}, | |||
|  | 		payStatus() { | |||
|  | 			let self = this; | |||
|  | 			let params = { | |||
|  | 				payChannel: self.payChannel, | |||
|  | 				businessCode: self.orderCode, | |||
|  | 				businessType: self.businessType, | |||
|  | 				payType: self.payType, | |||
|  | 				bindCode: self.bindCode | |||
|  | 			}; | |||
|  | 			let callback = function() { | |||
|  | 				self._get('pay/status', params, res => { | |||
|  | 					if (res.data == 1) { | |||
|  | 						self.closeCode(); | |||
|  | 						self.money = ''; | |||
|  | 						self.payChannel = ''; | |||
|  | 						self.orderCode = ''; | |||
|  | 						self.payType = ''; | |||
|  | 						self.bindCode = ''; | |||
|  | 						uni.showModal({ | |||
|  | 							title: self.$t('w_0034'), | |||
|  | 							content: self.$t('w_0335'), | |||
|  | 							showCancel: false | |||
|  | 						}); | |||
|  | 					} else { | |||
|  | 						if (self.payTime) { | |||
|  | 							self.payStatus(); | |||
|  | 						} | |||
|  | 					} | |||
|  | 				}); | |||
|  | 			}; | |||
|  | 			setTimeout(function() { | |||
|  | 				callback(); | |||
|  | 			}, 5000); | |||
|  | 		} | |||
|  | 	} | |||
|  | }; | |||
|  | </script> | |||
|  | 
 | |||
|  | <style lang="scss"> | |||
|  | .top-box { | |||
|  | 	margin-top: 7rpx; | |||
|  | 	margin-bottom: 21rpx; | |||
|  | 	height: 166rpx; | |||
|  | 	background: #ffffff; | |||
|  | 	padding: 30rpx; | |||
|  | 	box-sizing: border-box; | |||
|  | } | |||
|  | 
 | |||
|  | .recharge-input { | |||
|  | 	font-size: 42rpx; | |||
|  | 	line-height: 1.5; | |||
|  | 	flex: 1; | |||
|  | } | |||
|  | 
 | |||
|  | .pay-list { | |||
|  | 	background-color: #ffffff; | |||
|  | 	padding: 0 30rpx; | |||
|  | 	margin-bottom: 60rpx; | |||
|  | } | |||
|  | 
 | |||
|  | .pay-item { | |||
|  | 	height: 115rpx; | |||
|  | 	border-bottom: 1rpx solid #eee; | |||
|  | } | |||
|  | 
 | |||
|  | .pay-item:last-child { | |||
|  | 	border: none; | |||
|  | } | |||
|  | 
 | |||
|  | .pay-icon { | |||
|  | 	width: 48rpx; | |||
|  | 	height: 48rpx; | |||
|  | } | |||
|  | 
 | |||
|  | .radio-check { | |||
|  | 	width: 32rpx; | |||
|  | 	height: 32rpx; | |||
|  | 	background: #ffffff; | |||
|  | 	border: 2rpx solid #dddddd; | |||
|  | 	border-radius: 50%; | |||
|  | 	margin-right: 11rpx; | |||
|  | 	margin-left: 20rpx; | |||
|  | 	position: relative; | |||
|  | 	box-sizing: border-box; | |||
|  | } | |||
|  | 
 | |||
|  | .radio-check.checked { | |||
|  | 	border: none; | |||
|  | 	background-color: #fb3024; | |||
|  | } | |||
|  | 
 | |||
|  | .radio-check.checked::after { | |||
|  | 	content: ''; | |||
|  | 	position: absolute; | |||
|  | 	z-index: 1; | |||
|  | 	width: 16rpx; | |||
|  | 	height: 16rpx; | |||
|  | 	background: #ffffff; | |||
|  | 	border-radius: 50%; | |||
|  | 	left: 8rpx; | |||
|  | 	top: 8rpx; | |||
|  | } | |||
|  | 
 | |||
|  | .icon.icon-jiantou { | |||
|  | 	font-size: 26rpx; | |||
|  | 	color: #999; | |||
|  | 	font-weight: bold; | |||
|  | 	margin-left: 10rpx; | |||
|  | 	transition: transform 0.4s; | |||
|  | } | |||
|  | 
 | |||
|  | .icon.icon-jiantou.checked { | |||
|  | 	transform: rotate(90deg); | |||
|  | } | |||
|  | 
 | |||
|  | .autoBox { | |||
|  | 	min-height: 100rpx; | |||
|  | 	padding: 20rpx 0; | |||
|  | 	transition: all 0.6s ease; | |||
|  | 	box-sizing: border-box; | |||
|  | } | |||
|  | 
 | |||
|  | .autoBox.open { | |||
|  | 	height: 0; | |||
|  | 	min-height: 0; | |||
|  | 	overflow: hidden; | |||
|  | 	padding: 0; | |||
|  | } | |||
|  | 
 | |||
|  | .pop-success-s { | |||
|  | 	position: fixed; | |||
|  | 	z-index: 99; | |||
|  | 	width: 664rpx; | |||
|  | 	background: #ffffff; | |||
|  | 	border-radius: 10px; | |||
|  | 	padding: 50rpx 20rpx; | |||
|  | 	box-sizing: border-box; | |||
|  | 	left: 0; | |||
|  | 	top: 20%; | |||
|  | 	right: 0; | |||
|  | 	margin: auto; | |||
|  | } | |||
|  | </style> |