<template>
	<view>
		<u-popup :show="payShow" mode="bottom" round="17" @close="close" :closeable="true" overlayOpacity="0.5"
			@touchmove.prevent.stop>
			<view class="choiceShow-wrap">
				<!-- 盲票信息 -->
				<view class="flex goods">
					<view class="flex image-wrap">
						<image :src="payInfo.picUrl" mode="aspectFit"></image>
					</view>
					<view class="info">
						<view class="info-title">{{ payInfo.title }}</view>
						<view class="info-stock">￥{{ $numberFormat( payInfo.orderAmt ) }}</view>
					</view>
				</view>
				<!-- 推广员信息 -->
				<view class="flex coupon" @click="toPromoters" v-if="promoterNum > 0">
					<view class="flex coupon-left">
						<image src="../../static/public/promoter.png" mode="scaleToFill"></image>
						<view class="txt">盲票天使</view>
					</view>
					<view class="coupon-right flex">
						<view class="txt coupon-right-color" v-if="promoters && promoters.name">
							{{`${ promoters.name } ( ${promoters.workNo} ) `}}
						</view>
						<view class="txt" v-else>选择盲票天使，运气更好哦</view>
						<image src="../../static/public/public_right_arrow.png" mode="scaleToFill"></image>
					</view>
				</view>
				<!-- 优惠券信息 -->
				<view class="flex coupon" @click="toCoupon">
					<view class="flex coupon-left">
						<image src="../../static/public/public_coupon.png" mode="scaleToFill"></image>
						<view class="txt">优惠券</view>
					</view>
					<view class="coupon-right flex">
						<view class="txt coupon-right-color" v-if="$numberFormat(payInfo.discountAmt) != 0">
							-￥{{ $numberFormat(payInfo.discountAmt)}}</view>
						<view class="txt" v-else-if="total != 0">{{ total }}张可用</view>
						<view class="txt" v-else>暂无可用优惠券</view>
						<image src="../../static/public/public_right_arrow.png" mode="scaleToFill"></image>
					</view>
				</view>
				<view class="flex agreement">
					<view class="checked">
						<u-checkbox-group>
							<u-checkbox :value="checked" :checked="checked" shape="circle" activeColor="#8E51F7"
								@change="changeChecked"></u-checkbox>
						</u-checkbox-group>
					</view>
					<view class="txt" @click="toRule">同意《商品购买协议》</text></view>
				</view>
				<view class="flex btn">
					<view class="flex btn-left">
						<view class="title">应付：</view>
						<view class="flex price">￥{{ $numberFormat(payInfo.payAmt) }}</view>
					</view>
					<view class="btn-right">
						<view class="confirm" @click="pay">立即支付</view>
					</view>
				</view>
			</view>
		</u-popup>
		<auth :auth-show="authShow" @close="authShow = false" />
	</view>
</template>

<script>
	import $http from '@/utils/request.js'
	import appId from '@/config/appId.js'
	import Auth from '../../components/auth/auth.vue'
	export default {
		name: "pay-popup",
		components: {
			Auth,
		},
		props: {
			payShow: {
				type: [Boolean],
				default: false
			},
			payInfo: {
				type: [Object],
				default: {}
			},
		},
		data() {
			return {
				checked: true,
				authShow: false,
				total: 0,
				promoters: {
					channelId: "", //id
					name: "", //名字
					workNo: "" //工号
				},
				promoterNum: 0, //推广员
				siteId: "", // 门店id
			};
		},
		created() {
			if (this.payInfo.promoter) {
				this.promoters = this.payInfo.promoter
			}
			this.getTotal()
			if (this.payInfo.channelId) {
				this.getPromoterNum()
			}
		},
		mounted() {
			let that = this
			uni.$on('promoters', function(data) {
				that.promoters = data
				that.payInfo.promoter = data
			})
		},
		methods: {
			getTotal() {
				$http.post(`/api/v1/mp/user/ticket/order/coupon/listPage`, {}).then(
					res => {
						if (res.code == 0) {
							this.total = res.total
						}
					}).catch(() => {})
			},
			getPromoterNum() {
				$http.post(`/api/v1/mp/channel/promoter/list?pageNum=1&pageSize=20`, {
					channelId: this.payInfo.channelId,
				}).then(res => {
					if (res.code == 0) {
						this.promoterNum = res.total
					}
				}).catch(() => {})
			},
			changeChecked(e) {
				this.checked = e
			},

			toPromoters() {
				let index = ''
				if (this.payInfo.promoter) {
					index = this.payInfo.promoter.channelId
				} else {
					index = 0
				}
				uni.navigateTo({
					url: `/packageGoods/promoters/index?channelId=${ this.payInfo.channelId }&index=${ index }`
				})
			},

			toCoupon() {
				if(this.payInfo && this.payInfo.siteId){
					uni.navigateTo({
						url: `/packageGoods/coupon/index?channelId=${ this.payInfo.channelId }&couponId=${ this.payInfo.couponId }&boxId=${ this.payInfo.boxId }&ticketId=${ this.payInfo.ticketId }&siteId=${ this.payInfo.siteId }`
					})
				}else{
					uni.navigateTo({
						url: `/packageGoods/coupon/index?channelId=${ this.payInfo.channelId }&couponId=${ this.payInfo.couponId }&boxId=${ this.payInfo.boxId }&ticketId=${ this.payInfo.ticketId }`
					})
				}
			},

			toRule() {
				uni.navigateTo({
					url: '/packageOther/rule/purchase'
				})
			},

			close() {
				this.$emit('close')
			},

			success(id) {
				this.$emit('success', id)
			},
			pay() {
				let _this = this
				let payIng = false
				if (!this.checked) {
					uni.$u.toast('请同意《盲票产品规则》');
					return
				}
				uni.showLoading({
					title: '支付中'
				});
				if (payIng) return
				let suid = uni.getStorageSync('shareUid')
				$http.post('/api/v1/mp/user/ticket/order/submit', {
					promoterId: this.promoters && this.promoters.channelId ? this.promoters.channelId : null,
					suid: suid !== 'undefined' && suid !== undefined ? suid : null,
					type: uni.getStorageSync('shareType')
				}).then(res => {
					uni.hideLoading();
					payIng = true
					if (res.code == 0) {
						if (res.data.needPay == 1) {
							// #ifdef MP-ALIPAY
							let data = {
								orderId: res.data.orderId,
								payType: 1,
								appSource: appId
							}
							// #endif
							// #ifdef MP-WEIXIN
							let data = {
								orderId: res.data.orderId,
								payType: 2,
								appSource: appId
							}
							// #endif
							// #ifdef H5
							let data = {
								orderId: res.data.orderId,
								payType: 3,
								appSource: appId
							}
							// #endif
							$http.post('/api/v1/mp/user/ticket/order/pay', data).then(ele => {
								if (ele.code == 0) {
									// #ifdef MP-ALIPAY
									my.tradePay({
										tradeNO: ele.data.pay_info,
										success: (resu) => {
											if (resu.resultCode == '9000') {
												uni.showToast({
													title: '支付成功',
													icon: 'success',
													duration: 2000
												})
												_this.success(res.data.orderId) //跳转抽奖详情页
											} else {
												payIng = false
												_this.close()
											}
										},
										fail: (resu) => {
											payIng = false
											_this.close()
										}
									})
									// #endif
									// #ifdef MP-WEIXIN
									uni.requestPayment({
										timeStamp: ele.data.timeStamp,
										nonceStr: ele.data.nonceStr,
										package: ele.data.package,
										signType: ele.data.signType,
										paySign: ele.data.paySign,
										success() {
											uni.showToast({
												title: '支付成功',
												icon: 'success',
												duration: 2000
											})
											_this.success(res.data.orderId)
										},
										fail() {
											payIng = false
											_this.close()
										}
									})
									// #endif
									// #ifdef H5
									let data = ele.data
									_this.close()
									sessionStorage.setItem('viewUrlData', JSON.stringify(data))
									uni.navigateTo({
										url: `/pages/index/payExternal?orderId=${ res.data.orderId }`
									})
									// uni.navigateTo({
									// 	url: `/pages/index/payExternal?viewUrl=${ encodeURIComponent(JSON.stringify(data)) }&orderId=${ res.data.orderId }`
									// })
									// #endif

								} else if (ele.code == 1005) {
									_this.authShow = true
								} else if (ele.code == 1026) {
									_this.authShow = true
								} else {
									payIng = false
									_this.close()
									uni.$u.toast('支付失败');
								}
							}).catch(() => {
								payIng = false
								_this.close()
								uni.$u.toast('支付异常');
							})
						} else {
							uni.showToast({
								title: '支付成功',
								icon: 'success',
								duration: 2000
							})
							_this.success(res.data.orderId)
						}
					} else if (res.code == 1020) {
						payIng = false
						_this.close()
						uni.$u.toast(res.msg);
					} else {
						payIng = false
						_this.close()
						uni.$u.toast(res.msg);
					}
				}).catch(() => {
					uni.hideLoading();
					payIng = false
					uni.$u.toast('订单创建失败');
				})
			},

		},
	}
</script>

<style lang="scss" scoped>
	.coupon-right-color {
		font-size: 32rpx;
		line-height: 44rpx;
		color: $uni-bg-color;
	}
</style>
<style lang="scss" scoped>
	.choiceShow-wrap {
		min-height: 400rpx;
		padding: 34rpx;

		// 盲票信息
		.goods {
			justify-content: flex-start;
			margin-bottom: 60rpx;

			.image-wrap {
				width: 220rpx;
				height: 220rpx;
				border-radius: 10rpx;
				overflow: hidden;

				image {
					width: 100%;
					height: 100%;
				}
			}

			.info {
				flex: 1;
				display: flex;
				height: 220rpx;
				flex-direction: column;
				justify-content: space-around;
				padding-left: 34rpx;

				&-title {
					font-size: 36rpx;
					line-height: 36rpx;
					font-weight: bold;
				}

				&-stock {
					font-size: 26rpx;
					color: $uni-text-color;
				}
			}
		}

		// 优惠券
		.coupon {
			justify-content: space-between;
			height: 40rpx;
			margin-bottom: 46rpx;

			&-left {
				image {
					width: 48rpx;
					height: 40rpx;
					margin-right: 18rpx;
				}

				.txt {
					font-size: 30rpx;
					font-weight: bold;
				}
			}

			&-right {
				height: 40rpx;

				image {
					width: 12rpx;
					height: 22rpx;
					margin-left: 14rpx;
				}

				.txt {
					line-height: 26rpx;
					font-size: 26rpx;
					color: #666666;
				}
			}
		}

		// 同意协议
		.agreement {
			justify-content: flex-start;
			margin-bottom: 56rpx;

			.txt {
				font-size: 26rpx;
				color: #666666;
			}
		}

		// 支付按钮
		.btn {
			justify-content: space-between;

			&-left {
				.title {
					font-size: 13px;
					font-weight: 500;
				}

				.price {
					font-size: 30rpx;
					font-weight: bold;
					color: $uni-text-color;
				}
			}

			&-right {
				.confirm {
					width: 414rpx;
					height: 88rpx;
					line-height: 88rpx;
					background: $uni-btn-color;
					border-radius: 6rpx;
					font-size: 36rpx;
					color: #fff;
					text-align: center;
				}

			}
		}
	}
</style>
