<template>
	<view class="content">
		<view class="container">
			<!-- #ifdef MP-WEIXIN -->
			<!-- #ifdef MP-WEIXIN -->
			<headers :titles="titles">
				<uni-icons type="left" color="#000000" size="22px"></uni-icons>
			</headers>
			<!-- #endif -->
			<!-- #endif -->
			<u-loadmore :status="status" v-if="show == true" />
		</view>
		<view class="bm-page">
			<view class="bm-page-top">
				<image class="top-left-img" :src="baseUrl +'/'+ rightInfoList.photo" mode=""></image>
				<view class="bm-page-right">
					<view class="bm-page-right-1">{{ rightInfoList.name }}</view>
					<view class="bm-page-right-2">
						<view class="bm-page-right-zd">{{ rightInfoList.tittle }}</view>
						<view class="bm-page-right-c2">{{ rightInfoList.type }}</view>
					</view>
					<view class="bm-page-right-3">
						<text class="bm-page-right-price">￥{{ rightInfoList.price }}</text>
						<!-- <text class="bm-page-right-jprice">￥{{ rightInfoList.price }}</text> -->
					</view>
				</view>
			</view>
			<view class="bm-page-info" v-if="hideTeacher==0">
				<view style="width: 100%; display: flex;align-items: center;justify-content: space-between; ">
					<view class="bm-page-info-title">
						选择教练
					</view>
					<view class="d-s" v-if="localCoachId"
						:style="{color: localCoachId ? '#999' : '', pointerEvents: localCoachId ? 'none' : ''}">
						<view class="" v-if="!jlName">请选择</view>
						<view class="" v-else>{{ jlName }}</view>
						<u-icon name="arrow-right" size="16" :color="jlId ? '#999' : ''"></u-icon>
					</view>
					<view class="d-s" @click="showjl = true" v-else
						:style="{color: localCoachId ? '#999' : '', pointerEvents: localCoachId ? 'none' : ''}">
						<view class="" v-if="!jlName">请选择</view>
						<view class="" v-else>{{ jlName }}</view>
						<u-icon name="arrow-right" size="16" :color="jlId ? '#999' : ''"></u-icon>
					</view>
				</view>

			</view>
			<view class="bm-page-info" :class="{ disabled: isDisabled }">
				<view style="width: 100%; display: flex;align-items: center;justify-content: space-between; ">
					<view class="bm-page-info-title">
						填写身份信息
					</view>
					<view class="anniu" :class="{ disabled: isDisabled }" @click="!isDisabled && (popupShow = true)">
						点击上传身份证
					</view>

				</view>

				<view class="info-name">
					<view class="info-name-left">姓名</view>
					<view class="info-name-right">
						<input class="info-name-input" :disabled="isDisabled" v-model="name" type="text"
							placeholder="请填写真实姓名">
					</view>
				</view>
				<view class="info-name">
					<view class="info-name-left">性别</view>
					<view class="d-s" style="width: 70%;">
						<view class="size-lv" :class="{'clv': sex == index, 'disabled': isDisabled }"
							v-for="(item, index) in sexlist" :key="index" @click="!isDisabled && getsexindex(index)">
							{{ item }}
						</view>
					</view>

				</view>
				<view class="info-name">
					<view class="info-name-left">年龄</view>
					<view class="info-name-right">
						<input class="info-name-input" :disabled="isDisabled" v-model="age" type="number"
							placeholder="请填写真实年龄">
					</view>
				</view>
				<view class="info-name">
					<view class="info-name-left">手机号</view>
					<view class="info-name-right">
						<input class="info-name-input" :disabled="isDisabled" v-model="phone" type="text"
							placeholder="请输入正确手机号">
					</view>
				</view>
				<view class="info-name">
					<view class="info-name-left">身份证号</view>
					<view class="info-name-right">
						<input class="info-name-input" :disabled="isDisabled" v-model="identity" type="text"
							placeholder="请输入身份证号">
					</view>
				</view>
				<!-- <view style="padding: 0;" class="info-name">
          <view class="info-name-left">选择教练</view>
          <view class="info-name-right">
            <view class="bm-page-button">
              <button @click="goBookingJl()" class="bm-page-button-main">预约教师</button>
            </view>
          </view>

        </view> -->
			</view>
			<view class="bm-page-dj">
				<view class="payment-type-container">
					<view class="payment-type-item" @click="changePayType(2)" :class="{active: selectedPayType === 2}">
						<view class="payment-type-info">
							<view class="payment-type-name">全款支付：￥{{ rightInfoList.price }}</view>
							<!-- <view class="payment-type-price">￥{{ rightInfoList.price }}</view> -->
						</view>
						<view class="payment-type-radio">
							<view v-if="selectedPayType === 2" class="radio-selected"></view>
							<view v-else class="radio-unselected"></view>
						</view>
					</view>

					<view class="payment-type-item" @click="changePayType(1)" :class="{active: selectedPayType === 1}">
						<view class="payment-type-info">
							<view class="payment-type-name">定金支付：￥{{ rightInfoList.reserveMoney }}</view>
							<!-- <view class="payment-type-price">￥{{ rightInfoList.reserveMoney }}</view> -->
						</view>
						<view class="payment-type-radio">
							<view v-if="selectedPayType === 1" class="radio-selected"></view>
							<view v-else class="radio-unselected"></view>
						</view>
					</view>
				</view>

				<!-- 支付渠道选择（微信/线下） -->
				<view class="payment-channel-container">
					<view class="payment-channel-title">支付方式</view>
					<view class="payment-channel-item" @click="changeStartPay(1)" :class="{active: startPay === 1}">
						<image class="channel-icon" src="../../static/imgs/qbdd3.png" mode=""></image>
						<view class="channel-name">微信支付</view>
						<view class="channel-radio">
							<view v-if="startPay === 1" class="radio-selected"></view>
							<view v-else class="radio-unselected"></view>
						</view>
					</view>
					<view class="payment-channel-item" @click="changeStartPay(2)" :class="{active: startPay === 2}"
						v-if="selectedPayType !== 1">
						<image class="channel-icon" src="../../static/imgs/yfk2.png" mode=""></image>
						<view class="channel-name">线下支付</view>
						<view class="channel-radio">
							<view v-if="startPay === 2" class="radio-selected"></view>
							<view v-else class="radio-unselected"></view>
						</view>
					</view>
				</view>
				<!-- <view @click="changeStartPay(2)" class="dj-list">
					<view class="dj-list-left">
						<image class="dj-list-left-img" src="../../static/imgs/yfk2.png" mode=""></image>
						<view class="dj-list-left-name">线下支付</view>
					</view>
					<view class="dj-list-right">
						<view v-if="startPay === 1" class="onel"></view>
						<view v-else class="twol">
							<u-icon name="checkmark" color="#FFF" size="16"></u-icon>
						</view>
					</view>
				</view>
				<view @click="changeStartPay(1)" class="dj-list">
					<view class="dj-list-left">
						<image class="dj-list-left-img" src="../../static/imgs/qbdd2.png" mode=""></image>
						<view class="dj-list-left-name">微信</view>
					</view>
					<view class="dj-list-right">
						<view v-if="startPay === 2" class="onel"></view>
						<view v-else class="twol">
							<u-icon name="checkmark" color="#FFF" size="16"></u-icon>
						</view>
					</view>
				</view> -->
			</view>


			<view class="bm-page-button">
				<button @click="applicationClick" class="bm-page-button-main">点击报名</button>
			</view>
			<u-picker :show="show" :columns="columns" keyName="label" @confirm="confirm" @cancel="cancel"></u-picker>
			<u-picker :show="showjl" :columns="columnjl" keyName="label" @confirm="jlconfirm"
				@cancel="jlcancel"></u-picker>
			<u-popup :show="popupShow" :round="10" mode="center" @close="close" @open="open">
				<view class="popup-box">
					<view class="title_s">请上传身份证人像面</view>
					<u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple
						:maxCount="1" width="280" height="150">
						<image src="https://cdn.uviewui.com/uview/demo/upload/positive.png" mode="widthFix"
							style="width: 280px;height: 150px;"></image>
					</u-upload>
				</view>
			</u-popup>
		</view>
	</view>
</template>

<script>
	import headers from '../../components/header/headers.vue'
	import request from '@/utils/request.js'
	import tabbar from '../../components/tabbar/tabbar.vue'
	import upload from '@/utils/upload.js'
	import {
		getCoachId,
		getLocalUserInfo,
		getStaffType,
		getToken
	} from '../../utils/auth'
	import {
		sendSubscriptionMessage
	} from '@/pagesA/register/pushService.js';

	export default {
		data() {
			return {
				titles: "报名",
				id: null,
				List: [],
				show: false,
				showjl: false,
				popupShow: false,
				sfzimg: null,
				fileList1: [],
				baseUrl: this.$imagesUrl,
				status: 'loading',
				sexlist: [
					"男",
					"女"
				],
				name: null,
				phone: null,
				sex: 0,

				identity: null,
				age: null,
				startPay: 2,
				courseId: null,
				rightInfoList: [],
				columnjl: [],
				jxId: null,
				orderId: null,
				orderNo: null,
				dname: "全款", // 默认显示全款
				currentPrice: 0,
				selectedPayType: 2, // 默认选中全款(2)
				settings: { //签名设置
					width: '750', //签名区域的宽
					height: '500', //签名区域的高
					lineWidth: 4, //签名时线宽
					textColor: '#000' //签名文字颜色
				},
				jlName: null,
				jlId: null,
				hideTeacher: 0,
				Address: '',
				djshow: false,
				userId: null,
				tenantId: null,
				isDisabled: false,
				userinfo: [],
				payPrice: null,
				payStatus: null,
				oldOrderDetails: [],
				loading: false,
				localStaffType: null,
				localCoachId: null,
				userDetails: [],
				orderTime: null,
				columns: [
					[{
						label: '全款',
						// 其他属性值
						id: 2
						// ...
					}, {
						label: '定金',
						id: 1
					}]
				],
			}
		},
		onLoad(option) {
			console.log('option', option)
			if (uni.getStorageSync('jlId')) {
				this.hideTeacher = 1
			}
			this.jlId = uni.getStorageSync('jlId');
			this.userDetails = getLocalUserInfo();
			if (this.userDetails) {
				this.getStudentDetail()
			} else {
				uni.showToast({
					title: '请完善个人信息',
					icon: 'none'
				})
			}
			this.courseId = option.courseId,
				this.tenantId = option.tenantId,
				this.userId = this.userDetails.id,
				this.userinfo = getLocalUserInfo()
			this.localStaffType = getStaffType()
			console.log('this.localStaffType', this.localStaffType)
			if (this.localStaffType === '02') {
				this.localCoachId = getCoachId()
			}
		},
		onShow() {
			this.getListAll()
			// this.actList = ["1", "1", "1", "1", "1", ]
			// this.status = "nomore" 底部刷新结束
			this.getRightInfoList()
		},
		onPullDownRefresh() {
			console.log("刷新");
			uni.stopPullDownRefresh()
		},
		onReachBottom() {
			// this.show = true
			setTimeout(() => {
				console.log("加载执行");
			}, 2000)
		},
		// 发送好友
		onShareAppMessage(res) {
			return {
				title: this.titles,
				path: '/pages/index/index',
			}
		},
		// 分享朋友圈
		onShareTimeline(res) {
			return {
				title: this.titles,
				path: '/pages/index/index',
			}
		},
		components: {
			headers,
			tabbar
		},

		methods: {
			sendSubscriptionMessage,
			// 定金价格 or 全款价格
			updateDisplayPrice() {
				this.currentPrice = this.selectedPayType === 1 ?
					this.rightInfoList.reserveMoney :
					this.rightInfoList.price;
			},
			// 修改支付类型（全款/定金）
			changePayType(type) {
				this.selectedPayType = type;
				this.dname = type === 1 ? '定金' : '全款';
				this.currentPrice = type === 1 ? this.rightInfoList.reserveMoney : this.rightInfoList.price;
				if (type == 1) {
					this.startPay = 1
				} else if (type == 2) {
					this.startPay = 2
				}
				console.log('this.selectedPayType', this.selectedPayType)
				console.log('this.startPay', this.startPay)
			},
			// 修改支付渠道选择按钮（微信/线下）
			changeStartPay(channel) {
				/* if (this.selectedPayType == 1) {
					this.startPay = 1
				} else if (this.selectedPayType == 2 && this.startPay == 1) {
					console.log('123', this.selectedPayType == 2 && this.startPay == 1)
					this.startPay = 2
				} else {
					this.startPay = channel;
				} */
				this.startPay = channel;

			},
			async getStudentDetail() {
				const res = await request({
					url: '/app-api/small/dl-drive-school-student/getByUserId',
					method: "GET",
					params: {
						userId: this.userDetails.id
					},
				})
				if (res.data) {
					this.name = res.data.name
					this.sex = res.data.sex
					this.identity = res.data.idCard
					this.phone = res.data.phone
					this.age = res.data.age
					this.isDisabled = true
				} else {
					uni.showToast({
						title: '请完善个人信息',
						icon: 'none'
					})
				}
			},

			// 教练信息
			async getListAll() {
				this.columnjl = []
				let res = await request({
					url: '/app-api/dl-drive-school-coach-small/queryCoachByCourseId',
					method: 'GET',
					params: {
						courseId: this.courseId,
					},
					tenantIdFlag: false
				})
				// 1. 先过滤数据，只保留subject为2或3的教练
				const filteredData = res.data.filter(coach =>
					coach.subject === '2' || coach.subject === '3'
				);

				// 2. 去重处理 - 根据coachId去除重复教练
				const uniqueCoaches = [];
				const coachIds = new Set(); // 使用Set来存储已存在的coachId

				filteredData.forEach(coach => {
					if (!coachIds.has(coach.coachId)) {
						coachIds.add(coach.coachId);
						uniqueCoaches.push(coach);
					}
				});

				this.columnjl = [
					uniqueCoaches.map(coach => ({
						label: coach.coachName,
						value: coach
					}))
				];

				if (this.localStaffType === '02' && this.localCoachId) {
					const defaultCoach = uniqueCoaches.find(coach =>
						String(coach.coachId) === String(this.localCoachId)
					);
					if (defaultCoach) {
						this.jlName = defaultCoach.coachName;
						this.jlId = defaultCoach.coachId;
					} else {
						this.localCoachId = null
					}
				}
			},
			getsexindex(index) {
				this.sex = index
			},
			open() {
				// console.log('open');
			},
			close() {
				this.popupShow = false
				// console.log('close');
			},
			// 选择教练
			jlconfirm(e) {
				console.log('e', e)
				this.jlName = e.value[0].label; // 显示名称
				this.jlId = e.value[0].value.coachId; // 获取教练ID
				this.showjl = false;
				console.log('jlId', this.jlId)
			},
			jlcancel() {
				this.showjl = false
			},
			confirm(e) {
				const selected = e.value[0];
				this.dname = selected.label;
				this.selectedPayType = selected.id;
				this.updateDisplayPrice(); // 只在切换时更新价格
				this.show = false;
			},
			cancel() {
				this.show = false
			},
			goback() {
				// uni.navigateBack()
				uni.navigateBack({
					delta: 1
				});
			},
			changeStartPay(id) {
				this.startPay = id
			},

			/* goBookingJl() {
			  uni.navigateTo({
			    url: '/pages/index/bookingJl',
			  })
			}, */

			// 校验手机号
			isValidPhoneNumber(phoneNumber) {
				const regex = /^1[3-9]\d{9}$/;
				if (regex.test(phoneNumber)) {
					return true;
				} else {
					return false;
				}
			},


			// 校验身份证
			isValidIDNumber(idNumber) {
				const regex = /^\d{15}|\d{17}(?:\d|X)$/;
				if (regex.test(idNumber)) {
					return true;
				} else {
					return false;
				}
			},

			// 表单校验
			async validateForm() {
				/* if (!this.isDisabled && !this.sfzimg) {
					uni.showToast({
						title: '请上传身份证照片',
						icon: 'error'
					});
					return false;
				} */
				if (!this.phone || !this.name || !this.identity) {
					uni.showToast({
						title: '请输入完整信息',
						icon: 'error'
					});
					return false;
				}
				if (!this.isValidPhoneNumber(this.phone)) {
					uni.showToast({
						title: '手机号不规范',
						icon: 'error'
					});
					return false;
				}
				if (!this.isValidIDNumber(this.identity)) {
					uni.showToast({
						title: '身份证不规范',
						icon: 'error'
					});
					return false;
				}
				return true;
			},

			// 报名按钮主逻辑
			async applicationClick() {
				if (this.loading) return;
				this.loading = true;

				try {
					// 1. 基础校验
					if (!this.checkLogin()) {
						uni.navigateTo({
							url: '/pages/login/login'
						});
						return;
					}
					if (!await this.validateForm()) return;

					// 2. 处理已有订单
					if (this.orderId) {
						const status = await this.getPayStatus(this.orderId);
						if (status === '2') {
							this.signContract();
							return;
						} else if (status === '0') {
							const result = await this.processExistingOrder();
							if (result === 'cancelled') return;
							return;
						}
					}

					// 3. 创建新订单
					await this.createNewOrder();
				} catch (error) {
					if (!error.message.includes('cancel')) {
						uni.showToast({
							title: error.message || '操作失败',
							icon: 'none'
						});
					}
				} finally {
					this.loading = false;
				}
			},


			// 微信支付（新订单）
			async wxPayClick(name, phone, identity, courseId, payType, reserveMoney, restMoney) {
				const res = await request({
					url: '/app-api/small/jxInfo/onLinePay',
					method: 'post',
					data: {
						userName: name,
						userPhone: phone,
						userSex: this.sex,
						tenantId: this.tenantId,
						userNo: identity,
						courseId: courseId,
						coachUserName: this.jlName,
						coachUserId: this.jlId,
						courseType: this.rightInfoList.type,
						courseName: this.rightInfoList.name,
						userId: this.userId,
						reserveMoney: reserveMoney,
						payType: payType,
						restMoney: restMoney,
						payChannel: '1',
					}
				});

				this.orderId = res.orderId;
				this.orderNo = res.orderNo;

				const prepayRes = await request({
					url: `/app-api/small/jxInfo/prepayment?type=jsapi&orderNo=${this.orderNo}&orderId=${this.orderId}&payType=${payType}&tenantId=${this.tenantId}`,
					method: 'get'
				});

				const result = await this.handleWxPayment(prepayRes);
				if (result === 'success') {
					await Promise.all([
						this.updateOrderStatus(this.orderId, '2'),
						this.insertSchoolStudent()
					]);
					this.signContract();
				}
				return result;
			},

			// 线下支付
			async xxiaPayClick() {
				const res = await request({
					url: '/app-api/small/jxInfo/offLinePay',
					method: 'post',
					data: {
						userName: this.name,
						userPhone: this.phone,
						userSex: this.sex,
						tenantId: this.tenantId,
						userNo: this.identity,
						courseId: this.courseId,
						coachUserName: this.jlName,
						coachUserId: this.jlId,
						courseType: this.rightInfoList.type,
						courseName: this.rightInfoList.name,
						reserveMoney: this.rightInfoList.price,
						payType: '2',
						userId: this.userId,
						payChannel: '2',
					}
				});

				if (res.code === 0) {
					const contractData = {
						adress: this.Address,
						name: this.name,
						tenantId: this.tenantId,
						type: this.rightInfoList.type,
						carType: this.getLicenseTypeDescription(this.rightInfoList.type),
						money: this.rightInfoList.price,
						indent: this.identity,
						phone: this.phone,
						time: this.getCurrentDateTime(),
						endTime: this.getEndTime(),
					};
					this.orderTime = contractData.time,
						this.orderId = res.data
					uni.navigateTo({
						url: '/pages/index/contract?data=' + encodeURIComponent(JSON.stringify(contractData)) +
							'&callback=' + encodeURIComponent('handleContractSigned')
					});
				} else {
					uni.showToast({
						title: '订单创建失败，请稍后再试',
						icon: 'none',
						duration: 2000
					});
				}
			},

			async getRightInfoList() {
				let res = await request({
					url: '/app-api/dl-drive-school-course-small/get?id=' + this.courseId,
					method: 'get',
				})
				this.rightInfoList = res.data,
					this.currentPrice = this.rightInfoList.price;
				console.log('rightInfoList', this.rightInfoList)
			},

			// 线下支付合同签署完成后调用的方法
			handleContractSigned() {
				this.insertSchoolStudent();
			},

			async processExistingOrder() {
				uni.showLoading({
					title: '准备支付...',
					mask: true
				});

				try {
					// 1. 准备当前数据
					const payType = this.selectedPayType;
					const reserveMoney = payType === 1 ?
						this.rightInfoList.reserveMoney :
						this.rightInfoList.price;
					const restMoney = payType === 1 ?
						this.rightInfoList.price - reserveMoney :
						0;

					// 2. 获取并对比订单数据
					const orderDetail = await this.getOrderDetail(this.orderId);
					const needUpdate = this.checkOrderNeedUpdate(orderDetail, {
						userName: this.name,
						userPhone: this.phone,
						coachUserId: this.jlId,
						coachUserName: this.jlName,
						userNo: this.identity,
						userSex: this.sex,
						reserveMoney: reserveMoney,
						payType: payType,
						restMoney: restMoney
					});

					// 3. 更新订单数据（如有变更）
					if (needUpdate) {
						this.orderNo = await this.generateOrderNo()
						await this.updateOrderData({
							id: this.orderId,
							userName: this.name,
							userPhone: this.phone,
							userSex: this.sex,
							userNo: this.identity,
							coachUserName: this.jlName,
							coachUserId: this.jlId,
							reserveMoney: reserveMoney,
							payType: payType,
							restMoney: restMoney,
							orderNo: this.orderNo,
							paymentStatus: '0' // 重置为未支付状态
						});

						// 更新成功后保存新的原始数据
						this.saveOriginalFormData();
					}

					// 4. 处理支付
					if (this.startPay === 1) {
						const res = await request({
							url: `/app-api/small/jxInfo/prepayment?type=jsapi&orderNo=${this.orderNo}&orderId=${this.orderId}&payType=${payType}&tenantId=${this.tenantId}`,
							method: 'get'
						});
						this.orderTime = this.getCurrentDateTime()
						const result = await this.handleWxPayment(res);
						if (result === 'success') {
							console.log('ifSuccess', result)
							await Promise.all([
								this.updateOrderStatus(this.orderId, '2'),
								this.insertSchoolStudent()

							]);
							this.signContract();
						}
						return result;
					} else {
						this.xxiaPayClick();
						return 'success';
					}
				} finally {
					uni.hideLoading();
				}
			},

			// 检查订单是否需要更新
			checkOrderNeedUpdate(orderDetail, currentData) {
				const fieldsToCheck = [
					'userName',
					'userPhone',
					'coachUserId',
					'coachUserName',
					'userNo',
					'userSex',
					'reserveMoney',
					'payType',
					'restMoney'
				];

				return fieldsToCheck.some(field => {
					// 特殊处理数字类型的字段
					if (['reserveMoney', 'restMoney'].includes(field)) {
						return Number(orderDetail[field]) !== Number(currentData[field]);
					}
					return orderDetail[field] !== currentData[field];
				});
			},

			// 获取订单详情
			async getOrderDetail(orderId) {
				const res = await request({
					url: '/app-api/small/drive/school-course-order/get?id=' + orderId,
					method: 'GET'
				});
				return res.data;
			},

			// 更新订单数据
			async updateOrderData(orderData) {
				const res = await request({
					url: '/app-api/small/drive/school-course-order/update',
					method: 'put',
					data: orderData
				});
				return res.data;
			},

			saveOriginalFormData() {
				this.originalFormData = {
					jlName: this.jlName, // 教练姓名
					jlId: this.jlId, // 教练ID
					sfzimg: this.sfzimg, // 身份证照片
					name: this.name, // 学员姓名
					age: this.age, // 年龄
					sex: this.sex, // 性别
					identity: this.identity, // 身份证号
					phone: this.phone, // 手机号
					selectedPayType: this.selectedPayType, // 支付类型(1:定金 2:全款)
					currentPrice: this.currentPrice, // 当前显示价格
					reserveMoney: this.rightInfoList.reserveMoney, // 定金金额
					restMoney: this.rightInfoList.price - this.rightInfoList.reserveMoney // 尾款金额
				};
				this.formModified = false; // 重置修改标志
			},

			// 微信支付处理
			handleWxPayment(paymentParams) {
				return new Promise((resolve) => {
					wx.requestPayment({
						...paymentParams,
						success: (res) => {
							resolve(res.errMsg === 'requestPayment:ok' ? 'success' : 'fail');
						},
						fail: (err) => {
							resolve(err.errMsg === 'requestPayment:fail cancel' ? 'cancelled' :
								'fail');
						}
					});
				});
			},

			// 创建新订单
			async createNewOrder() {
				uni.showLoading({
					title: '创建订单中...',
					mask: true
				});
				try {
					if (this.startPay === 1) {
						const payType = this.selectedPayType;
						const reserveMoney = payType === 1 ?
							this.rightInfoList.reserveMoney :
							this.rightInfoList.price;
						this.payPrice = reserveMoney
						await this.wxPayClick(
							this.name,
							this.phone,
							this.identity,
							this.courseId,
							payType,
							reserveMoney,
							payType === 1 ? this.rightInfoList.price - reserveMoney : 0
						);
					} else {
						this.xxiaPayClick();
					}
				} finally {
					uni.hideLoading();
				}
			},

			// 获取新订单号
			async generateOrderNo() {
				const res = await request({
					url: '/app-api/small/jxInfo/generateOrderNo',
					method: 'GET',
				});
				return res

			},

			// 上传
			deletePic(event) {
				this[`fileList${event.name}`].splice(event.index, 1)
				if (event.name == '1') {
					this.photoUrl.splice(event.index, 1)
				}
				if (event.name == '2') {
					this.videoUr = null
				}
			},
			// 新增图片
			async afterRead(event) {
				// 当设置 multiple 为 true 时, file 为数组格式，否则为对象格式
				let lists = [].concat(event.file)
				let fileListLen = this[`fileList${event.name}`].length
				lists.map((item) => {
					this[`fileList${event.name}`].push({
						...item,

					})
				})
				for (let i = 0; i < lists.length; i++) {
					const result = await this.uploadFilePromise(lists[i].url)
					let item = this[`fileList${event.name}`][fileListLen]
					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
						status: 'success',
						message: '',
						url: result
					}))
					fileListLen++
				}
			},
			uploadFilePromise(e) {
				upload({
					url: '/app-api/small-upload/common/upload',
					filePath: e,
				}).then((res) => {
					this.sfzimg = res.data.url

					if (this.sfzimg) {
						this.idOcr(this.baseUrl + '/' + this.sfzimg)
					}

				})
			},
			async idOcr(url) {
				let that = this
				let res = await request({
					url: '/app-api/small-upload/idOcr',
					method: 'post',
					params: {
						imagePath: url
					}
				})
				that.name = res.data.name
				that.phone = res.data.phone
				that.sex = res.data.sex
				that.identity = res.data.idCard
				that.age = res.data.age
				that.Address = res.data.Address
				that.popupShow = false
			},

			// 更新订单状态
			async updateOrderStatus(orderId, status) {
				await request({
					url: '/app-api/small/drive/school-course-order/update',
					method: 'put',
					data: {
						id: orderId,
						paymentStatus: status
					}
				});
			},

			// 插入学员信息
			insertSchoolStudent() {
				const studentData = {
					avatar: this.userinfo.avatar,
					name: this.name,
					age: this.age,
					sex: this.sex,
					phone: this.phone,
					idCard: this.identity,
					registAddress: this.Address,
					userId: this.userinfo.id,
					tenantId: this.tenantId,
					idPhoto: this.sfzimg,
				};

				// 如果选择了教练，添加source和sourceUserId
				if (getCoachId() && this.localStaffType == '01') {
					studentData.source = '01';
					studentData.sourceUserId = getCoachId(); // 设置来源用户ID为员工ID
					this.sendMessages(this.name, this.rightInfoList.name, this.jlId)
					console.log('this.jlId01', this.jlId)
				} else if (getCoachId() && this.localStaffType == '02') {
					studentData.source = '02';
					studentData.sourceUserId = getCoachId(); // 设置来源用户ID为教练ID
					this.sendMessages(this.name, this.rightInfoList.name, getCoachId())
					console.log('this.jlId02', this.jlId)
					if (this.jlId === String(getCoachId())) {
						console.log('this.jlId03', this.jlId)
						this.autoAssignCoach()
					}

				} else if (getCoachId() && this.localStaffType == '04') {
					studentData.source = '04';
					studentData.sourceUserId = getCoachId(); // 设置来源用户ID为业务经理ID
				} else {
					studentData.source = '03'; // 自来客户
					this.sendMessages(this.name, this.rightInfoList.name, this.jlId)
				}
				console.log('studentData', studentData)
				request({
					url: '/app-api/small/dl-drive-school-student/create',
					method: 'post',
					data: studentData
				});

				this.updateSysUsersNickName();
				const dynamicData = {
					tenantId: this.tenantId,
					name: this.name,
					courseName: this.rightInfoList.name,
					licenseType: this.rightInfoList.type,
					price: this.rightInfoList.price,
					orderTime: this.getCurrentDateTime()
				}
				console.log('现在是微信支付', dynamicData)
				this.sendSubscriptionMessage(dynamicData)
			},

			// 修改users信息
			updateSysUsersNickName() {
				request({
					url: '/app-api/system/user/update',
					method: 'PUT',
					data: {
						nickname: this.name,
						id: this.userinfo.id
					}
				})
			},

			// 校验是否登录
			checkLogin() {
				const token = uni.getStorageSync('App-Token');
				if (!token) {
					uni.showToast({
						title: '请先登录',
						icon: 'none'
					});
					return false;
				}
				return true;
			},

			// 格式化时间
			getCurrentDateTime() {
				const now = new Date();

				const year = now.getFullYear();
				const month = String(now.getMonth() + 1).padStart(2, '0');
				const day = String(now.getDate()).padStart(2, '0');
				const hours = String(now.getHours()).padStart(2, '0');
				const minutes = String(now.getMinutes()).padStart(2, '0');
				const seconds = String(now.getSeconds()).padStart(2, '0');

				return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
				// return now;
			},

			getLicenseTypeDescription(code) {
				const licenseMap = {
					C1: "小型手动挡汽车",
					C2: "小型自动档汽车",
					B1: "中型客车",
					B2: "大型货车",
					A1: "大型客车",
					A2: "牵引车",
					A3: "城市公交车",
					D: "三轮摩托车",
					E: "两轮摩托车",
					F: "轻便摩托车"
				};

				return licenseMap[code] || "未知类型";
			},

			// 签合同
			signContract() {
				const contractData = {
					adress: this.Address,
					name: this.name,
					tenantId: this.tenantId,
					type: this.rightInfoList.type,
					carType: this.getLicenseTypeDescription(this.rightInfoList.type),
					money: this.rightInfoList.price,
					indent: this.identity,
					phone: this.phone,
					time: this.getCurrentDateTime(),
					endTime: this.getEndTime(),
				};
				this.orderTime = contractData.time,
					uni.navigateTo({
						url: '/pages/index/contract?data=' + encodeURIComponent(JSON.stringify(contractData))
					})
			},

			// 获取三年后的时间
			getEndTime() {
				const now = new Date();
				now.setFullYear(now.getFullYear() + 3); // 加三年

				const year = now.getFullYear();
				const month = String(now.getMonth() + 1).padStart(2, '0');
				const day = String(now.getDate()).padStart(2, '0');
				const hours = String(now.getHours()).padStart(2, '0');
				const minutes = String(now.getMinutes()).padStart(2, '0');
				const seconds = String(now.getSeconds()).padStart(2, '0');

				return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
			},

			// 获取订单状态
			async getPayStatus(orderId) {
				const res = await request({
					url: '/app-api/small/drive/school-course-order/get?id=' + orderId,
					method: 'GET'
				});
				this.payStatus = res.data.paymentStatus;
				this.oldOrderDetails = res.data
				return res.data.paymentStatus;
			},

			// 发送站内信
			sendMessages(studentName, courseName, coachId) {
				request({
					url: '/app-api/small/drive/school-course-order/sendMessage',
					method: 'GET',
					params: {
						studentName: studentName,
						courseName: courseName,
						coachId: coachId,
					}
				})
			},

			// 教练自招，自动分配教练
			autoAssignCoach() {
				const process = {
					orderId: this.orderId,
					courseId: this.courseId,
					coachId: this.jlId,
					coachName: this.jlName,
					userName: this.name
				}
				request({
					url: '/app-api/process/autoAssignCoach',
					method: 'POST',
					data: process,
				})
			}


		}
	}
</script>

<style scoped lang="scss">
	.bm-page {
		padding: 30rpx;

		.bm-page-button {
			margin-top: 30rpx;

			.bm-page-button-main {
				border-radius: 50rpx;
				background-color: #2C78F5;
				color: #fff;
			}
		}

		.bm-page-dj {
			margin-top: 30rpx;
			padding: 30rpx;
			background-color: #fff;
			border-radius: 20rpx;

			.payment-type-container {
				margin-bottom: 30rpx;

				.payment-type-item {
					display: flex;
					justify-content: space-between;
					align-items: center;
					padding: 25rpx 0;
					border-bottom: 1rpx solid #f5f5f5;

					&.active {
						.payment-type-name {
							color: #2C78F5;
							font-weight: bold;
						}

						.payment-type-price {
							color: #ff4d4f;
						}
					}

					.payment-type-info {
						flex: 1;

						.payment-type-name {
							font-size: 30rpx;
							color: #333;
						}

						.payment-type-price {
							font-size: 26rpx;
							color: #999;
							margin-top: 10rpx;
						}
					}

					.payment-type-radio {
						width: 40rpx;
						height: 40rpx;
						border-radius: 50%;
						border: 1rpx solid #ddd;
						display: flex;
						align-items: center;
						justify-content: center;

						.radio-selected {
							width: 24rpx;
							height: 24rpx;
							border-radius: 50%;
							background-color: #2C78F5;
						}

						.radio-unselected {
							width: 24rpx;
							height: 24rpx;
							border-radius: 50%;
							background-color: transparent;
						}
					}
				}
			}

			.payment-channel-container {
				margin-top: 20rpx;
				padding-top: 20rpx;
				border-top: 1rpx solid #eee;

				.payment-channel-title {
					font-size: 28rpx;
					color: #666;
					margin-bottom: 20rpx;
				}

				.payment-channel-item {
					display: flex;
					align-items: center;
					padding: 20rpx 0;

					&.active {
						.channel-name {
							color: #2C78F5;
						}
					}

					.channel-icon {
						width: 40rpx;
						height: 40rpx;
						margin-right: 20rpx;
					}

					.channel-name {
						flex: 1;
						font-size: 28rpx;
						color: #333;
					}

					.channel-radio {
						width: 40rpx;
						height: 40rpx;
						border-radius: 50%;
						border: 1rpx solid #ddd;
						display: flex;
						align-items: center;
						justify-content: center;

						.radio-selected {
							width: 24rpx;
							height: 24rpx;
							border-radius: 50%;
							background-color: #2C78F5;
						}

						.radio-unselected {
							width: 24rpx;
							height: 24rpx;
							border-radius: 50%;
							background-color: transparent;
						}
					}
				}
			}
		}

		/* .bm-page-dj {
			margin-top: 30rpx;
			padding: 30rpx;
			background-color: #fff;
			border-radius: 20rpx;
			

			.dj-list {
				padding: 20rpx 0;
				display: flex;
				justify-content: space-between;
				align-items: center;

				.dj-list-left {
					display: flex;
					align-items: center;

					.dj-list-left-name {
						margin-left: 20rpx;
					}

					.dj-list-left-img {
						height: 50rpx;
						width: 50rpx;
					}
				}
			}

			.bm-page-dj-title {
				border-bottom: 1rpx solid #eee;
				padding-bottom: 20rpx;
				margin-bottom: 10rpx;
				display: flex;
				align-items: center;
				justify-content: space-between;

				.bm-page-dj-title-price {
					color: red;
				}
			}
		} */

		.bm-page-info {
			margin-top: 30rpx;
			padding: 30rpx;
			background-color: #fff;
			border-radius: 20rpx;

			.info-name {
				width: 100%;
				padding: 40rpx 0;
				border-bottom: 1px solid #eee;
				display: flex;
				justify-content: space-between;
				width: 100%;
				align-items: center;

				.info-name-right {
					display: flex;
					align-items: center;
					margin-left: 30rpx;
					flex: 3;
				}

				.info-name-left {
					flex: 1;
				}
			}

			.bm-page-info-title {

				font-size: 34rpx;
				font-weight: 600;
			}
		}

		.bm-page-top {
			display: flex;
			padding: 30rpx;
			background-color: #fff;
			border-radius: 20rpx;

			.bm-page-right {
				margin-left: 30rpx;
				display: flex;
				justify-content: space-between;
				flex-direction: column;

				.bm-page-right-3 {
					.bm-page-right-price {
						color: red;
					}

					.bm-page-right-jprice {
						margin-left: 20rpx;
						text-decoration: underline;
						font-size: 20rpx;
					}
				}

				.bm-page-right-1 {
					font-weight: 800;
				}

				.bm-page-right-2 {
					display: flex;
					font-size: 22rpx;

					.bm-page-right-zd {
						background-color: #dfebff;
					}

					.bm-page-right-c2 {
						background-color: rgba(255, 208, 112, 0.2);
					}

					view {
						text-align: center;
						border-radius: 12rpx;
						padding: 10rpx;
						background-color: red;
						margin-right: 10rpx;
					}

					&:last-child {
						margin-right: 20rpx;
					}
				}
			}

			.top-left-img {
				height: 150rpx;
				width: 230rpx;
				border-radius: 12rpx;
			}
		}
	}

	.content {
		background: #f4f5f6;
		// background: linear-gradient(180deg, #9ffcc5 0%, #84fcbc 14%, rgba(255, 255, 255, 0.84) 24%, rgba(255, 255, 255, 0.84) 100%);
		height: 100vh;
	}

	.container {
		width: 100%;
		background: #f4f5f6;
		box-sizing: border-box;
		padding-top: 88px;
	}

	.onel {
		width: 18px;
		height: 18px;
		border-radius: 50%;
		overflow: hidden;
		border: 1px solid #8c8c8d;
	}

	.disabled {
		opacity: 0.6;
		pointer-events: none;
		/* 禁用点击（保险） */
	}

	/* 你也可以细调样式，比如输入框变灰底色 */
	.disabled .info-name-input {
		background-color: #f5f5f5;
		color: #999;
	}

	.disabled .size-lv {
		background-color: #eee;
		color: #999;
	}

	.disabled .anniu {
		background-color: #ccc;
		color: #fff;
	}

	// .disabled .info-name-right {
	// 	background-color: #ccc;
	// 	color: #fff;
	// }

	.twol {
		width: 18px;
		height: 18px;
		border-radius: 50%;
		overflow: hidden;
		border: 1px solid #2C78F5;
		background: #2C78F5;
		display: flex;
		align-items: center;
		justify-content: center;
		color: #fff;
	}

	.d-s {
		display: flex;
		align-items: center;
	}

	.anniu {
		width: 120px;
		height: 35px;
		border-radius: 4px;
		background: #2C78F5;
		color: #fff;
		display: flex;
		align-items: center;
		justify-content: center;
		font-size: 14px;
	}

	.popup-box {
		width: 300px;
		border-radius: 10px;
		background: #fff;
		box-sizing: border-box;
		padding: 10px;
	}

	.title_s {
		font-weight: bold;
		margin-bottom: 10px;
	}

	.clv {
		color: #fff;
		background: #2C78F5;
		width: 26px;
		height: 26px;
		border-radius: 50%;
		display: flex;
		font-size: 14px;
		align-items: center;
		justify-content: center;
		font-weight: bold;
	}

	.size-lv {
		margin-right: 35px;
	}
</style>