<template>
	<view class="page">
		<u-navbar title="设备详情" :border-bottom="false" :background="bgc" title-color='#2E4975' title-size='36'
			height='45'></u-navbar>
		<map class="map" id="map" ref="map" :scale="zoomSize" :latitude="latitude" :longitude="longitude"
			:show-location="true" :markers="markers" :polygons="polyline">
			<cover-view class="park" @click="toggleIconAndCallout">
				<cover-image class="img" src="https://lxnapi.ccttiot.com/bike/img/static/uRiYQZQEb3l2LsltEsyW"
					mode=""></cover-image>
			</cover-view>
			<cover-view class="track" @click="toTrack">
				<cover-image class="img" src="https://lxnapi.ccttiot.com/bike/img/static/ufaAAtlirJYs1QwJF25P"
					mode=""></cover-image>
			</cover-view>
		</map>
		<view class="info_card">
			<view class="info_tit">
				设备信息
			</view>
			<view class="lines"></view>
			<view class="cont">
				<view class="info_li">
					<view class="half_infoli">
						SN：<span>{{deviceInfos.sn}}</span>
					</view>
					<view class="half_infoli">
						MAC：<span>{{deviceInfos.mac}}</span>
					</view>
				</view>
				<view class="info_li">
					<view class="half_infoli">
						车牌号：<span v-if="deviceInfos.deviceVehicleNum">{{deviceInfos.deviceVehicleNum}}</span>
						<span v-else>--</span>
					</view>
					<view class="half_infoli">
						车辆型号：
						<span v-if="deviceInfos.modelName">{{deviceInfos.modelName}}</span>
						<span v-else>--</span>
					</view>
				</view>
				<view class="info_li">
					运营区域：
					<span v-if="deviceInfos.areaName">{{deviceInfos.areaName}}</span>
					<span v-else>--</span>
				</view>
			</view>
			<view class="lines"></view>
			<view class="cont">
				<view class="info_li">
					<view class="half_infoli">
						车辆状态：<span>{{status()}}</span>
					</view>
					<view class="half_infoli" v-if="deviceInfos.onlineStatus==0">
						网络状态：<span>离线</span>
					</view>
					<view class="half_infoli" v-if="deviceInfos.onlineStatus==1">
						网络状态：<span>在线</span>
					</view>
				</view>
				<view class="info_li">
					<view class="half_infoli">
						电池电量：
						<span v-if="deviceInfos.remainingPower">{{deviceInfos.remainingPower}}%</span>
						<span v-else>--</span>
					</view>
					<view class="half_infoli">
						续航里程：
						<span v-if="deviceInfos.remainEndurance">{{deviceInfos.remainEndurance}} KM</span>
						<span v-else>--</span>
					</view>
				</view>
				<view class="info_li">
					<view class="half_infoli">
						电池电压：
						<span v-if="deviceInfos.voltage">{{deviceInfos.voltage}}V</span>
						<span v-else>--</span>
					</view>
					<view class="half_infoli">
						4G信号：
						<span v-if="deviceInfos.satellites">{{deviceInfos.satellites}}</span>
						<span v-else>--</span>
					</view>
				</view>
			</view>
			<view class="lines"></view>
			<view class="cont">
				<view class="info_li">
					最后定位坐标：
					<span v-if="deviceInfos.latitude">{{deviceInfos.latitude}},{{deviceInfos.longitude}}</span>
					<span v-else>--</span>
				</view>
				<view class="info_li" style="flex-wrap: wrap;display: inline-block;">
					最后定位地址：
					<span v-if="deviceInfos.location">{{deviceInfos.location}}</span>
					<span v-else>--</span>
				</view>
				<view class="info_li">
					最后定位时间：
					<span v-if="deviceInfos.lastTime">{{deviceInfos.lastTime}}</span>
					<span v-else>--</span>
				</view>
			</view>
		</view>
		<view class="info_card" style="margin-top: 20rpx;" v-if="deviceInfos.etOrders[0]&&deviceInfos.sn">
			<view class="info_tit">
				最后订单信息
			</view>
			<view class="lines"></view>
			<view class="cont">
				<view class="info_li">
					最后用户姓名：
					<span v-if="deviceInfos.etOrders[0].realName &&deviceInfos.sn">{{deviceInfos.etOrders[0].realName}}</span>
					<span v-else>--</span>
				</view>
				<view class="info_li">
					最后用户电话：
					<span v-if="deviceInfos.etOrders[0].phonenumber &&deviceInfos.sn">{{deviceInfos.etOrders[0].phonenumber}}</span>
					<span v-else>--</span>
				</view>
				<view class="info_li" style="flex-wrap: wrap;display: inline-block;">
					最后订单编号：
					<span v-if="deviceInfos.etOrders[0].orderNo &&deviceInfos.sn">{{deviceInfos.etOrders[0].orderNo}}</span>
					<span v-else>--</span>
				</view>
				<view class="info_li">
					订单开始时间：
					<span v-if="deviceInfos.etOrders[0].createTime&&deviceInfos.sn">{{deviceInfos.etOrders[0].createTime}}</span>
					<span v-else>--</span>
				</view>
				<view class="info_li">
					<view class="info_li" v-if="deviceInfos.sn">
						订单状态：<span>{{statuss()}}</span>
					</view>
				</view>
			</view>
		</view>
		<view class="bot_btn">
			<view class="btn" @click="checkbtn(0)">
				开锁
			</view>
			<view class="btn" @click="checkbtn(1)">
				关锁
			</view>
			<view class="btn" @click="btn(4)">
				响铃寻车
			</view>
			<view class="btn" @click="btn(8)">
				设备重启
			</view>
			<view class="btn" @click="btn(2)" v-if="deviceInfos.status!=8">
				车辆禁用
			</view>
			<view class="btn" @click="btn(3)" v-if="deviceInfos.status==8">
				车辆解禁
			</view>
			<view class="btn" @click="btn(5)" v-if="deviceInfos.status!=0">
				车辆回仓
			</view>
			<view class="btn" @click="btn(6)" v-if="deviceInfos.status==0">
				车辆出仓
			</view>
			<view class="btn" @click="btn(7)">
				车牌修改
			</view>
			<view class="btn" v-if="this.deviceInfos.hardwareVersion && this.deviceInfos.hardwareVersion.toLowerCase().includes('x')" @click="btn(9)">
				坐垫锁
			</view>
			<view class="btn" @click="btn(10)">
				定位更新
			</view>
			<view class="btn" @click="changeShwoList">
				修改车型
			</view>
			<view class="btn" @click="generateQrcode()">
				设备二维码
			</view>
			<view class="btn" v-if="this.deviceInfos.hardwareVersion && this.deviceInfos.hardwareVersion.toLowerCase().includes('x')" @click="btnjingyin">
				静音：{{jytxt}}
			</view>
		</view>
		<u-mask :show="false" @click="show = false" :z-index='100' />
		<u-mask :show="maskloading" :z-index='100' duration='0' />
		<view class="maskloadpage" v-if="maskloading">
			<view class="maskpage1" v-if="maskepage==4">
				<view class="top_info">
					<image :src="loadimg" mode=""></image>
					<view class="masktxt">
						{{buletxt}}
					</view>
				</view>
				<view class="masktips" style="width: 100%;">
					请确保与车辆的距离小于3米
				</view>
				<view class="tipsimg">
					<image src="https://lxnapi.ccttiot.com/bike/img/static/ugvqmfB3QYujZ6SnfTia" mode=""></image>
				</view>
			</view>
			<!-- 不允许停车点外还车 -->
			<view class="maskpage1" v-if="maskepage==5">
				<view class="top_info">
					<image src="https://lxnapi.ccttiot.com/bike/img/static/uG3cbPgvPDzwlq6IHHxK" mode=""></image>
					<view class="masktxt" v-if="orderinfo.sn">
						蓝牙连接失败
					</view>
				</view>
				<view class="masktips" style="width: 100%;">
					请确保手机蓝牙已经打开
				</view>
				<view class="tipsimg">
					<image src="https://lxnapi.ccttiot.com/bike/img/static/ugvqmfB3QYujZ6SnfTia" mode=""></image>
				</view>
				<view class="btn_box">
					<view class="btn4" @click="closemask()">
						返回
					</view>
					<view class="btn3" @click="Binddevice">
						重新连接
					</view>
				</view>
			</view>
		</view>
		<u-mask :show="showvehicle" @click="closevehicle()" :z-index='100' />
		<view class="tip_box" v-if="showvehicle">
			<view class="top" v-if="showvehicle">
				<view class="tip">
					设备信息修改
				</view>
				<view class="ipt_box">
					<view class="text">
						车牌号
					</view>
					<view class="ipt">
						<input type="text" v-model="vehicleNum" placeholder=" " class="input"
							placeholder-style="color:#C7CDD3">
					</view>
				</view>
			</view>
			<view class="bots">
				<view class="bot_left" @click="closevehicle()">
					取消
				</view>
				<view class="bot_right" @click="putvehicle()">
					确定
				</view>
			</view>
		</view>
		<u-mask :show="showqr" @click="closeQr()" :z-index='100' />
		<view class="tip_box" v-if="showqr" >
			<view class="ewm" style="padding-top: 50rpx;">
				<canvas id="qrcode" canvas-id="qrcode" style="width: 350rpx;height:350rpx;margin-left: 164rpx;" />
			</view>
			<view class="saveQr" @click="saveQrcode()">
				保存二维码
			</view>
		</view>
		<u-mask :show="showbtntip" @click="closevehicle()" :z-index='100' />
		<view class="tip_box" v-if="showbtntip">
			<view class="top" v-if="showbtntip">
				<view class="tip">
					操作提示
				</view>
				<view class="ipt_box" style="justify-content: center;">
					<view class="text" style="width: 80%;text-align: center;">
						车辆有正在进行中的订单，是否进行该操作
					</view>
				</view>
			</view>
			<view class="bots">
				<view class="bot_left" @click="closeshowtip() ">
					取消
				</view>
				<view class="bot_right" @click="btn(btnnum)">
					确定
				</view>
			</view>
		</view>
		<u-select v-model="showModelList" :list="ModelList" title='修改车型' @confirm="confirm"></u-select>
	</view>
</template>

<script>
	const app = getApp()
	var xBlufi = require("@/components/blufi/xBlufi.js")
	let _this = null
	export default {
		data() {
			return {
				devicesList: [],
				searching: false,
				texts: '正在扫描蓝牙设备...',
				btnflag: true,
				tishiflag: false,
				option: '',
				bluthlist: [], //蓝牙数组
				statusflag: false,
				Bluetoothmac: '',
				mac: '',
				ishave: false,
				ver_data: null,
				deviceInfoss: {},
				gps: {},
				isband: false,
				deviceIds: '',
				name: '',
				orderinfo: {},
				dl: 0,
				czmoney: true,
				iscz: true,
				bgc: {
					backgroundColor: "#F7FAFE",
				},
				show: true,
				showgj: true,
				searchKeyword: '11',
				latitude: '',
				longitude: '',
				isMap: false,
				zoomSize: 15,
				markers: [],
				polyline: [],
				polygons: [],
				cardId: '001区域',
				sn: '',
				deviceInfos: {},
				carstause: false,

				maskloading: false,
				toploadtxt: "开锁中0%",
				loadimg: 'https://lxnapi.ccttiot.com/bike/img/static/urJQJnOI1DEjWatFqHYh',
				tiptxt: '请定点停放，规范用车',
				maskepage: 0,
				backgps: {},
				buletxt: '',

				buleclose: false,
				buleopen: false,
				bulering: false,
				bulerebort: false,
				getnum: 0,
				showvehicle: false,
				vehicleNum: '',
				showbtntip: false,
				btnnum: null,
				showqr: false,
				canvasWidth: 300,
				deptId:null,
				showModelList:false,
				ModelList:[],
				jytxt:'开'
			}
		},
		onLoad(e) {
			this.sn = e.id
			this.deviceInfo()
			this.deptId = uni.getStorageSync('deptId');
		},
		onUnload: function() {
			xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
			xBlufi.notifyStartDiscoverBle({
				'isStart': false
			});
		},
		onHide() {
			xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
			xBlufi.notifyStartDiscoverBle({
				'isStart': false
			});
		},
		onBeforeUnmount() {
			xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
			xBlufi.notifyStartDiscoverBle({
				'isStart': false
			})
		},
		watch: {

		},
		methods: {
			// 静音
			btnjingyin(){
				if(this.jytxt == '开'){
					let data = {
					    isSound:0
					}
					this.$u.post(`/appVerify/device/mute/${this.sn}`).then(res =>{
						if(res.code == 200){
							this.jytxt = '关'
							uni.showToast({
								title: '关闭静音成功',
								icon: 'success',
								duration: 2000
							})
						}
					})
				}else{
					let data = {
					    isSound:1
					}
					this.$u.post(`/appVerify/device/mute/${this.sn}`).then(res =>{
						if(res.code == 200){
							this.jytxt = '开'
							uni.showToast({
								title: '开启静音成功',
								icon: 'success',
								duration: 2000
							})
						}
					})
				}
			},
			
			toTrack(){
				uni.navigateTo({
					url:'/page_shanghu/guanli/bike_track?sn='+this.deviceInfos.sn+'&type=1'
				})
			},
			changeShwoList(){
				console.log('diaoyongle')
				this.showModelList=true
			},
			confirm(e) {
				let modelId=e[0].value
				let data = {
					id:this.sn,
					modelId:modelId
				}
				this.$u.put('/bst/device',data).then((res) => {
					if (res.code == 200) {
						this.showModelList=false
						this.deviceInfo()
						uni.showToast({
							title: '修改成功',
							icon: 'none',
							duration: 2000
						})
					} else {
						uni.showToast({
							title: res.msg,
							icon: 'none',
							duration: 2000
						})
					}
				})
			},
			getModelList(){
				this.$u.get(`/bst/model/list?pageNum=1&pageSize=999`).then((res) => {
					if (res.code == 200) {
						this.ModelList=res.rows.map(item => ({
							value: item.id,
							label: item.name
						}))
					} else {
						uni.showToast({
							title: res.msg,
							icon: 'none',
							duration: 2000
						})
					}
				})
			},
			closeQr(){
				 this.showqr=false
			},
			generateQrcode() {
				uni.navigateTo({
					url:'/page_shanghu/guanli/Qrcode?sn='+this.deviceInfos.sn
				})
			},
			saveQrcode() {
				uni.canvasToTempFilePath({
				     canvasId: 'qrcode',
				     x: -10, // 裁剪区域的 x
				     y: 0, // 裁剪区域的 y
				     width: 155 , // 裁剪区域的宽度，包含边距
				     height: 157+15, // 裁剪区域的高度，包含边距
				     success: (res) => {
				         uni.saveImageToPhotosAlbum({
				             filePath: res.tempFilePath,
				             success: () => {
				                 uni.showToast({
				                     title: '保存成功',
				                     icon: 'success'
				                 })
				                 this.showqr = false
				             },
				             fail: (err) => {
				                 uni.showToast({
				                     title: '保存失败',
				                     icon: 'none'
				                 })
				             }
				         })
				     },
				     fail: (err) => {
				         uni.showToast({
				             title: '生成二维码失败',
				             icon: 'none'
				         })
				     }
				})
			},
			closeshowtip() {
				this.showbtntip = false
			},
			checkbtn(num) {
				if (this.deviceInfos.status == 3 || this.deviceInfos.status == 2 || this.deviceInfos.status == 4) {
					this.showbtntip = true
					this.btnnum = num
				} else {
					this.btn(num)
				}
			},
			putvehicle() {
				let data = {
					id:this.sn,
					vehicleNum:this.vehicleNum
				}
				this.$u.put('/bst/device',data).then((res) => {
					if (res.code == 200) {
						this.deviceInfo()
						this.showvehicle = false
						uni.showToast({
							title: '修改成功',
							icon: 'none',
							duration: 2000
						})
					} else {
						uni.showToast({
							title: res.msg,
							icon: 'none',
							duration: 2000
						})
					}
				})
			},
			closemask() {
				this.maskloading = false
			},
			statuss() {
				if(this.deviceInfos.sn){
					if (this.deviceInfos.etOrders[0]) {
						if (this.deviceInfos.etOrders[0].status == 0) {
							return '预约中'
						} else if (this.deviceInfos.etOrders[0].status == 1) {
							return '取消预约'
						} else if (this.deviceInfos.etOrders[0].status == 2) {
							return '骑行中'
						} else if (this.deviceInfos.etOrders[0].status == 3) {
							return '骑行结束'
						} else if (this.deviceInfos.etOrders[0].status == 4) {
							return '订单完成'
						}
					}
				}
			},
			closevehicle() {
				this.showvehicle = false
			},
			bulebtn(num) {
				if (num == 1) {
					if (this.carstause) {
						this.ring()
					} else {
						this.bulering = true
						this.Binddevice()
					}
				} else if (num == 2) {
					if (this.carstause) {
						this.open()
					} else {
						this.buleopen = true
						this.Binddevice()
					}
				} else if (num == 3) {
					if (this.carstause) {
						this.close()
					} else {
						this.buleclose = true
						this.Binddevice()
					}
				} else if (num == 4) {
					if (this.carstause) {
						this.reboot()
					} else {
						this.bulerebort = true
						this.Binddevice()
					}
				}
			},
			btn(num) {
				this.showbtntip = false
				let data = [this.sn]
				if (num == 0) {
					uni.showLoading({
						title: '加载中...'
					})
					console.log('点击了....1');
					this.$u.put('/bst/device/iot/unlock?id=' + this.sn).then((res) => {
						if (res.code == 200) {
							// 处理接口返回的数据，将边界数据转换为地图组件需要的折线结构
							this.deviceInfo()
							uni.showToast({
								title: '操作成功',
								icon: 'success',
								duration: 2000
							})
						} else {
							uni.hideLoading()
							this.bulebtn(2)
						}
					})
				} else if (num == 1) {
					uni.showLoading({
						title: '加载中...'
					})
					console.log('点击了....2');
					this.$u.put('/bst/device/iot/lock?id=' + this.sn).then((res) => {
						if (res.code == 200) {
							// 处理接口返回的数据，将边界数据转换为地图组件需要的折线结构
							this.deviceInfo()
							uni.showToast({
								title: '操作成功',
								icon: 'success',
								duration: 2000
							});
						} else {
							uni.hideLoading()
							this.bulebtn(3)
						}
					})
				} else if (num == 2) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/disable',data).then((res) => {
						if (res.code == 200) {
							uni.showToast({
								title: '解禁成功',
								icon: 'success',
								duration: 2000
							});
							// 处理接口返回的数据，将边界数据转换为地图组件需要的折线结构
							this.deviceInfo()
						} else {
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							})
						}
					})
				} else if (num == 3) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/enable',data).then((res) => {
						if (res.code == 200) {
							// 处理接口返回的数据，将边界数据转换为地图组件需要的折线结构
							uni.showToast({
								title: '解禁成功',
								icon: 'success',
								duration: 2000
							});
							this.deviceInfo()
						} else {
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							});
						}
					})
				} else if (num == 4) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/iot/ring?id=' + this.sn).then((res) => {
						if (res.code == 200) {
							uni.hideLoading()
							uni.showToast({
								title: '操作成功',
								icon: 'success',
								duration: 2000
							});
						} else {
							uni.hideLoading()
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							});
							this.bulebtn(1)
						}
					})
				} else if (num == 5) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/in',data).then((res) => {
						if (res.code == 200) {
							uni.showToast({
								title: '回仓成功',
								icon: 'success',
								duration: 2000
							});
							this.deviceInfo()
						} else {
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							})
						}
					})
				} else if (num == 6) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/out',data).then((res) => {
						if (res.code == 200) {
							this.deviceInfo()
							uni.showToast({
								title: '出仓成功',
								icon: 'success',
								duration: 2000
							})
						} else {
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							})
						}
					})
				} else if (num == 7) {
					this.showvehicle = true
				} else if (num == 8) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/iot/reboot?id=' + this.sn).then((res) => {
						if (res.code == 200) {
							this.deviceInfo()
							uni.showToast({
								title: '操作成功',
								icon: 'success',
								duration: 2000
							})
						} else {
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							})
							// uni.hideLoading()
							// this.bulebtn(4)
						}
					})
				} else if (num == 9) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/iot/unlockSeat?id=' + this.sn).then((res) => {
						if (res.code == 200) {
							this.deviceInfo()
							uni.showToast({
								title: '操作成功',
								icon: 'success',
								duration: 2000
							})
						} else {
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							})
						}
					})
				} else if (num == 10) {
					uni.showLoading({
						title: '加载中...'
					})
					this.$u.put('/bst/device/iot/refresh?id=' + this.sn).then((res) => {
						if (res.code == 200) {
							this.deviceInfo()
							uni.showToast({
								title: '操作成功',
								icon: 'success',
								duration: 2000
							})
						} else {
							uni.showToast({
								title: res.msg,
								icon: 'none',
								duration: 2000
							})
						}
					})
				}
			},
			Binddevice() {
				uni.getBluetoothAdapterState({
					success: function(res) {
						console.log('蓝牙状态：', res.available)
					},
					fail: function(res) {
						console.log('获取蓝牙状态失败')
					}
				})
				this.maskloading = true
				this.devicesList = []
				this.maskepage = 4
				this.buletxt = '蓝牙连接中'
				xBlufi.initXBlufi(1)
				console.log("xBlufi", xBlufi.XMQTT_SYSTEM)
				xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent)
				xBlufi.notifyStartDiscoverBle({
					'isStart': true
				})
				// 两秒后停止蓝牙搜索
				setTimeout(() => {
					xBlufi.notifyStartDiscoverBle({
						'isStart': false
					})
					setTimeout(() => {
						if (this.devicesList.length == 0) {
							this.maskepage = 5
						} else {
							let uniqueDevicesList = Array.from(new Set(this.devicesList))
							// 将去重后的数组重新赋值给 this.devicesList
							this.devicesList = uniqueDevicesList
							console.log(this.devicesList, 'this.devicesListthis.devicesList')
							let istrue = false
							this.devicesList.forEach(device => {
								// 从设备名称中提取 MAC 地址（假设 MAC 地址是设备名称的后6个字符）
								let macFromName = device.name.substring(device.name.length - 12)
								console.log(macFromName, 'macFromNamemacFromName')
								// 与 this.mac 进行比较
								if (macFromName == this.mac) {
									// 如果相同，则将 this.ishave 设置为 true
									console.log(device)
									this.deviceInfoss = device
									istrue = true
									this.createBLEConnection(device)
									console.log('对比正确1111111111')
								} else {
									console.log('对比错误')
								}
							})
							setTimeout(() => {
								if (!istrue) {
									this.buletxt = '蓝牙连接失败'
									setTimeout(() => {
										this.maskepage = 5
									}, 500)
								}
							}, 500)
						}
					}, 200)
				}, 5000)
			},
			reboot() {
				let vm = this // 将外部的 this 绑定到 vm 上
				uni.getNetworkType({
					success(res) {
						if (res.networkType !== 'none') {
							uni.getConnectedBluetoothDevices({
								success(res) {
									console.log('已连接的蓝牙设备信息：', res)
									xBlufi.notifySendCustomData({
										customData: "11reboot"
									})
									vm.maskloading = false
								},
								fail(err) {
									uni.hideLoading()
									console.error('获取已连接蓝牙设备信息失败：', err)
								}
							})
						} else {
							console.log('手机未连接网络')
						}
					}
				})
			},
			open() {
				let vm = this // 将外部的 this 绑定到 vm 上
				uni.getNetworkType({
					success(res) {
						if (res.networkType !== 'none') {
							uni.getConnectedBluetoothDevices({
								success(res) {
									console.log('已连接的蓝牙设备信息：', res)
									xBlufi.notifySendCustomData({
										customData: "11open"
									})
									vm.maskloading = false
									vm.deviceInfo()
								},
								fail(err) {
									uni.hideLoading()
									console.error('获取已连接蓝牙设备信息失败：', err)
								}
							})
						} else {
							console.log('手机未连接网络')
						}
					}
				})
			},
			close() {
				let vm = this // 将外部的 this 绑定到 vm 上
				uni.getNetworkType({
					success(res) {
						if (res.networkType !== 'none') {
							uni.getConnectedBluetoothDevices({
								success(res) {
									console.log('已连接的蓝牙设备信息：', res)
									xBlufi.notifySendCustomData({
										customData: "11close"
									})
									vm.maskloading = false
									vm.deviceInfo()
								},
								fail(err) {
									uni.hideLoading()
									console.error('获取已连接蓝牙设备信息失败：', err)
								}
							})
						} else {
							console.log('手机未连接网络')
						}
					}
				})
			},
			ring() {
				let vm = this // 将外部的 this 绑定到 vm 上
				uni.getNetworkType({
					success(res) {
						if (res.networkType !== 'none') {
							uni.getConnectedBluetoothDevices({
								success(res) {
									console.log('已连接的蓝牙设备信息：', res)
									xBlufi.notifySendCustomData({
										customData: "11play1@"
									})
									vm.maskloading = false
									vm.deviceInfo()
								},
								fail(err) {
									uni.hideLoading()
									console.error('获取已连接蓝牙设备信息失败：', err)
								}
							})
						} else {
							console.log('手机未连接网络')
						}
					}
				})
			},
			funListenDeviceMsgEvent: function(options) {
				switch (options.type) {
					case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS:
						if (options.result) {
							let devicesarr = options.data
							devicesarr.forEach(device => {
								this.devicesList.push(device)
								let uniqueDevicesList = Array.from(new Set(this.devicesList))
								// 将去重后的数组重新赋值给 this.devicesList
								this.devicesList = uniqueDevicesList
							})
						}
						break;
					case xBlufi.XBLUFI_TYPE.TYPE_CONNECTED:
						console.log("连接回调：" + JSON.stringify(options))
						if (options.result) {
							xBlufi.notifyInitBleEsp32({
								deviceId: options.data.deviceId
							})
							let systemInfo = uni.getSystemInfoSync()
							if (systemInfo.platform === 'android') {
								// 当前设备是 Android  
							} else if (systemInfo.platform === 'ios') {
								// 当前设备是 iOS  
							}
						}
						if (options.result == false) {
							this.carstause = false
							if (this.maskepage == 4) {
								this.buletxt = '设备连接失败'
								setTimeout(() => {
									this.maskepage = 5
								}, 800)
							}
						}
						break;
					case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
						if (options.data) {
							this.carstause = true
							if (this.maskloading && this.maskepage == 4) {
								if (this.buleclose == false && this.buleopen == false && this.bulerebort == false && this.bulering == false) {
									if (this.buletxt == '蓝牙连接中') {
										this.buletxt = '蓝牙连接成功！'
									}
								}
								if (this.buleclose) {
									this.buleclose = false
									this.close()
								}
								if (this.buleopen) {
									this.buleopen = false
									this.open()
								}
								if (this.bulerebort) {
									this.buleopen = false
									this.reboot()
								}
								if (this.bulering) {
									this.bulering = false
									this.ring()
								}
							}
						} else {
							this.carstause = false
							if (this.maskepage == 4) {
								this.buletxt = '设备连接失败'
								setTimeout(() => {
									this.maskepage = 5
								}, 800)
							}
						}
						console.log("1收到设备发来的自定义数据结果：", options.data)
						break;
					case xBlufi.XBLUFI_TYPE.TYPE_STATUS_CONNECTED: {
						console.log('状态', options.result)
						if (options.result == false) {
							this.carstause = false
							if (this.maskepage == 4) {
								this.buletxt = '设备连接失败'
								setTimeout(() => {
									this.maskepage = 5
								}, 800)
							}
						}
					}
					break;
					case xBlufi.XBLUFI_TYPE.TYPE_GET_DEVICE_LISTS_STOP:
						if (options.result) {
							let uniqueDevicesList = Array.from(new Set(this.devicesList))
							// 过滤出名称字段的前五个字母为 "CTPOW" 的项
							let filteredDevices = uniqueDevicesList.filter(device => device.name.substring(0,4) === "BBLE")
							// 将过滤后的数组重新赋值给 this.devicesList
							this.devicesList = filteredDevices
						}
						this.searching = false
						break
				}
			},
			btnyc() {
				this.titleflag = false
			},
			// 解析自定义数据
			//4、建立连接
			createBLEConnection(e) {
				console.log('调用了')
				xBlufi.notifyStartDiscoverBle({
					'isStart': false
				});
				console.log(e, '蓝牙信息')
				const deviceId = e.deviceId
				let name = e.name
				console.log('点击了，蓝牙准备连接的deviceId:' + e.deviceId)
				xBlufi.notifyConnectBle({
					isStart: true,
					deviceId: e.deviceId,
					name
				})
			},

			funListenDeviceMsgEvents: function(options) {
				let that = this
				switch (options.type) {
					case xBlufi.XBLUFI_TYPE.TYPE_STATUS_CONNECTED: {
						console.log('状态', options.result)
						if (options.result == false) {
							this.carstause = false
							uni.showToast({
								title: '设备断开链接，请重新点击蓝牙链接',
								icon: 'none'
							})
							uni.hideLoading()
						}
					}
					break;

					case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_MY_DATA:
						this.loadPercent = options.data
						this.loadText = '文件读取中'
						console.log("文件读取中", options.data)
						break;
					case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
						console.log("1收到设备发来的自定义数据结果：", options.data)
						if (options.data) {
							this.carstause = true
						}
						break
					case xBlufi.XBLUFI_TYPE.TYPE_INIT_ESP32_RESULT:
						uni.hideLoading()
						if (options.result) {
							console.log('初始化成功')
						} else {
							console.log('初始化失败')
						}
						break
				}
			},
			// 点击隐藏没有设备提示
			btnhd() {
				this.tishiflag = false
			},
			status() {
				if (this.deviceInfos.status == 0) {
					return '仓库中'
				} else if (this.deviceInfos.status == 1) {
					return '待租'
				} else if (this.deviceInfos.status == 2) {
					return '预约中'
				} else if (this.deviceInfos.status == 3) {
					return '骑行中'
				} else if (this.deviceInfos.status == 4) {
					return '临时锁车中'
				} else if (this.deviceInfos.status == 6) {
					return '调度中'
				} else if (this.deviceInfos.status == 8) {
					return '下线'
				}
			},
			deviceInfo() {
				this.markers = []
				this.$u.get(`/bst/device?id=${this.sn}`).then((res) => {
					console.log(res, 'rererer')
					if (res.code === 200) {
						this.deviceInfos = res.data
						if(res.data.isSound == 0){
							this.jytxt = '关'
						}else{
							this.jytxt = '开'
						}
						if (this.getnum == 0) {
							this.getArea()
						}
						this.getnum = 1
						this.vehicleNum = res.vehicleNum
						this.mac = res.data.mac
						this.getModelList()
						this.latitude = this.deviceInfos.latitude
						this.longitude = this.deviceInfos.longitude
						if (this.deviceInfos.status == 0) {
							this.markers.push({
								id: parseFloat(this.deviceInfos.sn),
								latitude: this.deviceInfos.latitude,
								longitude: this.deviceInfos.longitude,
								// title: item.deviceName,
								width: 40,
								height: 47,
								// iconPath: 'https://lxnapi.ccttiot.com/bike/img/static/u6jBvj7S50FPgsHaHXai',
								iconPath: this.deviceInfos.onlineStatus == 0 ?
									'https://lxnapi.ccttiot.com/bike/img/static/uQRng4QNKA38Amk8Wgt5' :
									'https://lxnapi.ccttiot.com/bike/img/static/uocjFo8Ar2BJVpzC2G2f',
								callout: {
									content: this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容
									color: '#ffffff', // 修改为文字颜色
									fontSize: 10, // 修改为文字大小
									borderRadius: 10, // 修改为气泡圆角大小
									bgColor: '#000000', // 修改为气泡背景颜色
									padding: 2, // 修改为气泡内边距
									display: 'ALWAYS', // 修改为气泡的显示策略
								}
							})
						} else if (this.deviceInfos.status == 1) {
							this.markers.push({
								id: parseFloat(this.deviceInfos.sn),
								latitude: this.deviceInfos.latitude,
								longitude: this.deviceInfos.longitude,
								// title: item.deviceName,
								width: 40,
								height: 47,
								iconPath: this.deviceInfos.onlineStatus == 0 ?
									'https://lxnapi.ccttiot.com/bike/img/static/uzhMeExOQJbMcZtrfGUV' :
									'https://lxnapi.ccttiot.com/bike/img/static/uheL17wVZn24BwCwEztT',
								callout: {
									content: this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容
									color: '#2679D1', // 修改为文字颜色
									fontSize: 10, // 修改为文字大小
									borderRadius: 10, // 修改为气泡圆角大小
									bgColor: '#D4ECFF', // 修改为气泡背景颜色
									padding: 2, // 修改为气泡内边距
									display: 'ALWAYS', // 修改为气泡的显示策略
								}
							})
						} else if (this.deviceInfos.status == 2) {
							this.markers.push({
								id: parseFloat(this.deviceInfos.sn),
								latitude: this.deviceInfos.latitude,
								longitude: this.deviceInfos.longitude,
								// title: item.deviceName,
								width: 40,
								height: 47,
								iconPath: this.deviceInfos.onlineStatus == 0 ?
									'https://lxnapi.ccttiot.com/bike/img/static/uR3DQEssiK62ovhh88y8' :
									'https://lxnapi.ccttiot.com/bike/img/static/u460R1NKWHEpHbt0U4H7',
								callout: {
									content: this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容
									color: '#2679D1', // 修改为文字颜色
									fontSize: 10, // 修改为文字大小
									borderRadius: 10, // 修改为气泡圆角大小
									bgColor: '#D4ECFF', // 修改为气泡背景颜色
									padding: 2, // 修改为气泡内边距
									display: 'ALWAYS', // 修改为气泡的显示策略
								}
							})
						} else if (this.deviceInfos.status == 3) {
							this.markers.push({
								id: parseFloat(this.deviceInfos.sn),
								latitude: this.deviceInfos.latitude,
								longitude: this.deviceInfos.longitude,
								// title: item.deviceName,
								width: 40,
								height: 47,
								iconPath:  this.deviceInfos.onlineStatus == 0 ?
									'https://lxnapi.ccttiot.com/bike/img/static/uG13E7BpUFF44wVYC9no' :
									'https://lxnapi.ccttiot.com/bike/img/static/uHQIdWCTmtUztl49wBKU',
								callout: {
									content: this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容
									color: '#2679D1', // 修改为文字颜色
									fontSize: 10, // 修改为文字大小
									borderRadius: 10, // 修改为气泡圆角大小
									bgColor: '#D4ECFF', // 修改为气泡背景颜色
									padding: 2, // 修改为气泡内边距
									display: 'ALWAYS', // 修改为气泡的显示策略
								}
							})
						} else if (this.deviceInfos.status == 4) {
							this.markers.push({
								id: parseFloat(this.deviceInfos.sn),
								latitude: this.deviceInfos.latitude,
								longitude: this.deviceInfos.longitude,
								// title: item.deviceName,
								width: 40,
								height: 47,
								// joinCluster: true,
								iconPath: this.deviceInfos.onlineStatus == 0 ?
									'https://lxnapi.ccttiot.com/bike/img/static/uRod2zf3t9dAOYafWoWt' :
									'https://lxnapi.ccttiot.com/bike/img/static/uZpXq3TBtM5gVgJJeImY',
								callout: {
									content: this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容
									color: '#2679D1', // 修改为文字颜色
									fontSize: 10, // 修改为文字大小
									borderRadius: 10, // 修改为气泡圆角大小
									bgColor: '#D4ECFF', // 修改为气泡背景颜色
									padding: 2, // 修改为气泡内边距
									display: 'ALWAYS', // 修改为气泡的显示策略
								}
							})
						} else if (this.deviceInfos.status == 6) {
							this.markers.push({
								id: parseFloat(this.deviceInfos.sn),
								latitude: this.deviceInfos.latitude,
								longitude: this.deviceInfos.longitude,
								// title: item.deviceName,
								width: 40,
								height: 47,
								iconPath: this.deviceInfos.onlineStatus == 0 ?
									'https://lxnapi.ccttiot.com/bike/img/static/uhZudZM3nEKj0tYKlho2' :
									'https://lxnapi.ccttiot.com/bike/img/static/ujur6TezvPf4buFAqPHo',
								callout: {
									content: '' + this.deviceInfos.remainingPower + '%',
									color: '#2679D1', // 修改为文字颜色
									fontSize: 10, // 修改为文字大小
									borderRadius: 10, // 修改为气泡圆角大小
									bgColor: '#D4ECFF', // 修改为气泡背景颜色
									padding: 2, // 修改为气泡内边距
									display: 'ALWAYS', // 修改为气泡的显示策略
								}
							})
						} else if (this.deviceInfos.status == 8) {
							this.markers.push({
								id: parseFloat(this.deviceInfos.sn),
								latitude: this.deviceInfos.latitude,
								longitude: this.deviceInfos.longitude,
								// title: item.deviceName,
								width: 40,
								height: 47,
								iconPath: this.deviceInfos.onlineStatus == 0 ?
									'https://lxnapi.ccttiot.com/bike/img/static/ucBKG3ebYRAToVweJihu' :
									'https://lxnapi.ccttiot.com/bike/img/static/uyK7Vg4Lu8xb3oNVuG2l',
								callout: {
									content: this.deviceInfos.remainingPower + '%', // 修改为你想要显示的文字内容
									color: '#ffffff', // 修改为文字颜色
									fontSize: 10, // 修改为文字大小
									borderRadius: 10, // 修改为气泡圆角大小
									bgColor: '#000000', // 修改为气泡背景颜色
									padding: 2, // 修改为气泡内边距
									display: 'ALWAYS', // 修改为气泡的显示策略
								}
							})
						}
						this.$forceUpdate()
					} else {
						uni.showToast({
							title: res.msg,
							icon: 'none',
							duration: 2000
						})
					}
				})
			},
			convertBoundaryToPolyline(boundary) {
				if (!boundary) return null
				const points = JSON.parse(boundary).map(coord => ({
					latitude: coord[1],
					longitude: coord[0]
				}))
				const polyline = {
					points: points,
					fillColor: "#55888840", //填充颜色
					strokeColor: "#22FF00", //描边颜色
					strokeWidth: 2, //描边宽度
					zIndex: 1, //层级
				}
				return polyline
			},
			convertBoundaryToPolylines(boundaries, num) {
				if (num == 1) {
					console.log('判断')
					return boundaries.map(boundary => {
						if (!boundary) return null
						let coords
						try {
							coords = JSON.parse(boundary)
						} catch (error) {
							console.error("Error parsing boundary JSON:", error)
							return null
						}
						if (!Array.isArray(coords)) {
							console.error("Parsed boundary is not an array:", coords)
							return null
						}
						console.log(coords,'1111111');
						const points = coords.map(coord => ({
							latitude: coord[1],
							longitude: coord[0]
						}))
						return {
							points: points,
							fillColor: "#3A7EDB40", //填充颜色
							strokeColor: "#3A7EDB", //描边颜色
							strokeWidth: 2, //描边宽度
							zIndex: 1, //层级

						};
					}).filter(polyline => polyline !== null) // 过滤掉无效的折线数据
				} else if (num == 2) {
					return boundaries.map(boundary => {
						if (!boundary) return null
						let coords
						try {
							coords = JSON.parse(boundary)
						} catch (error) {
							console.error("Error parsing boundary JSON:", error)
							return null;
						}
						if (!Array.isArray(coords)) {
							console.error("Parsed boundary is not an array:", coords)
							return null;
						}
						console.log(coords,'2222222222222');
						const points = coords.map(coord => ({
							latitude: coord[1],
							longitude: coord[0]
						}))
						return {
							points: points,
							fillColor: "#FFF5D640", //填充颜色
							strokeColor: "#FFC107", //描边颜色
							strokeWidth: 2, //描边宽度
							zIndex: 1, //层级
						}
					}).filter(polyline => polyline !== null) // 过滤掉无效的折线数据
				} else if (num == 3) {
					return boundaries.map(boundary => {
						if (!boundary) return null
						let coords
						try {
							coords = JSON.parse(boundary)
						} catch (error) {
							console.error("Error parsing boundary JSON:", error)
							return null
						}
						if (!Array.isArray(coords)) {
							console.error("Parsed boundary is not an array:", coords)
							return null
						}
						console.log(coords,'333333333333');
						const points = coords.map(coord => ({
							latitude: coord[1],
							longitude: coord[0]
						}));
						return {
							points: points,
							fillColor: "#FFD1CF40", //填充颜色
							strokeColor: "#FF473E", //描边颜色
							strokeWidth: 2, //描边宽度
							zIndex: 1, //层级

						};
					}).filter(polyline => polyline !== null) // 过滤掉无效的折线数据
				}
			},
			toggleIconAndCallout() {
				this.showIconAndCallout = !this.showIconAndCallout
				if (this.showIconAndCallout) {
					const newMarkers = []
					this.parkingList.forEach(item => {
						newMarkers.push({
							id: parseFloat(item.id),
							latitude: parseFloat(item.latitude),
							longitude: parseFloat(item.longitude),
							width: 20,
							height: 28.95,
							iconPath: item.type == 1 ?
								'https://lxnapi.ccttiot.com/bike/img/static/up2xXqAgwCX5iER600k3' : item
								.type == 2 ?
								'https://lxnapi.ccttiot.com/bike/img/static/u53BAQcFIX3vxsCzEZ7t' :
								' https://lxnapi.ccttiot.com/bike/img/static/uDNY5Q4zOiZTCBTA2Jdq',
							callout: {
								content: item.name,
								color: '#ffffff',
								fontSize: 14,
								borderRadius: 10,
								bgColor: item.type == 1 ? '#3A7EDB' : item.type == 2 ? '#FFC107' : '#FF473E',
								padding: 6,
								display: 'ALWAYS'
							},
							isCalloutVisible: true // 添加标记
						})
					})
					this.$set(this, 'markers', [...this.markers, ...newMarkers])
				} else {
					// 过滤掉所有气泡显示的标记
					this.$set(this, 'markers', this.markers.filter(marker => !marker.isCalloutVisible))
				}
			},
			getParking() {
				// 发送请求获取数据
				let data = {
					areaId: this.deviceInfos.areaId,
					type:'' 
				}
				this.$u.get(`/bst/areaSub/listByAreaId`,data).then((res) => {
					if (res.code === 200) {
						// 处理接口返回的数据
						const type1Data = []
						const type2Data = []
						const type3Data = []
						res.data.forEach(row => {
							if (row.type == 1) {
								type1Data.push(row)
							} else if (row.type == 2) {
								type2Data.push(row)
							} else if (row.type == 3) {
								type3Data.push(row)
							}
						})
						const validBoundaries = type1Data.map(row => row.boundaryStr).filter(boundary =>
							typeof boundary === 'string' && boundary.trim() !== '')
						const polylines = this.convertBoundaryToPolylines(validBoundaries, 1)
						const validBoundaries1 = type2Data.map(row => row.boundaryStr).filter(boundary =>
							typeof boundary === 'string' && boundary.trim() !== '')
						const polylines1 = this.convertBoundaryToPolylines(validBoundaries1, 2)
						const validBoundaries2 = type3Data.map(row => row.boundaryStr).filter(boundary =>
							typeof boundary === 'string' && boundary.trim() !== '')
						const polylines2 = this.convertBoundaryToPolylines(validBoundaries2, 3)
						// 将处理后的数据添加到 this.polyline 中
						this.polyline = this.polyline.concat(polylines2)
						this.polyline = this.polyline.concat(polylines1)
						this.polyline = this.polyline.concat(polylines)
						this.parkingList = res.data
						// console.log(this.polyline);

					}
				}).catch(error => {
					console.error("Error fetching parking data:", error)
				})
			},
			getArea() {
				// 发送请求获取数据
				let id = this.deviceInfos.areaId
				this.$u.get(`/bst/area/${id}`).then((res) => {
					if (res.code === 200) {
						// 处理接口返回的数据，将边界数据转换为地图组件需要的折线结构
						const polylines = this.convertBoundaryToPolyline(res.data.boundaryStr)
						// 更新折线数据
						this.polyline.push(polylines)
						console.log(this.polyline);
						this.getParking()
					}
				}).catch(error => {
					console.error("Error fetching area data:", error)
				})
			},
		}
	}
</script>
<style lang="scss">
	page {
		overflow-x: hidden;
		background-color: #F3F3F3;
	}
	.page {
		padding-bottom: 400rpx;
		width: 750rpx;
		.tip_box {
			position: fixed;
			left: 72rpx;
			top: 628rpx;
			width: 610rpx;
			background: #FFFFFF;
			border-radius: 30rpx 30rpx 30rpx 30rpx;
			z-index: 110;
			padding-bottom: 100rpx;
			.saveQr{
				margin: 0 auto;
				margin-top: 30rpx;
				display: flex;
				align-items: center;
				justify-content: center;
				width: 502rpx;
				height: 68rpx;
				background: #4C97E7;
				border-radius: 10rpx 10rpx 10rpx 10rpx;
				font-weight: 500;
				font-size: 36rpx;
				color: #FFFFFF;
			}
			.top {
				padding: 52rpx 38rpx 42rpx 36rpx;

				.ipt_box {
					margin-top: 22rpx;
					display: flex;
					flex-wrap: nowrap;
					align-items: center;

					.text {
						width: 350rpx;
						font-weight: 400;
						font-size: 32rpx;
						color: #3D3D3D;
					}

					.ipt {
						padding: 10rpx 18rpx;
						display: flex;
						align-items: center;
						justify-content: space-between;
						margin-left: 26rpx;
						width: 420rpx;
						height: 64rpx;
						border-radius: 0rpx 0rpx 0rpx 0rpx;
						border: 2rpx solid #979797;

						.input {
							width: 80%;
						}
					}
				}

				.tip {
					width: 100%;
					text-align: center;
					font-weight: 700;
					font-size: 32rpx;
					color: #3D3D3D;
				}

				.txt {
					margin-top: 32rpx;
					width: 100%;
					text-align: center;
					font-weight: 500;
					font-size: 32rpx;
					color: #3D3D3D;
				}
			}

			.bots {
				position: absolute;

				width: 610rpx;
				// border-top: 2rpx solid #D8D8D8;
				display: flex;
				flex-wrap: nowrap;
				// height: 100%;
				bottom: -20rpx;

				.bot_left {
					border-radius: 0rpx 0rpx 0rpx 30rpx;
					width: 50%;
					height: 86rpx;
					display: flex;
					align-items: center;
					justify-content: center;
					font-weight: 500;
					font-size: 32rpx;
					color: #3D3D3D;
					background: #EEEEEE;
				}

				.bot_right {
					border-radius: 0rpx 0rpx 30rpx 0rpx;
					width: 50%;
					height: 86rpx;
					background: #4C97E7;
					display: flex;
					align-items: center;
					justify-content: center;
					color: #FFFFFF;
					// border-left: 2rpx solid #D8D8D8;
					font-weight: 500;
					font-size: 32rpx;
					// color: #4C97E7;

				}

			}
		}


		.maskloadpage {

			position: fixed;
			padding: 46rpx;
			bottom: 0;
			width: 752rpx;
			height: 780rpx;
			background: #FFFFFF;
			border-radius: 40rpx 40rpx 0rpx 0rpx;
			z-index: 101;

			.maskpage0 {
				.top_info {
					width: 100%;
					display: flex;
					align-items: center;
					justify-content: center;

					image {
						margin-right: 16rpx;
						width: 50rpx;
						height: 50rpx;
					}

					.masktxt {
						font-weight: 500;
						font-size: 44rpx;
						color: #3D3D3D;
					}
				}

				.masktips {
					margin-top: 20rpx;
					width: 100%;
					text-align: center;
					font-weight: 400;
					font-size: 32rpx;
					color: #3D3D3D;
				}

				.tipsimg {
					margin-top: 60rpx;
					display: flex;
					// align-items: center;
					justify-content: center;
					width: 100%;

					image {
						width: 554rpx;
						height: 262rpx;

					}
				}
			}

			.maskpage1 {
				.top_info {
					width: 100%;
					display: flex;
					align-items: center;
					justify-content: center;

					image {
						margin-right: 16rpx;
						width: 50rpx;
						height: 50rpx;
					}

					.masktxt {
						font-weight: 500;
						font-size: 44rpx;
						color: #3D3D3D;
					}
				}

				.masktips {
					margin-top: 20rpx;
					width: 100%;
					text-align: center;
					font-weight: 400;
					font-size: 32rpx;
					color: #3D3D3D;
				}

				.tipsimg {
					margin-top: 60rpx;
					display: flex;
					// align-items: center;
					justify-content: center;
					width: 100%;

					image {
						width: 554rpx;
						height: 262rpx;

					}
				}

				.btn_box {
					width: 750rpx;
					padding: 0 36rpx;
					position: absolute;
					bottom: 60rpx;
					left: 0;
					display: flex;
					justify-content: space-between;
					align-items: center;

					.btn3 {
						// margin-right: 16rpx;
						display: flex;
						align-items: center;
						justify-content: center;
						width: 300rpx;
						height: 90rpx;
						background: #4C97E7;
						border-radius: 45rpx 45rpx 45rpx 45rpx;

						font-weight: 500;
						font-size: 40rpx;
						color: #FFFFFF;
					}

					.btn4 {
						display: flex;
						align-items: center;
						justify-content: center;
						width: 300rpx;
						height: 90rpx;
						border-radius: 45rpx 45rpx 45rpx 45rpx;
						border: 2rpx solid #808080;

						font-weight: 500;
						font-size: 40rpx;
						color: #808080;
					}
				}
			}

		}


		.map {
			position: relative;
			width: 750rpx;
			height: 752rpx;
			.track {
				position: absolute;
				display: flex;
				align-items: center;
				justify-content: center;
				left: 30rpx;
				bottom: 40rpx;
				// background-color: #fff;
				border-radius: 50%;
				width: 82rpx;
				height: 82rpx;
				// z-index: 1;
				.img {
					width: 82rpx;
					height: 82rpx;
				}
			}
			.park {
				position: absolute;
				display: flex;
				align-items: center;
				justify-content: center;
				right: 30rpx;
				bottom: 40rpx;
				// background-color: #fff;
				border-radius: 50%;
				width: 82rpx;
				height: 82rpx;
				// z-index: 1;

				.img {
					width: 82rpx;
					height: 82rpx;
				}
			}
		}

		// .tip_box {
		// 	position: fixed;
		// 	left: 72rpx;
		// 	top: 628rpx;
		// 	width: 610rpx;
		// 	// height: 282rpx;
		// 	background: #FFFFFF;
		// 	border-radius: 30rpx 30rpx 30rpx 30rpx;
		// 	z-index: 110;
		// 	padding-bottom: 100rpx;

		// 	.top {
		// 		padding: 52rpx 38rpx 42rpx 36rpx;

		// 		.ipt_box {
		// 			margin-top: 22rpx;
		// 			display: flex;
		// 			flex-wrap: nowrap;
		// 			align-items: center;

		// 			.text {
		// 				width: 96rpx;
		// 				font-weight: 400;
		// 				font-size: 32rpx;
		// 				color: #3D3D3D;
		// 			}

		// 			.ipt {
		// 				padding: 10rpx 18rpx;
		// 				display: flex;
		// 				align-items: center;
		// 				justify-content: space-between;
		// 				margin-left: 26rpx;
		// 				width: 420rpx;
		// 				height: 64rpx;
		// 				border-radius: 0rpx 0rpx 0rpx 0rpx;
		// 				border: 2rpx solid #979797;

		// 				.input {
		// 					width: 80%;
		// 				}
		// 			}
		// 		}

		// 		.tip {
		// 			width: 100%;
		// 			text-align: center;
		// 			font-weight: 700;
		// 			font-size: 32rpx;
		// 			color: #3D3D3D;
		// 		}

		// 		.txt {
		// 			margin-top: 32rpx;
		// 			width: 100%;
		// 			text-align: center;
		// 			font-weight: 500;
		// 			font-size: 32rpx;
		// 			color: #3D3D3D;
		// 		}
		// 	}

		// 	.bot {
		// 		position: absolute;

		// 		width: 610rpx;
		// 		// border-top: 2rpx solid #D8D8D8;
		// 		display: flex;
		// 		flex-wrap: nowrap;
		// 		// height: 100%;
		// 		bottom: -20rpx;

		// 		.bot_left {
		// 			border-radius: 0rpx 0rpx 0rpx 30rpx;
		// 			width: 50%;
		// 			height: 86rpx;
		// 			display: flex;
		// 			align-items: center;
		// 			justify-content: center;
		// 			font-weight: 500;
		// 			font-size: 32rpx;
		// 			color: #3D3D3D;
		// 			background: #EEEEEE;
		// 		}

		// 		.bot_right {
		// 			border-radius: 0rpx 0rpx 30rpx 0rpx;
		// 			width: 50%;
		// 			height: 86rpx;
		// 			background: #4C97E7;
		// 			display: flex;
		// 			align-items: center;
		// 			justify-content: center;
		// 			color: #FFFFFF;
		// 			// border-left: 2rpx solid #D8D8D8;
		// 			font-weight: 500;
		// 			font-size: 32rpx;
		// 			// color: #4C97E7;

		// 		}

		// 	}
		// }



		.bot_btn {
			position: fixed;
			bottom: 0;
			display: flex;
			flex-wrap: wrap;
			padding: 40rpx 18rpx;
			width: 750rpx;
			// height: 230rpx;
			background: #fff;
			// background: linear-gradient( 180deg, #FFFFFF 0%, rgba(255,255,255,0) 100%);
			box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
			border-radius: 0rpx 0rpx 0rpx 0rpx;

			.btn:nth-child(4n) {
				margin-right: 0;
			}

			.btn {
				margin-top: 10rpx;
				margin-right: 18rpx;
				display: flex;
				align-items: center;
				justify-content: center;
				width: 164rpx;
				height: 66rpx;
				background: #E2F2FF;
				border-radius: 0rpx 0rpx 0rpx 0rpx;
				border: 2rpx solid #4C97E7;
				font-weight: 400;
				font-size: 28rpx;
				color: #3D3D3D;
			}
		}

		.info_card {
			background: #FFFFFF;

			.info_tit {
				display: flex;
				flex-wrap: nowrap;
				padding: 22rpx 28rpx;
				font-weight: 600;
				font-size: 32rpx;
				color: #3D3D3D;

				.money {
					margin-left: auto;
					font-weight: 500;
					font-size: 32rpx;
					color: #4C97E7;
				}
			}

			.lines {
				width: 750rpx;
				// height: 2rpx;
				border-bottom: 2rpx solid #E7E7E7;
			}

			.cont {
				padding: 26rpx 28rpx;

				.info_li {
					width: 98%;
					display: flex;
					flex-wrap: nowrap;
					font-weight: 400;
					font-size: 28rpx;
					color: #808080;

					span {
						color: #000;
					}

					white-space: nowrap;
					/* 禁止换行 */
					overflow: hidden;
					/* 超出部分隐藏 */
					text-overflow: ellipsis;
					/* 显示省略号 */
					line-height: 48rpx;

					.half_infoli {
						display: flex;
						flex-wrap: nowrap;
						width: 50%;
						font-weight: 400;
						font-size: 28rpx;
						color: #808080;
						span {
							color: #000;
						}

						.input {
							width: 30%;
						}
					}
				}
			}
		}


	}
</style>