<template>
	<view>
		<view class="orderWrapper">
		    <!-- 头部区域：订单号、头像 -->
		    <view class="orderHead">
		        <view class="orderHeadTitle">
		            <view>
		                <text>订单号</text>
		                <text class="orderDetail">{{info.orderId}}</text>
		            </view>
		            <view>
		                <text>对方</text>
		                <text class="orderDetail">{{info.studentName}}学员</text>
		            </view>
		        </view>
		    </view>
		    <!-- 中部区域：订单详情 -->
		    <view class="orderMid">
		        <view>
		            <text>对方ID</text>
		            <text class="orderDetail">{{info.studentId}}</text>
		        </view>
		        <view>
		            <text>需求号</text>
		            <text class="courseNum" @click="toNeedDetail">{{info.requireId}}</text>
		        </view>
		        <view>
		            <text>课程号</text>
		            <text class="courseNum" @click="toCourseDetail">{{info.courseId}}</text>
		        </view>
		        <view>
		            <text>需求金额</text>
		            <text class="orderDetail">{{info.requireSalary/100}}</text>
		        </view>
		    </view>
		    <view class="orderBottom">
		        <view>
		            <text>订单内容</text>
		            <text class="orderDetail">{{info.requireDetail}}</text>
		        </view>
		        <view>
		            <text>下单日期</text>
		            <text class="orderDetail">{{info.datetime}}</text>
		        </view>
		        <view>
		            <text>订单状态</text>
		            <text class="orderPayStatus">{{info.status}}</text>
		        </view>
		    </view>
			
			<view v-if="countDown">
				<uni-countdown :font-size="30" :showDay="false" :hour="0" :minute="minute" :second="second" color="#FFFFFF" background-color="red" />
			</view>
		    
		    <view class="payWrapper">
		        <view class="paidSucceed" v-if="!pay">
					<button :disabled="disabled" type="primary" style="border-radius: 20%;" @click="paymentButton">{{payment}}</button>
		        </view>
				<view class="pay" v-if="observed">
					<view class="paidSucceed">
					    <button class="payButton" @click="getPhone" type="primary">查看手机号</button>
					    <button class="payButton" :disabled="buttonDisabled" @click="applyForRefund" type="warn">{{refundButton}}</button>
					</view>
				</view>
		    </view>
			<view v-if="showPhone">
				<text>{{phone}}</text>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				time: 0,
				observed: false,
				buttonDisabled: false,
				timer: '',
				refundButton: '申请退款',
				phone: '',
				showPhone: false,
				countDown: true,
				payment: '教员支付',
				disabled: false,
				minute: 0,
				second: 0,
				info: {},
				pay: false, //是否支付
			};
		},
		onLoad(option) {
			if (option.orderId !== undefined) {
				this.getOne(option.orderId)
				this.getCountDown(option.orderId)
			}
		},
		methods: {
			toNeedDetail() {
				uni.navigateTo({
					url: '/subpkg/student/require/student_require_all_detail?requireId=' + encodeURIComponent(this.info.requireId)
				})
			},
			toCourseDetail() {
				uni.navigateTo({
					url: '/subpkg/teacher/course/teacher_course_all_detail?courseId=' + encodeURIComponent(this.info.courseId)
				})
			},
			// 发送申请退款消息
			async applyForRefund() {
				this.buttonDisabled = true
				const queryObj = {
					studentId: this.info.studentId,
					orderId: this.info.orderId
				}
				const {data: result} = await uni.$http.get('/education/mp-inner-msg/notify/refund', queryObj)
				uni.$showMsg(result.message)
			},
			// 获取手机号
			async getPhone() {
				const {data: result} = await uni.$http.get('/ucenter/mini-program-openid-uid/getPhoneByUid', {uid: this.info.studentId})
				this.phone = result.data.phone
				this.showPhone = true
			},
			// 获取订单详情信息
			async getOne(id) {
				const {data: result} = await uni.$http.get('/payment/order-info/getOrderInfoByOrderId', {orderId: id})
				this.info = result.data.one
				// 判断支付状态
				if (this.info.status !== '未支付') {
					this.countDown = false
					this.pay = true
				} 
				if (this.info.status === '未支付' && this.time == -2){
					this.disabled = true
					this.info.status = '已超时'
				}
				if (this.info.status === '支付成功') {
					this.observed = true
				}
				if (this.info.isRefund === 1) {
					this.buttonDisabled = true
				}
			},
			// 倒计时
			async getCountDown(id) {
				const queryObj = {
					orderId: id
				}
				const { data: result } = await uni.$http.get('/payment/order-info/getCountDown',queryObj)
				this.time = result.data.time
				if (this.time != -2) {
					this.minute = this.time / 60
					this.second = this.time % 60
				}
			},
			// 支付
			async paymentButton() {
				const queryObj = {
					inviteId: this.info.inviteId
				}
				const {data: result} = await uni.$http.get('/payment/wx-pay/jsapi', queryObj)
				
				// 微信官方调起支付
				wx.requestPayment({
					timeStamp: result.data.timeStamp,
					nonceStr: result.data.nonceStr,
					package: 'prepay_id=' + result.data.prepay_id,
					signType: 'RSA',
					paySign: result.data.paySign,
					success: res => {
						this.timer = setInterval(() => {
							this.queryOrderStatus()
						}, 1000)
					},
					fail: res => {
					  wx.showToast({
						title: '支付失败',
						icon: 'none',
						duration: 2000
					  })
					}
				})
			},
			queryOrderStatus() {
				// 验证本地订单状态，并推送消息
				uni.request({
				    url: `${uni.$http.baseUrl}/payment/order-info/queryOrderStatus?orderId=` + this.info.orderId, 
				    success: (res) => {
				        if (res.data.message === '支付成功') {
							clearInterval(this.timer)
							wx.showToast({
								title: '支付成功',
								icon: 'none',
								duration: 2000
							})
							
							this.info.status = '支付成功'
							this.countDown = false
							this.pay = true
						}
				    }
				});
			}
		}
	}
</script>

<style lang="scss" scoped>
/* 设置全局边距 */
.orderWrapper{
    padding-left: 20rpx;
    /* background-color: yellowgreen; */
}

/* 头部区域 */
.orderHead{
    display: flex;
    position: relative;
    height: 200rpx;
    padding-top: 20rpx;
}

/* 头像 */
.headImg{
    width: 160rpx;
    height: 160rpx;
    border-radius: 30rpx;
    position: absolute;
    right: 30rpx;
}

.orderHeadTitle{
    display: flex;
    flex-direction: column;
    height: 80px;
    justify-content: space-around;
}

/* 设置内容样式 */
.orderDetail,
.courseNum,
.orderPayStatus{
    margin-left: 20rpx;
    font-weight: bold;
}

.courseNum{
    color: #00B0F0;
    text-decoration: underline;
}

/* 支付状态字体样式 */
.orderPayStatus{
    color: red;
}

/* 中部区域 */
.orderMid{
    height: 220rpx;
    display: flex;
    flex-direction: column;
    justify-content: space-around;
}

/* 底部区域 */
.orderBottom{
    margin-top: 40rpx;
    height: 260rpx;
    display: flex;
    flex-direction: column;
    justify-content: space-around;
}

/* 支付倒计时 */
.orderPay{
    margin-top: 40rpx;
    display: flex;
    align-items: baseline;
}
/* 倒计时时间格式 */
.orderPayTime{
    padding-left: 20rpx;
    font-weight: bold;
    font-size: 40rpx;
    color: red;    
}

/* 提醒信息 */
.warning{
    display: flex;
    justify-content: center;    
    margin-top: 60rpx;
}
/* 提醒信息详情 */
.warningDetail{
    width: 80%;
    display: flex;
    flex-direction: column;
    font-size: 44rpx;
    font-weight: bold;
    color: red;
}

/* 支付及查看信息按钮居中排列 */
.payWrapper{
    display: flex;
    justify-content: center;
}

.paidSucceed{
    display: flex;
    width: 100%;
    justify-content: space-around;
}

.payButton{
	border-radius: 30rpx;
}

.pay{
    /* display: flex; */
    width: 100%;
}
</style>
