<template>
	<view class="container cashier">
		<view class="container-cash clearfix">
			<view class="container-wrapper">
				<view class="pay-content">
					<view class="pay-p"><text>待付金额</text></view>
					<view class="pay-money">
						<text class="pay-sm">￥</text> <text class="pay-bg">{{ handelPayMsg.price | NumFormat }}</text>
					</view>
					<view class="pay-mouth">套餐：{{ handelPayMsg.duration }}个月</view>
				</view>
				<view class="pay-check">
					<view class="check-title"><view class="text">选择支付方式</view></view>
					<view class="pay-checked">
						<view class="pay-item" :class="{ current: tabCurrentIndex === 0 }" @click="tabClick(0)">
							<view class="item-l">
								<view class="item-icon"><text class="iconfont icon-weixinzhifu"></text></view>
								<view class="item-texts"><text>微信支付</text></view>
							</view>
							<view class="item-r"> <text class="iconfont icon-duigou"></text> </view>
						</view>
						<view class="pay-item" :class="{ current: tabCurrentIndex === 1 }" @click="tabClick(1)">
							<view class="item-l">
								<view class="item-icon"><text class="iconfont icon-qiyewangyinzhifu"></text></view>
								<view class="item-text">
									<view class="txt-p">企业网银支付</view> <view class="txt-t">需要在电脑端汇款</view>
								</view>
							</view>
							<view class="item-r"> <text class="iconfont icon-duigou"></text> </view>
						</view>
						<view class="pay-item" :class="{ current: tabCurrentIndex === 2 }" @click="tabClick(2)">
							<view class="item-l">
								<view class="item-icon"><text class="iconfont icon-gerenwangyinzhifu"></text></view>
								<view class="item-text">
									<view class="txt-p">个人网银支付</view> <view class="txt-t">需要在电脑端汇款</view>
								</view>
							</view>
							<view class="item-r"> <text class="iconfont icon-duigou"></text> </view>
						</view>
					</view>
				</view>
			</view>
			<view class="pay-button">
				<view class="btn" @click.stop="payConfirmClick" :style="{ background: btnColor }">{{
					buttonText
				}}</view>
			</view>
		</view>
		<view class="alert spec" :class="specClass" v-if="isShowTip">
			<!-- 选择支付弹窗说明 -->
			<view class="payun-alert" @tap="hideTips">
				<view class="content">
					<view class="title">
						<text>支付链接</text> <text class="iconfont icon-iconfontguanbi" @click.stop="hideTips"></text>
					</view>
					<view class="text-content">
						<view class="text"
							>请复制以下链接，并发送至电脑端，在浏览器访问该链接并选择银行尽快完成支付</view
						>
						<view class="text-p">{{ payHttpUrl }}</view> <view class="text-b">链接有效期为72小时</view>
					</view>
					<view class="text-button" @click.stop="clipboard(payHttpUrl)">复制链接</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
import authorize from '@/common/config/authorize.js'
const thorui = require('@/components/clipboard/clipboard.thorui.js')
export default {
	data() {
		return {
			isIphoneX: this.$store.state.isIphoneX,
			CustomBar: this.CustomBar, // 顶部导航栏高度
			tabCurrentIndex: 0,
			isShowTip: false,
			buttonText: '使用微信支付',
			btnColor: '#09BB07',
			handelPayMsg: {},
			payType: 0,
			isPaySwitch: true,
			payParams: {
				code: 0,
				vipRecordId: 0
			},
			payHttpUrl: 'https://www.caimei365.com'
		}
	},
	onLoad(option) {
		this.initGetStotage(option)
	},
	filters: {
		NumFormat(value) {
			if (!value) return '0.00'
			/*原来用的是Number(value).toFixed(0)，这样取整时有问题，例如0.51取整之后为1，感谢Nils指正*/
			/*后来改成了 Number(value)|0,但是输入超过十一位就为负数了，具体见评论 */
			var intPart = Number(value) - (Number(value) % 1) //获取整数部分（这里是windy93的方法）
			var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') //将整数部分逢三一断
			var floatPart = '.00' //预定义小数部分
			var value2Array = value.toString().split('.')
			//=2表示数据有小数位
			if (value2Array.length == 2) {
				floatPart = value2Array[1].toString() //拿到小数部分

				if (floatPart.length == 1) {
					//补0,实际上用不着
					return intPartFormat + '.' + floatPart + '0'
				} else {
					return intPartFormat + '.' + floatPart
				}
			} else {
				return intPartFormat + floatPart
			}
		}
	},
	methods: {
		async initGetStotage(option) {
			let data = JSON.parse(option.data)
			this.payParams.vipRecordId = data.vipRecordId
			this.handelPayMsg = data
			this.PayOrderOnLineSwitch()
			console.log(this.handelPayMsg)
		},
		PayOrderOnLineSwitch() {
			// 线上支付开关
			this.PayService.PayOrderOnLineSwitch()  
				.then(response => {
					if (response.data === 0) {
						this.isPaySwitch = true
					} else {
						this.isPaySwitch = false
					}
				})
				.catch(error => {
					console.log('线上支付开关异常')
				})
		},
		payConfirmClick() {
			// 友盟埋点收集选择支付方式
			if(process.env.NODE_ENV != 'development'){
				this.$uma.trackEvent('Um_Event_userClubMemberChooseWechatPay', {
					Um_Key_PageName: '支付超级会员',
					Um_Key_SourcePage: '支付超级会员',
					Um_Key_PayName:`${this.buttonText}`,
					Um_Key_Month: `${this.handelPayMsg.duration}个月`,
				})
			}
			if (this.isPaySwitch) {
				this.$util.msg('支付系统遇到点小问题，请稍后重试')
				return
			}
			switch (this.tabCurrentIndex) {
				case 0: // 微信小程序支付
					this.MiniWxPayFor()
					break
				case 1: // 生成企业网银链接
					this.BuildCatenate()
					break
				case 2: // 生成个人网银链接
					this.BuildCatenate()
					break
			}
		},
		async MiniWxPayFor() {
			// 使用微信支付
			this.payParams.code = await authorize.getCode('weixin')
			this.PayService.PayOrderVipWechat(this.payParams)
				.then(response => {
					let PayInfo = JSON.parse(response.data.data.payInfo)
					this.WxRequestPayment(PayInfo)
				})
				.catch(error => {
					this.$util.msg(error.msg, 2000)
				})
		},
		WxRequestPayment(data) {
			// 微信支付Api
			let self = this
			wx.requestPayment({
				timeStamp: data.timeStamp,
				nonceStr: data.nonceStr,
				package: data.package,
				signType: data.signType,
				paySign: data.paySign,
				success: function(res) {
					wx.reLaunch({ url: '/pages/tabBar/user/user' })
				},
				fail: function(res) {
					self.$util.msg('用户取消支付~')
				},
				complete: function(res) {}
			})
		},
		BuildCatenate() {
			// 生成网银支付链接
			this.PayService.PayOrderPayLink({
				vipRecordId: this.payParams.vipRecordId,
				payType: this.payType
			}).then(response => {
				this.payHttpUrl = response.data
				this.isShowTip = true
			})
		},
		tabClick(index) {
			//tab切换
			this.tabCurrentIndex = this.payType = index
			switch (index) {
				case 0:
					this.btnColor = '#09BB07'
					this.buttonText = '使用微信支付'
					break
				case 1:
					this.btnColor = '#034582'
					this.buttonText = '生成企业网银链接'
					break
				case 2:
					this.btnColor = '#034582'
					this.buttonText = '生成个人网银链接'
					break
			}
		},
		hideTips() {
			//隐藏弹窗
			this.isShowTip = false
		},
		clipboard(data) {
			thorui.getClipboardData(data, res => {
				if (res) {
					this.isShowTip = false
					this.$util.msg('复制成功', 2000, true, 'success')
					// // 友盟埋点收集复制网银链接
					// if(process.env.NODE_ENV != 'development'){
					// 	this.$uma.trackEvent('Um_Event_CopyUnionPay', {
					// 		Um_Key_PageName: '网银支付',
					// 		Um_Key_SourcePage: '线上支付',
					// 		Um_Key_PayName:`${this.buttonText}`,
					// 		Um_Key_PayOrderID:`${this.orderId}`
					// 	})
					// }
				} else {
					this.$util.msg('复制失败', 2000, true, 'none')
				}
			})
		}
	},
	onShow() {}
}
</script>

<style lang="scss">
page {
	height: auto !important;
	background-color: #ffffff;
}
.container-cash {
	width: 100%;
	margin-top: 40rpx;
	.container-wrapper {
		width: 100%;
		box-sizing: border-box;
		padding: 0 24rpx;
		.pay-content {
			width: 100%;
			height: 254rpx;
			padding: 92rpx 40rpx 16rpx 40rpx;
			box-sizing: border-box;
			background: url(https://static.caimei365.com/app/img/icon/icon-member-pay@2x.png) no-repeat;
			background-size: cover;
			float: left;
			position: relative;
			.pay-p {
				font-size: $font-size-26;
				color: #4e4539;
				line-height: 36rpx;
			}
			.pay-money {
				color: #4e4539;
				line-height: 84rpx;
				font-weight: bold;
				.pay-sm {
					font-size: $font-size-26;
				}
				.pay-bg {
					font-size: 50rpx;
				}
			}
			.pay-mouth {
				position: absolute;
				right: 40rpx;
				bottom: 16rpx;
				line-height: 36rpx;
				font-size: $font-size-26;
				color: #4e4539;
			}
		}
		.pay-check {
			width: 100%;
			height: auto;
			float: left;
			.check-title {
				width: 622rpx;
				height: 40rpx;
				line-height: 40rpx;
				padding: 0 20rpx;
				margin-top: 24rpx;
				.text {
					font-size: $font-size-28;
					color: $text-color;
					text-align: left;
					float: left;
				}
				.icon {
					width: 40rpx;
					height: 40rpx;
					border-radius: 50%;
					line-height: 40rpx;
					text-align: center;
					color: #ffffff;
					font-size: $font-size-24;
					background: radial-gradient(
						circle,
						rgba(225, 86, 22, 1) 0%,
						rgba(255, 170, 0, 1) 67%,
						rgba(249, 185, 156, 1) 100%
					);
					float: right;
				}
			}
			.pay-checked {
				width: 100%;
				height: auto;
				.pay-item {
					width: 100%;
					height: 120rpx;
					box-sizing: border-box;
					border: 1px solid #e1e1e1;
					border-radius: 8rpx;
					padding: 20rpx;
					margin: 24rpx 0;
					display: flex;
					background-color: #ffffff;
					&.current {
						border-color: #e4aa43;
						.item-r {
							.icon-duigou {
								color: #e4aa43;
							}
						}
					}
					.item-l {
						flex: 8;
						.item-icon {
							width: 72rpx;
							height: 72rpx;
							float: left;
							text-align: center;
							line-height: 72rpx;
							margin-right: 20rpx;
							.iconfont {
								font-size: 78rpx;
							}
							.icon-weixinzhifu {
								color: #09bb07;
							}
							.icon-gerenwangyinzhifu {
								color: #034582;
							}
							.icon-qiyewangyinzhifu {
								color: #004889;
							}
						}
						.item-texts {
							line-height: 66rpx;
							font-size: $font-size-26;
							color: $text-color;
						}
						.item-text {
							line-height: 36rpx;
							font-size: $font-size-26;
							.txt-p {
								color: $text-color;
							}
							.txt-t {
								color: #999999;
							}
						}
					}
					.item-r {
						flex: 2;
						text-align: center;
						line-height: 72rpx;
						.icon-duigou {
							font-size: 54rpx;
							color: #ffffff;
						}
					}
				}
			}
		}
	}
	.pay-button {
		width: 100%;
		float: left;
		margin-top: 30rpx;
		.btn {
			width: 662rpx;
			height: 88rpx;
			border-radius: 44rpx;
			font-size: $font-size-28;
			line-height: 88rpx;
			color: #ffffff;
			margin: 0 auto;
			text-align: center;
			background: $btn-confirm;
		}
	}
	.pay-bring-wrapper {
		width: 100%;
		padding: 24rpx 0;
		background-color: #ffffff;
		display: flex;
		align-items: center;
		flex-direction: column;
		.pay-bring-content {
			width: 654rpx;
			height: auto;
			padding: 0 24rpx;
			.text {
				font-size: $font-size-24;
				color: #666;
				line-height: 44rpx;
				text-align: center;
				&.bg-color {
					color: $color-system;
					line-height: 88rpx;
				}
			}
			.text-v {
				font-size: $font-size-28;
				color: #999;
				line-height: 70rpx;
				text-align: left;
				&.title {
					font-size: $font-size-28;
					color: #666666;
				}
				&.bg-color {
					line-height: 44rpx;
					color: $color-system;
				}
				.clipboard {
					width: 84rpx;
					height: 36rpx;
					background: linear-gradient(34deg, rgba(255, 41, 41, 1) 0%, rgba(255, 109, 27, 1) 100%);
					text-align: center;
					font-size: $font-size-24;
					color: #ffffff;
					border-radius: 4rpx;
					line-height: 36rpx;
					display: inline-block;
					margin-left: 10rpx;
				}
			}
		}
	}
}
.payun-alert {
	width: 100%;
	height: 100%;
	background: rgba(0, 0, 0, 0.5);
	position: fixed;
	top: 0;
	left: 0;
	z-index: 8888;
	transition: all 0.4s;
	&.none {
		display: none;
	}
	&.show {
		display: block;
	}
	.content {
		width: 422rpx;
		height: 434rpx;
		position: absolute;
		background: $bg-color;
		left: 0;
		right: 0;
		bottom: 0;
		top: 0;
		margin: auto;
		padding: 20rpx 32rpx;
		border-radius: 12rpx;
		.title {
			width: 100%;
			height: 68rpx;
			line-height: 68rpx;
			font-size: $font-size-28;
			color: $text-color;
			text-align: center;
			position: relative;
			.icon-iconfontguanbi {
				width: 68rpx;
				height: 68rpx;
				text-align: center;
				line-height: 68rpx;
				position: absolute;
				right: 0;
				top: 0;
				font-size: $font-size-36;
				color: #999999;
			}
		}
		.text-content {
			width: 100%;
			height: auto;
			.text {
				padding: 20rpx 0 0 0;
				line-height: 44rpx;
				font-size: $font-size-26;
				color: #666666;
				text-align: justify;
			}
			.text-p {
				width: 100%;
				line-height: 44rpx;
				font-size: $font-size-26;
				color: $color-system;
				text-align: left;
				text-overflow: ellipsis;
				display: -webkit-box;
				word-break: break-all;
				-webkit-box-orient: vertical;
				-webkit-line-clamp: 1;
				overflow: hidden;
			}
			.text-b {
				line-height: 44rpx;
				font-size: $font-size-24;
				color: #999999;
				text-align: left;
			}
		}
		.text-button {
			width: 100%;
			height: 88rpx;
			line-height: 88rpx;
			background: $btn-confirm;
			font-size: $font-size-28;
			border-radius: 44rpx;
			color: #ffffff;
			text-align: center;
			margin-top: 20rpx;
		}
	}
}
</style>
