<template>
	<view class="scenic-order-detail">
		<zs-skeleton type="orderDetail" :loading="pageLoading"></zs-skeleton>
			<view class="status-box">
				<view class="text-box">
					<view class="status" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&!isNotTime">
						等待支付，剩余<u-count-down :time="closeTime" format="mm:ss" @finish="finish"></u-count-down>
					</view>
					<view class="status" v-else>
						{{info.goodsList[0].goodsState | filterType}}
					</view>
				</view>
			</view>
			
			<view class="content progress"  v-if="info.goodsList[0].goodsState == 'APPLY_REFUND' || info.goodsList[0].goodsState == 'REFUNDED'"  @click="refundDetail">
				<view class="progress-title">
					退款进度
				</view>
				
				<view class="progress-desc">
					查看退款详情
				</view>
			</view>
			
			
			<view class="content ticket-info">
				<view class="title">
					{{ticketInfo.productName}}
				</view>
				<view class="notice" @click="handleNotice">
					<view class="text">
						预定须知 
					</view>
					<image class="jiantou" src="@/static/right.png" mode=""></image>
				</view>

				<view class="item">
					<view class="value">
						出游日期
					</view>
					<view class="value">
						{{info.goodsList[0].goodsInfo.startTime}}
					</view>
				</view>
				<view class="item">
					<view class="value">
						预订数量
					</view>
					<view class="value">
						{{info.goodsList[0].goodsInfo.bookNumber}}
					</view>
				</view>
			</view>
			
			<view class="content">
				<view class="title">
					门票信息
				</view>
				<view class="item" v-if="info.goodsList[0].goodsState == 'USED'">
					<view class="label">
						使用时间
					</view>
					<view class="value">
						{{ticketInfo.indate}}
					</view>
				</view>
				<view class="item" v-if="ticketInfo.indate">
					<view class="label">
						有效时间
					</view>
					<view class="value">
						{{ticketInfo.indate}}
					</view>
				</view>
				<view class="item">
					<view class="label">
						入园方式
					</view>
					<view class="value">
						{{ticketInfo.admissionVoucher.admissionVoucherCode | filterVoucherType}}
					</view>
				</view>
				<view class="item" v-if="info.goodsList[0].goodsState == 'USED'||info.goodsList[0].goodsState == 'WAIT_USE'">
					<view class="label">
						出票时间
					</view>
					<view class="value">
						{{ $u.timeFormat(info.payment.payTime,'yyyy-mm-dd hh:MM:ss')}}
					</view>
				</view>
			</view>
			
			<view class="content">
				<view class="title">
					取票人信息
				</view>
				<view class="item" v-if="info.goodsList[0].goodsInfo.contact.contactName">
					<view class="label">
						姓名
					</view>
					<view class="value">
						{{info.goodsList[0].goodsInfo.contact.contactName}}
					</view>
				</view>
				<view class="item" v-if="info.goodsList[0].goodsInfo.contact.contactTel">
					<view class="label">
						手机号
					</view>
					<view class="value">
						{{info.goodsList[0].goodsInfo.contact.contactTel | filterStr('tel')}}
					</view>
				</view>
				<view class="item" v-if="info.goodsList[0].goodsInfo.contact.psptId">
					<view class="label">
						证件类型
					</view>
					<view class="value">
						{{info.goodsList[0].goodsInfo.contact.psptType |filterPsptType}}
					</view>
				</view>
				<view class="item" v-if="info.goodsList[0].goodsInfo.contact.psptId">
					<view class="label">
						证件号
					</view>
					<view class="value">
						{{info.goodsList[0].goodsInfo.contact.psptId | filterStr}}
					</view>
				</view>
			</view>
			
			<view class="content" v-if="info.goodsList[0].goodsInfo.touristList.length">
				<view class="title">
					出游人信息
				</view>
				<view class="border-top" v-for="(item,index) in info.goodsList[0].goodsInfo.touristList" :key="index">
						<view class="item">
							<view class="label">
								姓名
							</view>
							<view class="value">
								{{item.name}}
							</view>
						</view>
						<view class="item">
							<view class="label">
								手机号
							</view>
							<view class="value">
								{{item.tel| filterStr('tel')}}
							</view>
						</view>
						<view class="item" v-if="item.psptId">
							<view class="label">
								证件类型
							</view>
							<view class="value">
								{{item.psptType |filterPsptType }}
							</view>
						</view>
						<view class="item" v-if="item.psptId">
							<view class="label">
								证件号
							</view>
							<view class="value">
								{{item.psptId | filterStr}}
							</view>
						</view>
				</view>
			</view>
			
			
			<view class="content">
				<view class="title">
					订单信息
				</view>
				<view class="item">
					<view class="label">
						订单编号
					</view>
					<view class="value">
						{{info.orderNo}}
					</view>
				</view>
				<view class="item">
					<view class="label">
						付款方式
					</view>
					<view class="value">
						{{info.payment | filterPay}}
					</view>
				</view>

				<view class="item">
					<view class="label">
						下单时间
					</view>
					<view class="value">
						{{$u.timeFormat(info.createTime,'yyyy-mm-dd hh:MM:ss')}}
					</view>
				</view>
				
				<view class="item" v-if="info.goodsList[0].goodsState != 'WAIT_PAYMENT' && info.goodsList[0].goodsState != 'CLOSE'">
					<view class="label">
						支付时间
					</view>
					<view class="value" >
						{{payTime}}
					</view>
				</view>
			</view>
			
			<view class="content" >
				<view class="title">
					交易信息
				</view>
				
				<view class="item">
					<view class="label">
						金额
					</view>
					<view class="value black">
						￥{{info.totalAmount}}
					</view>
				</view>
				<view class="item" >
					<view class="label">
						优惠券
					</view>
					<view class="value red">
						-￥{{info.discountAmount}}
					</view>
				</view>
				
				<view class="item">
					<view class="label">
						合计
					</view>
					<view class="value">
						<text class="red fs28">￥{{info.payAmount}}</text>
					</view>
				</view>
			</view>
			
			
			
		<!-- 	<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
				<view class="content refund-box">
					<view class="title">
						退款原因
					</view>
					
					<view class="refund-msg">
						{{info.goodsList[0].refundLog.remark}}
					</view>
				</view>
				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
			</template> -->
			
			<view class="btn-box" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'">
				<button class="cancel-btn" @click="cancel" :loading="btnLoading">
					取消订单
				</button>
				<button class="btn" @click="pay" :loading="btnLoading">
					立即支付
				</button>
			</view>
			
			<view class="content apply-box" v-else-if="info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED'" @click="apply">
					<!-- <view class="content apply-box" @click="apply"> -->
				<view class="label">
					退款申请
				</view>
				<view class="value">
					如引发商品争议，可申请平台介入处理
				</view>
				<image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
			</view>
			
			
			<u-popup :show="show" round="16rpx" mode="bottom" @close="close">
				<view class="popup-title">
					{{info.shopInfo.shopName}}
				</view>
				<view class="box">
					<template v-if="ticketInfo.drawAddress">
						<view class="sub-title">
							取票地点
						</view>
						<view class="intro">
							{{ticketInfo.drawAddress}}
						</view>
					</template>
					<view class="sub-title">
						入园方式
					</view>
					<view class="intro">
						{{ticketInfo.admissionVoucher.admissionVoucherCode | filterVoucherType}}
					</view>
					<view class="sub-title">
						有效期
					</view>
					<view class="intro">
						{{ticketInfo.indate || '-'}}
					</view>
					<view class="sub-title">
						预定截止
					</view>
					<view class="intro">
						{{ticketInfo.advanceDay}}天 {{ticketInfo.advanceHour}}小时
					</view>
					<view class="sub-title">
						退改规则
					</view>
					<rich-text class="intro" :nodes="ticketInfo.mpLossInfo"></rich-text>
					<view class="sub-title">
						预定须知
					</view>
					<rich-text class="intro" :nodes="ticketInfo.bookNotice"></rich-text>
					<view class="sub-title">
						其他说明
					</view>
					<rich-text class="intro" :nodes="ticketInfo.info"></rich-text>
					
				</view>
			</u-popup>
			
		
	</view>
</template>

<script>
	import {qrCode} from '@/api/order.js'
	import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js';
	import {getTicketDetail,cancelOrder,tuiPiao} from '@/api/scenic.js'
	export default {
		data() {
			return {
				show:false,
				isVisual:false,//是否是虚拟商品
				codeData:'123',
				loading:false,
				btnLoading:false,
				oldBright:0,
				info:{
					goodsList:[{goodsState:'CLOSE'}]
				},
				isNotTime:false,
				ticketInfo:null
			}
		},
		watch: {
			// isNotTime(val) {
			// 	if(this.isNotTime){
			// 		this.payDetails(this.info.orderNo)
			// 	}
			// }
		},
		filters: {
			filterType: function(val) {
				if(val == 'APPLY_REFUND'){
					return '退款审核中'
				}else if(val == 'CLOSE'){
					return '关闭订单'
				}else if(val == 'REFUNDED'){
					return '已退款'
				}else if(val == 'REFUSAL_REFUND'){
					return '拒绝退款'
				}else if(val == 'APPLY_REFUNDING'){
					return '退款中'
				}
				else if(val == 'USED'){
					return '订单已完成'
				}else if(val == 'WAIT_PAYMENT'){
					return '待付款'
				}else if(val == 'WAIT_USE'){
					return '待使用'
				}
			},
			filterPay(val){
				if(val.paymentWay == 'wx.unifiedOrder'){
					return '微信支付'
				}else if(val.paymentWay == 'trade.create'){
					return '支付宝支付'
				}else if(val.paymentWay == 'uac.miniOrder'){
					return '云闪付支付'
				}else{
					return '-'
				}
			},
			filterPsptType(val){
				if(val == 1){
					return '身份证'
				}else if(val == 2){
					return '护照'
				}else if(val == 3){
					return '军官证'
				}else if(val == 4){
					return '港澳通行证'
				}else if(val == 7){
					return '台胞证'
				}else if(val == 8){
					return '回乡证'
				}else if(val == 9){
					return '户口簿'
				}else if(val == 10){
					return '出生证明'
				}else if(val == 11){
					return '台湾通行证'
				}
			},
			filterVoucherType: function(val) {
				if(val == 1){
					return '实体票入园'
				}else if(val == 201){
					return '换票入园短信'
				}else if(val == 202){
					return '换票入园二维码'
				}else if(val == 203){
					return '换票入园数字码'
				}else if(val == 204){
					return '换票入园换票证'
				}else if(val == 205){
					return '换票入园邮件'
				}else if(val == 206){
					return '换票入园身份证'
				}else if(val == 207){
					return '换票入园护照'
				}else if(val == 208){
					return '换票入园港澳通行证'
				}else if(val == 209){
					return '换票入园军官证'
				}else if(val == 210){
					return '换票入园台胞证'
				}else if(val == 301){
					return '直接验证入园二维码'
				}else if(val == 302){
					return '直接验证入园邮件'
				}else if(val == 303){
					return '直接验证入园身份证'
				}else if(val == 304){
					return '直接验证入园护照'
				}else if(val == 305){
					return '直接验证入园港澳通行证'
				}else if(val == 306){
					return '直接验证入园军官证'
				}else if(val == 307){
					return '直接验证入园台胞证'
				}
			},
			filterStr(val,type){
				let len = val.length
				if(type == 'tel'){
					return val.substring(0,3)+'****'+val.substring(len-4)
				}else{
					return val.substring(0,10)+'****'+val.substring(len-4)
				}
			}
		},
		computed: {
			closeTime() {
				return (this.info.createTime + 1000*60*30) - new Date().getTime()
			},
			payTime(){
					if(this.info.payment && this.info.payment.paymentTime){
						return uni.$u.timeFormat(this.info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss') 
					}else{
						return '-'
					}
			}
		},
		methods: {
			handleNotice(){
				this.show = true
			},
			close(){
				this.show = false
			},
			isRefund(){
				if(!this.info.goodsList[0].verifyModel){//没核销
				console.log(1111111);
					return true
				}else if(this.info.goodsList[0].verifyModel && (new Date().getTime() < (this.info.goodsList[0].verifyModel.checkTime + 1000*60*60*48))){// 已核销 并且没超过48小时
				console.log(22222222);
					return true
				}else{
									console.log(333333333);
					return false
				}
			},
			finish(){
				this.isNotTime = true
				this.payDetails(this.info.orderNo)
			},
			refundDetail(){
				uni.navigateTo({
					url:`/my/order/scenic/refundDetail?id=${this.info.orderNo}`
				})
			},
			handleCall(){
				uni.makePhoneCall({
					phoneNumber: '4000016553'//仅为示例
				});
			},
			apply(){
				let that = this
				uni.navigateTo({
					url:'./refund',
					success: function(res) {
					  // 通过eventChannel向被打开页面传送数据
					  res.eventChannel.emit('orderInfo', that.info)
					}
				})
			},
			// 获取订单详情
			payDetails(orderNo){
				payDetails(orderNo).then(res=>{
					this.pageLoading = false
					this.info = res.content
					this.getTicketDetail(res.content.goodsList[0].goodsInfo.productId)
				})
			},
			// 取消支付
			cancel(){
				uni.showLoading({
					title: '取消中'
				})
				let obj = {
					orderId:this.info.orderNo,
					remark:'退款',
				}
				cancelOrder(obj).then(res=>{
					if(res.state == 'Success'){
						uni.showToast({
							title: '取消成功',
							icon: 'success'
						})
						this.payDetails(this.info.orderNo)
					}
				})
			},
			// 支付
			pay(){
				let that = this
				if (this.btnLoading) return
				this.btnLoading = true
				uni.showLoading({
					title: '支付中'
				})
				let miniPayRequest = JSON.parse(this.info.payment.miniPayRequest)
				uni.requestPayment({
					"provider": "wxpay",
					"orderInfo": miniPayRequest,
					"appid": miniPayRequest.appId, // 微信开放平台 - 应用 - AppId，注意和微信小程序、公众号 AppId 可能不一致
					"paySign": miniPayRequest.paySign,
					"nonceStr": miniPayRequest.nonceStr, // 随机字符串
					"package": miniPayRequest.package, // 固定值
					// "prepayid":  miniPayRequest.package, // 统一下单订单号 
					"timeStamp": miniPayRequest.timeStamp, // 时间戳（单位：秒）
					"signType": miniPayRequest.signType, //签名算法
					success(msg) {
						console.log('msg', msg);
						queryPayOrder(that.info.orderNo).then(res1 => {
							if (res1.state == 'Success') {
								uni.hideLoading()
								uni.showToast({
									title: '支付成功',
									icon: 'success'
								})
								that.btnLoading = false
								that.payDetails(that.info.orderNo)
							}
						})
					},
					fail(e) {
						that.btnLoading = false
						uni.hideLoading()
						uni.showToast({
							title: '取消支付',
							icon: 'fail'
						})
						// 取消支付后，获取支付信息以备再次支付
						that.payDetails(that.info.orderNo)
						console.log('err', e,this);
					}
				})
			},
			// 取消退款申请
			cancelReply(){
				if (this.btnLoading) return
				this.btnLoading = true
				uni.showLoading({
					title: '取消中'
				})
				unRefund({id:this.info.goodsList[0].id}).then(res=>{
					this.btnLoading = false
					uni.hideLoading()
					
					if (res.state == 'Success') {
						this.payDetails(this.info.orderNo)
						uni.showToast({
							title:'取消成功',
							icon:'success'
						})
					}
				})
			},
			getTicketDetail(productId){
				getTicketDetail({productId}).then(res=>{
					if(res.state == 'Success'){
						this.ticketInfo = res.content.data
						this.ticketInfo.mpLossInfo = this.ticketInfo.mpLossInfo.replace(/\n/g, "<br>")
						this.ticketInfo.info = this.ticketInfo.info.replace(/\n/g, "<br>")
						this.ticketInfo.bookNotice = this.ticketInfo.bookNotice.replace(/\n/g, "<br>")
					}
				})
			},
		},
		onReady() {
			
		},
		onLoad(options) {
			this.info.orderNo = options.id
		},
		onShow() {
			this.pageLoading = true
			this.payDetails(this.info.orderNo)
		},
		created() {
			// this.info = JSON.parse(uni.getStorageSync('order'))
		}
	}
</script>

<style lang="scss">
.scenic-order-detail{
	background: #F9F9F9;
	min-height: 100vh;
	padding-bottom: 150rpx;
	.status-box{
		padding: 24rpx 24rpx 4rpx;
		display: flex;
		justify-content: space-between;
		.text-box{
			color: #181818;
			.status{
				font-weight: bold;
				font-size: 32rpx;
				display: flex;
				.u-count-down__text{
					color: $uni-color-primary!important;
				}
			}
			.notice{
				font-size: 24rpx;
				margin-top: 20rpx;
			}
		}
	}
	
	.ticket-info{
		.title{
			font-weight: 600;
			font-size: 36rpx;
			color: #222222;
			width: 100%;
			white-space: nowrap;
			overflow: hidden;
			text-overflow: ellipsis;
			margin-top: 10rpx;
		}
		.notice{
			display: flex;
			align-items: center;
			font-size: 24rpx;
			color: #AAAAAA;
			margin-top: 20rpx;
			.jiantou{
				width: 48rpx;
				height: 48rpx;
			}
		}
	}
	
	.progress{
		.progress-title{
			font-weight: 600;
			font-size: 32rpx;
			color: #181818;
		}
		
		.progress-desc{
			font-weight: 300;
			font-size: 24rpx;
			color: #AAAAAA;
			margin-top: 15rpx;
		}
	}
	
	
	.black{
		color: #222222!important;
	}
	
	.red{
		color: red!important;
	}
	.fs28{
		font-size: 28rpx!important;
		font-weight: bold;
	}
	
	.code-box{
		display: flex;
		align-items: center;
		justify-content: space-between;
		.left{
			.title{
				font-weight: 500;
				font-size: 28rpx;
				color: #222222;
			}
			.codeNum{
				font-weight: 300;
				font-size: 24rpx;
				color: #AAAAAA;
				margin-top: 15rpx;
			}
		}
		.code-btn{
			display: flex;
			align-items: center;
			font-weight: 300;
			font-size: 24rpx;
			color: #AAAAAA;
			.jiantou{
				width: 24rpx;
				height: 24rpx;
			}
		}
		
	}
	
	.input-box{
		margin: 20rpx 30rpx;
		padding: 28rpx 24rpx;
		background: #FFFFFF;
		border-radius: 16rpx 16rpx 16rpx 16rpx;
		display: flex;
		align-items: center;
		justify-content: space-between;
		.label {
			color: #222;
			font-size: 28rpx;
		}
		
		.value {
			font-size: 28rpx;	
			color: #AAAAAA;
		}
	}
	
	.content{
		margin: 20rpx 30rpx;
		padding: 28rpx 24rpx;
		border-radius: 16rpx;
		background: #fff;
		.title{
			font-weight: 600;
			font-size: 28rpx;
			color: #222222;
		}
		.item{
			display: flex;
			align-items: center;
			justify-content: space-between;
			margin-top: 28rpx;
			.label{
				font-size: 28rpx;
				color: #AAAAAA;
			}
			.value{
				font-size: 28rpx;
				color: #222222;
			}
		}
	}
	.pay-btn{
		background: $uni-color-primary;
		width: 688rpx;
		height: 80rpx;
		line-height: 80rpx;
		border-radius: 46rpx;
		color: #fff;
		margin-top: 50rpx;
	}
	.refund-box{
		.refund-msg{
			font-weight: 300;
			font-size: 24rpx;
			color: #222222;
			margin-top: 15rpx;
			line-height: 40rpx;
		}
	}
	.apply-box{
		position: relative;
		.label{
			font-weight: 600;
			font-size: 28rpx;
			color: #222222;
		}
		.value{
			color: #999999;
			font-size: 24rpx;
			margin-top: 15rpx;
		}
		
		.jiantou{
			position: absolute;
			top: 50%;
			right: 24rpx;
			transform: translateY(-50%);
			width: 24rpx;
			height: 24rpx;
		}
	}
	.btn-box {
		position: fixed;
		bottom: 0%;
		left: 0%;
		width: 100%;
		display: flex;
		align-items: center;
		justify-content: flex-end;
		box-sizing: border-box;
		padding: 10rpx 24rpx env(safe-area-inset-bottom);
		background: #fff;
		border-top: 1rpx solid #EEEEEE;
		.cancel-btn{
			width: 240rpx;
			height: 80rpx;
			line-height: 80rpx;
			text-align: center;
			border-radius: 40rpx;
			border: 2rpx solid #EE4320;
			font-weight: 600;
			font-size: 28rpx;
			color: #EE4320;
			margin: 0;
		}
		.btn {
			width: 240rpx;
			height: 80rpx;
			line-height: 80rpx;
			text-align: center;
			background: $uni-color-primary;
			border-radius: 40rpx;
			font-weight: 600;
			font-size: 28rpx;
			color: #FFFFFF;
			margin: 0;
			margin-left: 20rpx;
		}
	}
	.info{
		.order-info{
			display: flex;
			.icon{
				width: 164rpx;
				height: 164rpx;
				border-radius: 16rpx;
				flex-shrink: 0;
			}
			.shop-info{
				display: flex;
				flex-direction: column;
				justify-content: space-between;
				padding-left: 24rpx;
				flex: 1;
				box-sizing: border-box;
				.title{
					color: #181818;
					font-size: 28rpx;
					width: 450rpx;
					white-space: nowrap;
					overflow: hidden;
					text-overflow: ellipsis;
				}
				.price-box{
					display: flex;
					align-items: center;
					justify-content: space-between;
					.price{
						color: #181818;
						font-size: 32rpx;
						font-weight: bold;
					}
					
				}
				.start-time,.goods-desc{
					font-size: 24rpx;
					color: #AAAAAA;
					width: 450rpx;
					white-space: nowrap;
					overflow: hidden;
					text-overflow: ellipsis;
				}
			}
		}
		
		
	}
	
	.wrap{
		display: flex;
		justify-content: center;
		align-items: center;
		height: 100vh;
		overflow: hidden;
	}
	.border-top+.border-top{
		border-top: 1rpx solid #F0F0F0;
		margin-top: 28rpx;
	}
	.u-popup__content{
		padding: 0 24rpx 28rpx;
		position: relative;
		.popup-title{
			font-weight: 600;
			font-size: 32rpx;
			color: #222222;
			padding: 28rpx 0;
			border-bottom: 1rpx solid #F0F0F0;
		}
		.box{
			max-height: 70vh;
			overflow: auto;
			.sub-title{
				font-weight: 600;
				font-size: 28rpx;
				color: #222222;
				margin: 20rpx 0;
			}
			.intro{
				font-weight: 300;
				font-size: 24rpx;
				color: #AAAAAA;
				line-height: 40rpx;
				padding-bottom: 24rpx;
			}
			.border-bottom{
				border-bottom: 1rpx solid #F0F0F0!important;
			}
		}
	}
	
}
</style>