From 7a3dddc6efa48810549e4c43e53216a73cbc7e5c Mon Sep 17 00:00:00 2001
From: Sliverber <2622874537@qq.com>
Date: Wed, 17 Jul 2024 18:02:42 +0800
Subject: [PATCH] 111

---
 page_user/changeCar.vue  | 1810 ++++++++++++++++++++++++++++++++++----
 page_user/vadio_back.vue |    2 +-
 pages/index/index.vue    |   25 +-
 3 files changed, 1646 insertions(+), 191 deletions(-)

diff --git a/page_user/changeCar.vue b/page_user/changeCar.vue
index c84b091..e80d35a 100644
--- a/page_user/changeCar.vue
+++ b/page_user/changeCar.vue
@@ -2,122 +2,168 @@
 	<view class="page">
 		<u-navbar title="换车骑行" :border-bottom="false" :background="bgc" title-color='#000' title-size='36' height='45'
 			back-icon-color='#000'></u-navbar>
-			<view class="cont_box">
-				<view class="tit">
-					<image src="https://lxnapi.ccttiot.com/bike/img/static/uByIrgaV23PDGZWReKHW" mode=""></image>
-					请选择换车原因
-				</view>
-				<!-- https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau -->
-				<view class="choose_li">
-					<view class="li_cont">
-						<view class="img_box">
-							<image src="https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau" mode=""></image>
-						</view>
-						电量不足
-					</view>
-					<view class="li_cont">
-						<view class="img_box">
-							<image src="https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau" mode=""></image>
-						</view>
-						车辆损坏
+		<view class="cont_box">
+			<view class="tit">
+				<image src="https://lxnapi.ccttiot.com/bike/img/static/uByIrgaV23PDGZWReKHW" mode=""></image>
+				请选择换车原因
+			</view>
+			<!-- https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau -->
+			<view class="choose_li">
+				<view class="li_cont" @click="checkIdx=1">
+					<view class="img_box">
+						<image src="https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau" mode=""
+							v-if="checkIdx==1"></image>
 					</view>
+					电量不足
 				</view>
-				<view class="tit" style="margin-top: 20rpx;">
-				
-					SN:2315721
+				<view class="li_cont" @click="checkIdx=2">
+					<view class="img_box">
+						<image src="https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau" mode=""
+							v-if="checkIdx==2"></image>
+					</view>
+					车辆损坏
 				</view>
 			</view>
-			<view class="cont_box">
-				<view class="tit">
-					<image src="https://lxnapi.ccttiot.com/bike/img/static/uByIrgaV23PDGZWReKHW" mode=""></image>
-					请选择车辆故障部位
-				</view>
-				<!-- https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau -->
-				<view class="txt">
-					车头故障
-				</view>
-				<view class="checkbox">
-					<view v-for="(item, index) in cbgz" :key="index" class="check_li" :class="item.checked === true ? 'act1' : ''" @click="toggleCheckbox(index)">
-					  {{ item.dictLabel }}
-					  <image src="https://lxnapi.ccttiot.com/bike/img/static/ufYwbVclwhX64u4eGu6u" mode="" v-if="item.checked === true "></image>
-					</view>
-				</view>
-				<view class="txt">
-					车身故障
-				</view>
-				<view class="checkbox">
-					<view v-for="(item, index) in csgz" :key="index" class="check_li" :class="item.checked === true ? 'act1' : ''" @click="csCheckbox(index)">
-					  {{ item.dictLabel }}
-					  <image src="https://lxnapi.ccttiot.com/bike/img/static/ufYwbVclwhX64u4eGu6u" mode="" v-if="item.checked === true "></image>
-					</view>
-				
-				</view>
-				<view class="txt">
-					特殊故障
-				</view>
-				<view class="checkbox">
-					<view v-for="(item, index) in tsgz" :key="index" class="check_li" :class="item.checked === true ? 'act1' : ''" @click="tsCheckbox(index)">
-					  {{ item.dictLabel }}
-					  <image src="https://lxnapi.ccttiot.com/bike/img/static/ufYwbVclwhX64u4eGu6u" mode="" v-if="item.checked === true "></image>
-					</view>
-				</view>
-				<view class="input-container">
-					<view class="placeholder" v-if="!textValue">如选项未涵盖,请输入故障问题</view>
-					<textarea class="custom-textarea" v-model="textValue" @focus="hidePlaceholder" style="border: none;"
-						@input="updateWordCount" @blur="showPlaceholder"></textarea>
-					<text class="word-count">{{ currentCount }}/500</text>
+			<view class="tit" style="margin-top: 20rpx;">
+
+				SN:{{orderinfo.sn}}
+			</view>
+		</view>
+		<view class="cont_box" v-show="checkIdx==2">
+			<view class="tit">
+				<image src="https://lxnapi.ccttiot.com/bike/img/static/uByIrgaV23PDGZWReKHW" mode=""></image>
+				请选择车辆故障部位
+			</view>
+			<!-- https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau -->
+			<view class="txt">
+				车头故障
+			</view>
+			<view class="checkbox">
+				<view v-for="(item, index) in cbgz" :key="index" class="check_li"
+					:class="item.checked === true ? 'act1' : ''" @click="toggleCheckbox(index)">
+					{{ item.dictLabel }}
+					<image src="https://lxnapi.ccttiot.com/bike/img/static/ufYwbVclwhX64u4eGu6u" mode=""
+						v-if="item.checked === true "></image>
 				</view>
 			</view>
-			<view class="cont_box">
-				<view class="tit">
-					<image src="https://lxnapi.ccttiot.com/bike/img/static/uByIrgaV23PDGZWReKHW" mode=""></image>
-					请对故障部位拍照并环绕车身进行录像
-				</view>
-			
-				<view class="icon">
-				
-					<view class="imgbox" v-for="(item,index) in imglist " :key="index">
-						<image :src="item" mode=""></image>
-					</view>
-					<view class="imgbox" @click="btn">
-						<image src="https://api.ccttiot.com/smartmeter/img/static/uY8CPw9YE6JxPzcHUaqf" mode=""></image>
-					</view>
-				
-				</view>
-				<!-- https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau -->
-				
+			<view class="txt">
+				车身故障
 			</view>
-			<view class="tits">
-				点击扫码或输入车辆编号
-			</view>
-			<view class="iptbox">
-				<view class="qrcode" @click="qrcode()">
-					<image src="https://api.ccttiot.com/smartmeter/img/static/uy7BNwAMIKwvstqFnRhs" mode=""></image>
+			<view class="checkbox">
+				<view v-for="(item, index) in csgz" :key="index" class="check_li"
+					:class="item.checked === true ? 'act1' : ''" @click="csCheckbox(index)">
+					{{ item.dictLabel }}
+					<image src="https://lxnapi.ccttiot.com/bike/img/static/ufYwbVclwhX64u4eGu6u" mode=""
+						v-if="item.checked === true "></image>
 				</view>
-				<input type="text" class="ips" v-model="sn" placeholder="请扫描设备上的二维码" style="margin-left: 32rpx;"
-					placeholder-class="my-placeholder" />
-			
+
 			</view>
-			
-			<view class="conts_box">
+			<view class="txt">
+				特殊故障
+			</view>
+			<view class="checkbox">
+				<view v-for="(item, index) in tsgz" :key="index" class="check_li"
+					:class="item.checked === true ? 'act1' : ''" @click="tsCheckbox(index)">
+					{{ item.dictLabel }}
+					<image src="https://lxnapi.ccttiot.com/bike/img/static/ufYwbVclwhX64u4eGu6u" mode=""
+						v-if="item.checked === true "></image>
+				</view>
+			</view>
+			<view class="input-container">
+				<view class="placeholder" v-if="!textValue">如选项未涵盖,请输入故障问题</view>
+				<textarea class="custom-textarea" v-model="textValue" @focus="hidePlaceholder" style="border: none;"
+					@input="updateWordCount" @blur="showPlaceholder"></textarea>
+				<text class="word-count">{{ currentCount }}/500</text>
+			</view>
+		</view>
+		<view class="cont_box" v-if="checkIdx==2&&areainfo.returnVerify==0">
+			<view class="tit">
+				<image src="https://lxnapi.ccttiot.com/bike/img/static/uByIrgaV23PDGZWReKHW" mode=""></image>
+				请对故障部位拍照
+			</view>
+
+			<view class="icon">
+
+				<view class="imgbox" v-for="(item,index) in imglist " :key="index">
+					<image :src="item" mode=""></image>
+				</view>
+				<view class="imgbox" @click="btn">
+					<image src="https://api.ccttiot.com/smartmeter/img/static/uY8CPw9YE6JxPzcHUaqf" mode=""></image>
+				</view>
+
+			</view>
+			<!-- https://lxnapi.ccttiot.com/bike/img/static/uZQYJi6D7tPy4CszHtau -->
+
+		</view>
+		<view class="cont" v-if="areainfo.returnVerify==1">
+			<view class="tip_txt" style="font-weight: 500;font-size: 32rpx;color: #3D3D3D;">
+				保持车辆录像的完整清晰,不要随意拍摄,确保视频中车辆出境,并且出现车牌号
+			</view>
+			<view class="vadio_png1" @click="recordVideo">
+				<image class="backimg" src="https://lxnapi.ccttiot.com/bike/img/static/uEP0UPJw6a1WuxA7ZlMo" mode=""
+					v-if="videoUrl==''">
+					<image class="tip_img" src="https://lxnapi.ccttiot.com/bike/img/static/uXFG7Vee8MWx5y7pha2U"
+						mode=""></image>
+				</image>
+				<video class="vad" :src="videoUrl" controls="controls" style="width: 100%;" v-if="videoUrl!=''"></video>
+				<view class="glass" v-if="videoUrl!=''"></view>
+				<image class="tip_img" src="https://lxnapi.ccttiot.com/bike/img/static/uXFG7Vee8MWx5y7pha2U" mode=""
+					v-if="videoUrl!=''"></image>
+			</view>
+		</view>
+		<view class="tits">
+			点击扫码或输入车辆编号
+		</view>
+		<view class="iptbox">
+			<view class="qrcode" @click="qrcode()">
+				<image src="https://api.ccttiot.com/smartmeter/img/static/uy7BNwAMIKwvstqFnRhs" mode=""></image>
+			</view>
+			<input type="text" class="ips" v-model="sncode" placeholder="请扫描设备上的二维码" style="margin-left: 32rpx;"
+				placeholder-class="my-placeholder" />
+
+		</view>
+
+		<view class="conts_box" v-if="deviceinfo.sn">
+			<view class="cont_li">
 				<view class="left">
 					<view class="km">
-						可继续行驶{{OrderdeviceInfos.remainingMileage}}公里
+						可继续行驶{{deviceinfo.remainingMileage}}公里
 					</view>
 					<view class="speed">
-						<view class="speeds" :style="{ width: OrderdeviceInfos.remainingPower + '%' }">
-			
+						<view class="speeds" :style="{ width: deviceinfo.remainingPower + '%' }">
+
 						</view>
 					</view>
 					<view class="NO">
-						NO.{{OrderdeviceInfos.sn}}
+						NO.{{deviceinfo.sn}}
 					</view>
 				</view>
 				<view class="right">
 					<image src="https://lxnapi.ccttiot.com/bike/img/static/uqKmFMF9YHTX8lAQARSd" mode=""></image>
 				</view>
 			</view>
-			<view class="conts_box">
+			<view class="cont_li" style="margin-top: 10rpx;">
+				<view class="left" style="font-size: 32rpx;font-weight: 400;">
+					已骑行
+				</view>
+				<view class="right" style="font-size: 32rpx;font-weight: 400;">
+					{{timeString}}
+				</view>
+			</view>
+			<view class="cont_li" style="margin-top: 10rpx;">
+				<view class="left" style="font-size: 32rpx;font-weight: 400;">
+					预估金额
+				</view>
+				<view class="right" style="font-size: 32rpx;font-weight: 400;">
+					{{money}}元
+				</view>
+			</view>
+			<view class="txtss">
+				扫码开锁后将自动合并订单,骑行时间将继续计时
+			</view>
+		</view>
+
+		<!-- <view class="conts_box">
 				<view class="left">
 					已骑行
 				</view>
@@ -132,49 +178,1125 @@
 				<view class="right">
 					{{money}}元
 				</view>
+			</view> -->
+		<view class="btns" @click="subs(0)">
+			提交
+		</view>
+		<view class="maskloadpage" v-if="maskloading">
+			<view class="maskpage0" v-if="maskepage==0">
+				<view class="top_info">
+					<image :src="loadimg" mode=""></image>
+					<view class="masktxt">
+						{{toploadtxt}}
+					</view>
+				</view>
+				<view class="masktips">
+					{{tiptxt}}
+				</view>
+				<view class="tipsimg">
+					<image src="https://lxnapi.ccttiot.com/bike/img/static/ugvqmfB3QYujZ6SnfTia" mode=""></image>
+				</view>
 			</view>
+			<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="masktips" @click="totxtpage()"
+					style="width: 100%;color: #4C97E7;text-decoration-line: underline;margin-top: 0; font-size: 28rpx;">
+					点击查看教程
+				</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="subs(1)">
+						重新尝试
+					</view>
+				</view>
+			</view>
+		</view>
 	</view>
 </template>
 
 <script>
+	const app = getApp();
+	var xBlufi = require("@/utils/blufi/xBlufi.js");
+	let _this = null;
 	export default {
 		data() {
 			return {
 				bgc: {
 					backgroundColor: "#fff",
 				},
-				cbgz: [
-				],
-				csgz: [
-				],
+				cbgz: [],
+				csgz: [],
 				tsgz: [
-					
+
 				],
 				textValue: '',
 				currentCount: 0,
 				imglist: [],
 				token: '',
-				sn:'',
-				upurl:''
-				
+				sn: '',
+				upurl: '',
+				checkIdx: 1,
+				maskloading: false,
+				maskepage: 0,
+				sn: 0,
+				mac: 0,
+				orderinfo: {},
+				sncode: '',
+				money: '',
+				timer: null,
+				timeString: '',
+				deviceinfo: {},
+				issend: false,
+				isback: false,
+				isopen: false,
+				upvideo: 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: '',
+				gps: {},
+				areainfo: {},
+				areaId: '',
+				videoUrl: ''
 			}
 		},
 		onLoad(e) {
 
-		this.getlist()
+			this.getlist()
+
+		},
+		watch: {
+			sncode(newValue, oldValue) {
+				if (newValue && newValue.length === 7) {
+					this.getdevice();
+				}
+			}
+
+
+		},
+
+		onHide() {
+			clearInterval(this.timer);
+			// 页面隐藏时清除定时器
+			if (this.timers) {
+				clearInterval(this.timers);
+				this.timers = null;
+				console.log('定时器已清除');
+			}
+			xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
+			xBlufi.notifyStartDiscoverBle({
+				'isStart': false
+			});
+		},
+		onUnload() {
+			clearInterval(this.timer);
+			// 页面卸载时清除定时器
+			if (this.timers) {
+				clearInterval(this.timers);
+				this.timers = null;
+				console.log('定时器已清除');
+			}
+			xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
+			xBlufi.notifyStartDiscoverBle({
+				'isStart': false
+			});
+		},
+
+		onBeforeUnmount() {
+			clearInterval(this.timer);
+			if (this.timers) {
+				clearInterval(this.timers);
+				this.timers = null;
+				console.log('定时器已清除');
+			}
+			xBlufi.listenDeviceMsgEvent(false, this.funListenDeviceMsgEvent);
+			xBlufi.notifyStartDiscoverBle({
+				'isStart': false
+			});
 		},
 		onShow() {
-		
+			if (uni.getStorageSync('adminAreaid')) {
+				this.areaId = uni.getStorageSync('adminAreaid')
+
+				this.getArea()
+			}
+			this.$store.dispatch('userInfo', this.$u).then(() => {
+				this.getQiniuToken()
+				this.getisInOrder()
+				// 执行其他操作...
+			});
+			let that = this
+			uni.getLocation({
+				type: 'gcj02',
+				success: function(lb) {
+
+					that.gps.latitude = lb.latitude;
+					that.gps.longitude = lb.longitude;
+
+				},
+				fail: function(error) {
+					uni.showToast({
+						title: '未获取到定位信息,请点击设置勾选允许位置信息,即可使用全部功能',
+						icon: 'none',
+						duration: 2000
+					});
+					// that.getmarks()
+					// 在这里处理获取位置信息失败的情况
+				}
+
+			})
+
+		},
+		computed: {
+
+			userId() {
+				return this.$store.getters.userId;
+			},
 		},
 		methods: {
+			getQiniuToken() {
+				console.log('diaou');
+				this.$u.get("/common/qiniu/uploadInfo").then((res) => {
+					if (res.code == 200) {
+						this.token = res.token
+						console.log(res, 'resres');
+						this.upurl = res.domain
+					}
+				});
+				// this.$u.get('https://v2.ielts.langsi.online/file/getToken').then(res => {
+				// 	console.log(res.data);
+				// 	this.token = res.data.token
+				// }).catch(err => {
+				// 	console.log(err)
+				// })
+
+			},
+			btn() {
+				let _this = this
+				let math = 'static/' + _this.$u.guid(20)
+				uni.chooseImage({
+					count: 9,
+					type: 'all',
+					success(res) {
+						// tempFilePath可以作为img标签的src属性显示图片
+						const tempFilePaths = res.tempFiles
+						// let tempFilePaths = chooseImageRes.tempFilePaths;
+						// console.log(tempFilePaths)
+						// tempFilePaths.forEach(item=>{
+						// 	// 上传图片到七牛云
+
+						// })
+						wx.uploadFile({
+							url: 'https://up-z2.qiniup.com',
+							name: 'file',
+							filePath: tempFilePaths[0].path,
+							formData: {
+								token: _this.token, //后端返回的token
+								key: 'smartmeter/img/' + math
+							},
+							success: function(res) {
+								console.log(res, 'resres');
+								let str = JSON.parse(res.data)
+								console.log(str.key)
+								_this.userImgs = _this.upurl + '/' + str.key
+								console.log(_this.userImgs)
+								_this.imglist.push(_this.userImgs)
+							}
+						});
+					}
+				})
+
+			},
+			getArea() {
+
+				let id = this.areaId
+				this.$u.get("/app/area/" + id).then((res) => {
+
+					if (res.code == 200) {
+
+						this.areainfo = res.data
+						// this.areainfo.returnVerify = 0
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+							duration: 2000
+						});
+					}
+				});
+			},
+			closemask() {
+				this.maskloading = false
+			},
+			sub() {
+				let data = {
+					userId: this.orderinfo.userId,
+					detail: this.textValue,
+					sn: this.orderinfo.sn,
+					orderNo:this.orderinfo.orderNo,
+					types: [] // Initialize the type array
+				};
+				if (this.areainfo.returnVerify == 0) {
+					data.picture = this.imglist.join(',')
+				} else {
+					data.picture = this.videoUrl
+				}
+
+
+				// Check for checked items in cbgz
+				this.cbgz.forEach(item => {
+					if (item.checked) {
+						data.types.push(item.dictValue);
+					}
+				});
+
+				// Check for checked items in csgz
+				this.csgz.forEach(item => {
+					if (item.checked) {
+						data.types.push(item.dictValue);
+					}
+				});
+
+				// Check for checked items in tsgz
+				this.tsgz.forEach(item => {
+					if (item.checked) {
+						data.types.push(item.dictValue);
+					}
+				});
+				console.log(data, 'dadadad');
+				this.$u.post("/appVerify/fault", data).then((res) => {
+					if (res.code == 200) {
+						this.issend = true
+						uni.showToast({
+							title: '提交成功',
+							icon: 'none',
+							duration: 1000
+						});
+
+					} else {
+						uni.showToast({
+							title: res.msg,
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				});
+			},
+			subvadio() {
+				let data = {
+					orderNo: this.orderinfo.orderNo,
+
+				}
+				if (!this.orderinfo.videoUrl) {
+					data.videoUrl = this.videoUrl
+				}
+				if (this.orderinfo.videoUrl) {
+					data.videoUrl = this.orderinfo.videoUrl + ',' + this.videoUrl
+				}
+				this.$u.put('/appVerify/order/saveVideoUrl', data).then((res) => {
+					// uni.hideLoading()·
+					if (res.code === 200) {
+						this.upvideo = true
+					} else {
+
+					}
+				})
+			},
+			recordVideo() {
+				// 调用录像API
+				uni.chooseVideo({
+					sourceType: ['camera'], // 指定使用相机录像
+					camera: 'back', // 指定使用后置摄像头,可选值有front、back
+					maxDuration: 15, // 最大录制时长(秒)
+					success: (res) => {
+						// 获取视频录制文件的临时路径
+						this.videoPath = res.tempFilePath;
+						console.log(res.tempFilePath);
+						this.upload()
+					},
+					fail: (err) => {
+						console.log('录像失败:', err);
+					}
+				});
+			},
+			upload() {
+				uni.showLoading({
+					title: '上传中'
+				})
+				let _this = this
+				let math = 'static/' + _this.$u.guid(20)
+				wx.uploadFile({
+					url: 'https://up-z2.qiniup.com',
+					name: 'file',
+					filePath: this.videoPath,
+					formData: {
+						token: _this.token, //后端返回的token
+						key: 'bike/video/' + math
+					},
+					success: function(res) {
+						uni.hideLoading()
+						console.log(res, 'resres');
+						let str = JSON.parse(res.data)
+						console.log(str.key)
+						_this.videoUrl = _this.upurl + '/' + str.key
+						console.log(_this.userImgs)
+						// _this.imglist.push(_this.userImgs)
+					}
+				});
+			},
+			subs(num) {
+				if (this.orderinfo.sn === this.sncode) {
+					uni.showToast({
+						title: '换车设备不能和当前设备相同',
+						icon: 'none',
+						duration: 1000
+					});
+				} else if (this.areainfo.returnVerify === 1 && this.videoUrl === '') {
+					uni.showToast({
+						title: '请拍摄还车视频',
+						icon: 'none',
+						duration: 1000
+					});
+				} else if (this.areainfo.returnVerify === 0 && this.checkIdx === 2) {
+					if (this.imglist.length < 1) {
+						uni.showToast({
+							title: '请对损坏部位拍照',
+							icon: 'none',
+							duration: 1000
+						});
+					} else {
+						uni.showToast({
+							title: '请选择损坏部位',
+							icon: 'none',
+							duration: 1000
+						});
+					}
+				} else if (!this.deviceinfo.sn) {
+					uni.showToast({
+						title: '请扫码或者输入车辆编号',
+						icon: 'none',
+						duration: 1000
+					});
+				} else {
+					if (num === 0) {
+						this.maskloading = true;
+						this.maskepage = 0;
+						this.loadimg = 'https://lxnapi.ccttiot.com/bike/img/static/uRxPPoVoqmnmng6wKlij';
+						let percentage = 0;
+						const interval = setInterval(() => {
+							if (percentage < 98) {
+								percentage += 2; // 每次增加的百分比,可以调整
+								this.toploadtxt = `换车中${percentage}%`;
+							} else {
+								clearInterval(interval);
+								this.toploadtxt = "换车中98%";
+							}
+						}, 40); // 每40毫秒更新一次,可以调整
+					}
+
+					if (!this.upvideo && this.orderinfo.returnVerify === 1) {
+						this.subvadio();
+					}
+
+					if (this.checkIdx === 2 && !this.issend) {
+						this.sub();
+					}
+
+					if (!this.isback) {
+						this.changeback();
+					} else if (!this.isopen) {
+						this.changeOpne();
+					}
+
+					setTimeout(() => {
+						if (this.isback && this.isopen) {
+							this.loadimg = 'https://lxnapi.ccttiot.com/bike/img/static/ukD735zCS1yQXw2aGun8';
+							this.toploadtxt = '换车成功';
+							setTimeout(() => {
+								this.resetState();
+								this.getisInOrder();
+								uni.navigateBack({
+									delta: 1 // delta值为1时表示返回的页面层数
+								});
+							}, 1000);
+						}
+					}, 2000);
+				}
+			},
+
+			resetState() {
+				this.isback = false;
+				this.isopen = false;
+				this.issend = false;
+				this.upvideo = false;
+				this.deviceinfo = {};
+				this.maskloading = false;
+				this.sncode = '';
+			},
+			changeback() {
+				// this.mac=this.orderinfo.mac
+				// this.buleclose=true
+				// this.Binddevice()
+				this.$u.post('/appVerify/changeVehicle/lock?orderNo=' + this.orderinfo.orderNo + '&changeReason=' + this
+					.checkIdx).then((res) => {
+
+					if (res.code == 200) {
+						this.isback = true
+						this.subs(1)
+
+					} else {
+						// 处理接口返回错误的情况
+						this.mac = this.orderinfo.mac
+						this.buleclose = true
+						this.Binddevice()
+					}
+				}).catch(error => {
+					// 处理接口请求失败的情况
+				});
+			},
+			buleback() {
+				this.$u.post('/appVerify/changeVehicle/lock?orderNo=' + this.orderinfo.orderNo + '&changeReason=' + this
+					.checkIdx + '&isBluetooth=true' + '&lon=' + lb.longitude +
+					'&lat=' + lb.latitude).then((res) => {
+					if (res.code == 200) {
+						this.isback = true
+						this.subs(1)
+
+					}
+				}).catch(error => {
+					// 处理接口请求失败的情况
+				});
+			},
+			changeOpne() {
+				this.$u.post('/appVerify/changeVehicle/unlocking?orderNo=' + this.orderinfo.orderNo + '&newSn=' + this
+					.deviceinfo.sn).then((res) => {
+					if (res.code == 200) {
+						this.isopen = true
+						this.subs(1)
+
+					} else {
+						this.mac = this.deviceinfo.mac
+						this.buleopen = true
+						this.Binddevice()
+						// 处理接口返回错误的情况
+					}
+				}).catch(error => {
+					// 处理接口请求失败的情况
+				});
+			},
+			changebuleOpne() {
+				this.$u.post('/appVerify/changeVehicle/unlocking?orderNo=' + this.orderinfo.orderNo + '&newSn=' + this
+						.deviceinfo.sn + '&isBluetooth=true' + '&lon=' + this.gps.longitude + '&lat=' + this.gps.latitude)
+					.then((res) => {
+						if (res.code == 200) {
+							this.isopen = true
+							this.subs(1)
+
+						}
+					}).catch(error => {
+						// 处理接口请求失败的情况
+					});
+			},
+			getdevice() {
+				this.$u.get('/app/device/info?sn=' + this.sncode).then((res) => {
+					if (res.code == 200) {
+
+						this.deviceinfo = res.data
+
+					} else {
+						// 处理接口返回错误的情况
+					}
+				}).catch(error => {
+					// 处理接口请求失败的情况
+				});
+			},
+			qrcode() {
+				uni.scanCode({
+					onlyFromCamera: true,
+					scanType: ['qrCode'],
+					success: res => {
+
+						let sn = null;
+						let queryParams = res.result.split('?')[1];
+						if (queryParams) {
+							let params = queryParams.split('&');
+							params.forEach(param => {
+								let [key, value] = param.split('=');
+								if (key === 'sn') {
+									sn = value;
+								}
+							});
+						}
+
+						this.sncode = sn
+						console.log(res.result);
+						if (this.sncode != '') {
+
+							this.getdevice()
+						}
+
+					},
+					fail: err => {
+						console.error('扫描失败:', err);
+						uni.showToast({
+							title: '扫描失败',
+							icon: 'none'
+						});
+					}
+				});
+			},
+			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 = '蓝牙连接中'
+				// uni.showLoading({
+				// 	title: '蓝牙扫描中..'
+				// })
+				xBlufi.initXBlufi(1);
+				console.log("xBlufi", xBlufi.XMQTT_SYSTEM);
+				xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvent);
+				xBlufi.notifyStartDiscoverBle({
+					'isStart': true
+				});
+
+
+				// 两秒后停止蓝牙搜索
+				setTimeout(() => {
+					xBlufi.notifyStartDiscoverBle({
+						'isStart': false
+					});
+					setTimeout(() => {
+						// uni.hideLoading()
+						if (this.devicesList.length == 0) {
+							// uni.showToast({
+							// 	title: '暂无发现对应设备,请靠近设备',
+							// 	icon: 'none',
+							// 	duration: 1500
+							// });
+							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
+									// this.ishave = true;
+									istrue = true
+									this.createBLEConnection(device)
+
+									console.log('对比正确1111111111');
+								} else {
+									console.log('对比错误');
+
+								}
+							});
+							setTimeout(() => {
+								if (!istrue) {
+									this.buletxt = '蓝牙连接失败'
+
+
+									setTimeout(() => {
+										this.maskepage = 5
+									}, 500)
+								}
+
+							}, 500)
+						}
+
+
+					}, 200)
+					// 判断是否存在浇花器设备
+
+					// this.status = true
+				}, 5000)
+
+			},
+			reboot() {
+				let vm = this; // 将外部的 this 绑定到 vm 上
+				uni.getNetworkType({
+					success(res) {
+						if (res.networkType !== 'none') {
+							uni.getConnectedBluetoothDevices({
+								success(res) {
+									console.log('已连接的蓝牙设备信息:', res);
+									// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
+									xBlufi.notifySendCustomData({
+										customData: "11reboot"
+									});
+									// vm.maskloading=false
+									// uni.hideLoading()
+									// vm.remakr()
+								},
+								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);
+									// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
+									xBlufi.notifySendCustomData({
+										customData: "11open"
+									});
+									vm.maskepage = 0
+									vm.toploadtxt = '换车中';
+									vm.changebuleOpne()
+									// uni.hideLoading()
+									// vm.remakr()
+								},
+								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);
+									// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
+									xBlufi.notifySendCustomData({
+										customData: "11close"
+									});
+									// vm.maskloading=false
+									vm.buleback()
+									vm.maskepage = 0
+									vm.toploadtxt = '换车中';
+									// uni.hideLoading()
+									// vm.remakr()
+								},
+								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
+							// this.devicesList = options.data
+
+							devicesarr.forEach(device => {
+
+
+								// this.$u.get(`/app/device/${mac}/isBind`, data).then((res) => {
+								// if (res.data == false) {
+								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) {
+							// uni.hideLoading();
+
+
+							xBlufi.notifyInitBleEsp32({
+								deviceId: options.data.deviceId
+							});
+
+							// xBlufi.listenDeviceMsgEvent(true, this.funListenDeviceMsgEvents);
+
+							// this.deviceIds = options.data.deviceId
+							// this.name = options.data.name
+							// 连接成功绑定设备
+							// let params = {
+							// 	mac: this.Bluetoothmac,
+							// 	userId: this.$store.state.user.userId
+							// }
+							let systemInfo = uni.getSystemInfoSync();
+							if (systemInfo.platform === 'android') {
+								// 当前设备是 Android  
+
+							} else if (systemInfo.platform === 'ios') {
+								// 当前设备是 iOS  
+								// uni.navigateTo({
+								// 	url: '/pages/wifilist/index?deviceId=' + options
+								// 		.data.deviceId + '&name=' + options.data.name
+								// })
+							}
+						}
+						if (options.result == false) {
+							// this.loadingmask=false
+							this.carstause = false
+							if (this.maskepage == 4) {
+								this.buletxt = '设备连接失败'
+
+
+								setTimeout(() => {
+									this.maskepage = 5
+								}, 800)
+							}
+
+							// uni.showModal({
+							// 	title: '很抱歉提醒你!',
+							// 	content: '小程序与设备异常断开',
+							// 	showCancel: false,
+							// 	success: function(res) {
+							// 		// uni.navigateBack({
+							// 		// 	url: '../search/search'
+							// 		// });
+							// 	}
+							// });
+							// this.statusflag = false
+							// uni.hideLoading();
+						}
+						break;
+					case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
+
+						// this.ver_data = this.parseCustomData(options.data)
+						if (options.data) {
+							this.carstause = true
+
+
+							if (this.maskloading && this.maskepage == 4) {
+								// setTimeout(() => {
+								// 	this.maskloading = false
+								// }, 700)
+								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)
+							}
+							// uni.showToast({
+							// 	title: '设备断开链接,请重新点击蓝牙链接',
+							// 	icon: 'none'
+							// });
+							// uni.showModal({
+							// 	title: '很抱歉提醒你!',
+							// 	content: '小程序与设备异常断开',
+							// 	showCancel: false,
+							// 	success: function(res) {
+							// 		// uni.navigateBack({
+							// 		// 	url: '../search/search'
+							// 		// });
+							// 	}
+							// });
+							// this.statusflag = false
+							// uni.hideLoading();
+						}
+					}
+					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;
+
+							// console.log('蓝牙停止搜索ok',this.devicesList);
+						} else {
+							//蓝牙停止搜索失败
+							// console.log('蓝牙停止搜索失败');
+						}
+						this.searching = false
+						// _this.setData({
+						// 	searching: false
+						// });
+
+						break;
+				}
+			},
+
+
+			// 解析自定义数据
+
+
+			//4、建立连接
+			createBLEConnection(e) {
+				console.log('调用了');
+				xBlufi.notifyStartDiscoverBle({
+					'isStart': false
+				});
+				console.log(e, '蓝牙信息')
+				const deviceId = e.deviceId
+				this.Bluetoothmac = e.localName.substring(5) //从第七位开始截取 只取后面的mac号
+				console.log(this.Bluetoothmac, '11111');
+				let name = e.name;
+				console.log('点击了,蓝牙准备连接的deviceId:' + e.deviceId);
+				xBlufi.notifyConnectBle({
+					isStart: true,
+					deviceId: e.deviceId,
+					name
+				});
+				// for (var i = 0; i < this.devicesList.length; i++) {
+				// 	if (e.deviceId === this.devicesList[i].deviceId) {
+
+				// 		uni.showLoading({
+				// 			title: '连接蓝牙设备中...'
+				// 		});
+				// 	}
+				// }
+			},
+			getisInOrder() {
+				// uni.showLoading({
+
+				// })
+				this.orderinfo = {}
+				if (this.userId) {
+					this.$u.post('/app/user/isInOrder?userId=' + this.userId, ).then((res) => {
+						// uni.hideLoading()
+						if (res.code === 200) {
+							// this.freList=res.rows
+							this.orderinfo = res.data[0]
+							const createTimeTimestamp = new Date(this.orderinfo.unlockTime).getTime();
+							this.$u.get('/app/device/info?sn=' + this.orderinfo.sn).then((res) => {
+								if (res.code == 200) {
+
+									this.orderinfo.mac = res.data.mac
+
+								} else {
+									// 处理接口返回错误的情况
+								}
+							}).catch(error => {
+								// 处理接口请求失败的情况
+							});
+							// 定义定时器
+							this.timer = setInterval(() => {
+								const currentTime = Date.now();
+								const timePassed = currentTime - createTimeTimestamp;
+								const secondsPassed = Math.floor(timePassed / 1000);
+
+								// 转换为时分秒格式
+								const hours = Math.floor(secondsPassed / 3600);
+								const minutes = Math.floor((secondsPassed % 3600) / 60);
+								const seconds = secondsPassed % 60;
+								const timeString =
+									`${hours < 10 ? '0' : ''}${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
+								let totalMinutes = hours * 60 + minutes;
+
+								let totalTime;
+								if (this.orderinfo.rule.rentalUnit === 'minutes') {
+									totalTime = totalMinutes;
+								} else if (this.orderinfo.rule.rentalUnit === 'hours') {
+									totalTime = hours + minutes / 60;
+								} else if (this.orderinfo.rule.rentalUnit === 'day') {
+									totalTime = hours / 24 + minutes / 1440;
+								}
+
+								// 计费规则计算
+								if (this.orderinfo.rule.ridingRule == 1) {
+									const ridingRuleJson = JSON.parse(this.orderinfo.rule.ridingRuleJson);
+									const timeoutTime = parseFloat(ridingRuleJson.timeoutTime);
+									const startingPrice = parseFloat(ridingRuleJson.startingPrice);
+									const startingTime = parseFloat(ridingRuleJson.startingTime);
+									const timeoutPrice = parseFloat(ridingRuleJson.timeoutPrice);
+
+									let totalCharge;
+									if (totalTime <= startingTime) {
+										totalCharge = startingPrice;
+									} else {
+										const extraTime = totalTime - startingTime;
+										const extraCharge = Math.ceil(extraTime / timeoutTime) *
+											timeoutPrice;
+										totalCharge = startingPrice + extraCharge;
+									}
+
+									// 更新money值
+									this.money = totalCharge + this.orderinfo.appointmentFee
+								} else if (this.orderinfo.rule.ridingRule == 2) {
+									const ridingRuleJson = JSON.parse(this.orderinfo.rule.ridingRuleJson);
+									const rules = ridingRuleJson.rule;
+									let totalCharge = 0;
+
+									for (let rule of rules) {
+										const start = parseFloat(rule.start);
+										const end = parseFloat(rule.end);
+										const eachUnit = parseFloat(rule.eachUnit);
+										const fee = parseFloat(rule.fee);
+
+										if (totalTime > start && (end === 9999 || totalTime <= end)) {
+											// 所有时间都按照该区间的费率来计算
+											totalCharge = Math.ceil(totalTime / eachUnit) * fee;
+											break;
+										}
+									}
+
+									// 更新money值
+									this.money = totalCharge + this.orderinfo.appointmentFee
+								}
+
+								// 更新时间字符串
+								this.timeString = timeString;
+							}, 1000);
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none',
+								duration: 2000
+							});
+						}
+					})
+				}
+
+			},
+
 			toggleCheckbox(index) {
 				this.cbgz[index].checked = !this.cbgz[index].checked;
 				this.$forceUpdate()
 			},
-			csCheckbox(index){
+			csCheckbox(index) {
 				this.csgz[index].checked = !this.csgz[index].checked;
 			},
-			tsCheckbox(index){
+			tsCheckbox(index) {
 				this.tsgz[index].checked = !this.tsgz[index].checked;
 			},
 			hidePlaceholder() {
@@ -185,14 +1307,23 @@
 					this.placeholderVisible = true;
 				}
 			},
-			getlist(){
+			getlist() {
 				// checked
 				this.$u.get("/appVerify/fault/allList?dictType=et_fault_type").then((res) => {
-				
+
 					if (res.code == 200) {
-						 this.cbgz = res.data.headstock.map(item => ({...item, checked: false}));
-					    this.csgz = res.data.body.map(item => ({...item, checked: false}));
-					    this.tsgz = res.data.special.map(item => ({...item, checked: false}));
+						this.cbgz = res.data.headstock.map(item => ({
+							...item,
+							checked: false
+						}));
+						this.csgz = res.data.body.map(item => ({
+							...item,
+							checked: false
+						}));
+						this.tsgz = res.data.special.map(item => ({
+							...item,
+							checked: false
+						}));
 					} else {
 						uni.showToast({
 							title: '未登录,请登录后尝试',
@@ -217,6 +1348,267 @@
 		// height: 530rpx;
 		// background: linear-gradient( 180deg, #64B6A7 0%, rgba(255,255,255,0) 100%), #FFFFFF;
 		border-radius: 0rpx 0rpx 0rpx 0rpx;
+		padding-bottom: 200rpx;
+
+		.tip_box {
+			padding: 44rpx 36rpx;
+			font-weight: 400;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			background: #64B6A7;
+		}
+
+		.vadio_png1 {
+			position: relative;
+			width: 672rpx;
+			height: 370rpx;
+
+			.backimg {
+
+				width: 672rpx;
+				height: 370rpx;
+
+			}
+
+			.tip_img {
+				position: absolute;
+				top: 72rpx;
+				left: 210rpx;
+				width: 252rpx;
+				height: 194rpx;
+				z-index: 11;
+			}
+
+			.vad {
+				width: 672rpx;
+				height: 370rpx;
+				border-radius: 40rpx;
+				z-index: 1;
+			}
+
+			.glass {
+				position: absolute;
+				top: 0;
+				left: 0;
+				width: 672rpx;
+				height: 370rpx;
+				background: rgba(255, 255, 255, 0.2);
+				border-radius: 40rpx;
+				// box-shadow: 0 rgba(0, 0, 0, 0.1);
+				backdrop-filter: blur(10rpx);
+				-webkit-backdrop-filter: blur(10rpx);
+				/* For Safari */
+				// border: 1rpx solid rgba(255, 255, 255, 0.3);
+				z-index: 10;
+
+			}
+
+		}
+
+		.cont {
+			width: 100%;
+			padding: 0 39rpx;
+
+			.tip_txt {
+				margin-top: 38rpx;
+				width: 100%;
+				font-weight: 400;
+				font-size: 28rpx;
+				color: #3D3D3D;
+			}
+
+			.vadio_png {
+				margin-top: 52rpx;
+
+				image {
+					width: 672rpx;
+					height: 370rpx;
+				}
+			}
+
+			.btn {
+				position: fixed;
+				bottom: 100rpx;
+				left: 38rpx;
+				// margin-top: 128rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				width: 680rpx;
+				height: 90rpx;
+				background: rgba(100, 182, 167, 0.5);
+				border-radius: 54rpx 54rpx 54rpx 54rpx;
+				z-index: 10;
+				font-weight: 500;
+				font-size: 40rpx;
+				color: #FFFFFF;
+			}
+
+			.act1 {
+				background: #64B6A7;
+			}
+		}
+
+		.maskloadpage {
+
+			position: fixed;
+			padding: 46rpx;
+			bottom: 0;
+			width: 752rpx;
+			height: 780rpx;
+			background: #FFFFFF;
+			border-radius: 40rpx 40rpx 0rpx 0rpx;
+			z-index: 101;
+			box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
+
+			.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;
+					}
+				}
+			}
+
+		}
+
+
+		.btns {
+			position: fixed;
+			bottom: 70rpx;
+			left: 34rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-weight: 500;
+			font-size: 40rpx;
+			color: #FFFFFF;
+			width: 680rpx;
+			height: 90rpx;
+			background: #64B6A7;
+			border-radius: 54rpx 54rpx 54rpx 54rpx;
+			z-index: 100;
+		}
+
 		.iptbox {
 			display: flex;
 			align-items: center;
@@ -228,87 +1620,116 @@
 			background: #FFFFFF;
 			box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
 			border-radius: 20rpx 20rpx 20rpx 20rpx;
-			.qrcode{
+
+			.qrcode {
 				padding-right: 20rpx;
 				border-right: 2rpx solid #D8D8D8;
-				image{
+
+				image {
 					width: 54rpx;
 					height: 54rpx;
 				}
 			}
+
 			.ips {
 				width: 630rpx;
-		
+
 			}
-		
+
 			image {
 				width: 18rpx;
 				height: 32rpx;
 			}
-		
+
 			.my-placeholder {
 				font-weight: 400;
 				font-size: 32rpx;
 				color: #808080;
 			}
 		}
+
 		.conts_box {
 			width: 680rpx;
-			margin-top: 36rpx;
 			margin: 0 auto;
 			display: flex;
-			flex-wrap: nowrap;
+			flex-wrap: wrap;
 			align-items: center;
 			justify-content: space-between;
-		
-			.left {
+			margin-top: 38rpx;
+			background: #FFFFFF;
+			box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
+			border-radius: 20rpx 20rpx 20rpx 20rpx;
+			padding-bottom: 20rpx;
+
+			.txtss {
+				margin-top: 18rpx;
+				padding-left: 20rpx;
+				width: 100%;
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #808080;
+			}
+
+			.cont_li {
+				width: 100%;
 				display: flex;
-				flex-wrap: wrap;
-				font-weight: 600;
-				font-size: 36rpx;
-				color: #3D3D3D;
-		
-				.km {
-					font-weight: 400;
-					font-size: 28rpx;
+				flex-wrap: nowrap;
+				align-items: center;
+				justify-content: space-between;
+
+				.left {
+					padding-left: 20rpx;
+					display: flex;
+					flex-wrap: wrap;
+					font-weight: 600;
+					font-size: 36rpx;
 					color: #3D3D3D;
-				}
-		
-				.speed {
-					margin-top: 18rpx;
-					width: 226rpx;
-					height: 22rpx;
-					background: #ccc;
-					border-radius: 16rpx 16rpx 16rpx 16rpx;
-		
-					.speeds {
-						// width: 90%;
-						height: 100%;
-						background: #64B6A7;
+
+					.km {
+						font-weight: 400;
+						font-size: 28rpx;
+						color: #3D3D3D;
+					}
+
+					.speed {
+						margin-top: 18rpx;
+						width: 226rpx;
+						height: 22rpx;
+						background: #ccc;
 						border-radius: 16rpx 16rpx 16rpx 16rpx;
+
+						.speeds {
+							// width: 90%;
+							height: 100%;
+							background: #64B6A7;
+							border-radius: 16rpx 16rpx 16rpx 16rpx;
+						}
+					}
+
+					.NO {
+						width: 100%;
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #3D3D3D;
 					}
 				}
-		
-				.NO {
-					font-weight: 400;
-					font-size: 24rpx;
+
+				.right {
+					padding-right: 20rpx;
+					font-weight: 600;
+					font-size: 36rpx;
 					color: #3D3D3D;
+
+					image {
+						width: 244rpx;
+						height: 196rpx;
+					}
 				}
 			}
-		
-			.right {
-				font-weight: 600;
-				font-size: 36rpx;
-				color: #3D3D3D;
-		
-				image {
-					width: 244rpx;
-					height: 196rpx;
-				}
-			}
+
 		}
-		
-		.tits{
+
+		.tits {
 			width: 680rpx;
 			margin: 0 auto;
 			font-weight: 400;
@@ -316,40 +1737,45 @@
 			font-size: 36rpx;
 			color: #3D3D3D;
 		}
-		.cont_box{
-			
+
+		.cont_box {
+
 			margin: 0 auto;
 			padding: 24rpx 32rpx;
 			width: 680rpx;
 			margin-top: 38rpx;
 			background: #FFFFFF;
-			box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);
+			box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
 			border-radius: 20rpx 20rpx 20rpx 20rpx;
-			.tit{
+
+			.tit {
 				width: 100%;
 				display: flex;
-				flex-wrap: nowrap;	
+				flex-wrap: nowrap;
 				align-items: center;
-				image{
+
+				image {
 					margin-right: 12rpx;
 					width: 24rpx;
 					height: 24rpx;
 				}
-			
+
 			}
-			.choose_li{
+
+			.choose_li {
 				margin-top: 34rpx;
 				width: 100%;
 				display: flex;
 				flex-wrap: nowrap;
 				align-items: center;
+
 				// justify-content: space-between;
-				.li_cont{
+				.li_cont {
 					width: 50%;
 					display: flex;
 					flex-wrap: nowrap;
-					
-					.img_box{
+
+					.img_box {
 						margin-right: 30rpx;
 						width: 38rpx;
 						height: 38rpx;
@@ -358,6 +1784,7 @@
 					}
 				}
 			}
+
 			.tip {
 				display: flex;
 				flex-wrap: nowrap;
@@ -366,16 +1793,16 @@
 				font-size: 32rpx;
 				color: #3D3D3D;
 				line-height: 44rpx;
-			
+
 				.ipnt {
 					margin-top: 10rpx;
 					margin-right: 12rpx;
 					color: #FF4444;
 					font-size: 48rpx;
-			
+
 				}
 			}
-			
+
 			.iptbox {
 				display: flex;
 				align-items: center;
@@ -384,12 +1811,12 @@
 				height: 80rpx;
 				border-radius: 20rpx 20rpx 20rpx 20rpx;
 				border: 2rpx solid #979797;
-				
+
 				.ips {
 					margin-left: 30rpx;
 					width: 80%;
 				}
-			
+
 				.iptbtn {
 					display: flex;
 					align-items: center;
@@ -398,43 +1825,45 @@
 					height: 80rpx;
 					background: #64B6A7;
 					border-radius: 20rpx 20rpx 20rpx 20rpx;
-			
+
 					image {
 						width: 37rpx;
 						height: 37rpx;
 					}
 				}
 			}
-			
+
 			.txt {
 				margin-top: 18rpx;
 				font-weight: 400;
 				font-size: 28rpx;
 				color: #3D3D3D;
 			}
+
 			.icon {
 				display: flex;
 				flex-wrap: wrap;
 				align-items: center;
 				margin-top: 40rpx;
-			
+
 				.imgbox {
 					width: 33%;
-			
+
 					image {
 						width: 142rpx;
 						height: 142rpx;
 					}
 				}
-			
+
 			}
+
 			.checkbox {
 				display: flex;
 				flex-wrap: wrap;
-			
+
 				.check_li {
 					position: relative;
-					 margin-right: 10rpx;
+					margin-right: 10rpx;
 					margin-top: 18rpx;
 					display: flex;
 					align-items: center;
@@ -443,7 +1872,8 @@
 					height: 65rpx;
 					border-radius: 20rpx 20rpx 20rpx 20rpx;
 					border: 2rpx solid #C7C7C7;
-					image{
+
+					image {
 						position: absolute;
 						right: 0;
 						bottom: 0;
@@ -451,18 +1881,21 @@
 						height: 20rpx;
 					}
 				}
+
 				.check_li:nth-child(4n) {
-				  margin-right: 0;
+					margin-right: 0;
 				}
+
 				.act1 {
 					// background-image: url(https://api.ccttiot.com/smartmeter/img/static/uaqN5qdoGNCs7Dumzr3F);
 					width: 142rpx;
 					height: 65rpx;
-					 // background-size: cover;
-					 border: 2rpx solid #1E807A;
+					// background-size: cover;
+					border: 2rpx solid #1E807A;
 					// background: #4C97E7;
 				}
 			}
+
 			.input-container {
 				position: relative;
 				width: 612rpx;
@@ -476,7 +1909,7 @@
 				box-sizing: border-box;
 				border: 2rpx solid #C7C7C7;
 			}
-			
+
 			.placeholder {
 				position: absolute;
 				top: 18rpx;
@@ -486,6 +1919,7 @@
 				pointer-events: none;
 				/* 确保点击事件可以穿透到textarea上 */
 			}
+
 			.custom-textarea {
 				width: 100%;
 				height: 100%;
@@ -496,7 +1930,7 @@
 				box-sizing: border-box;
 				border: 1px solid #ccc;
 			}
-			
+
 			.word-count {
 				position: absolute;
 				right: 10px;
@@ -505,6 +1939,6 @@
 				color: #999;
 			}
 		}
-	
+
 	}
 </style>
\ No newline at end of file
diff --git a/page_user/vadio_back.vue b/page_user/vadio_back.vue
index 7b067e5..0496e5d 100644
--- a/page_user/vadio_back.vue
+++ b/page_user/vadio_back.vue
@@ -165,7 +165,7 @@
 					filePath: this.videoPath,
 					formData: {
 						token: _this.token, //后端返回的token
-						key:'bike/vadio/'+math
+						key:'bike/video/'+math
 					},
 					success: function(res) {
 						uni.hideLoading()
diff --git a/pages/index/index.vue b/pages/index/index.vue
index d8b1cea..dd5ec44 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -284,6 +284,12 @@
 								<image src="https://api.ccttiot.com/smartmeter/img/static/uHTCZOVUbmBkKW4G0wuF" mode="">
 								</image>
 							</view>
+							
+						</view>
+						<view class="changebiketip" @click="tochange()">
+							换车骑行 <view class="iconfont icon-xiangyou1">
+								
+							</view>
 						</view>
 					</view>
 					<view class="bot" style="margin-top: 20rpx;" v-if="orderinfo.status==0">
@@ -302,7 +308,7 @@
 					<view class="bot" style="margin-top: 20rpx;" v-if="orderinfo.status==2">
 
 
-						<view class="btn" style="	margin-right: 16rpx;" v-if="OrderdeviceInfos.status==3"
+						<view class="btn" style="	margin-right: 16rpx;" v-if="OrderdeviceInfos.status==3||OrderdeviceInfos.status==6"
 							@click="taploadmask (2)">
 							临时锁车
 						</view>
@@ -1265,6 +1271,11 @@
 			},
 		},
 		methods: {
+			tochange(){
+				uni.navigateTo({
+					url: '/page_user/changeCar'
+				})
+			},
 			tovadio() {
 				// this.seeDetail=true
 				this.maskepage = 0
@@ -6011,7 +6022,17 @@
 							font-size: 36rpx;
 							color: #3D3D3D;
 						}
-
+						.changebiketip{
+							bottom: 20rpx;
+							left: 280rpx;
+							position: absolute;
+							display: flex;
+							flex-wrap: nowrap;
+							align-items: center;
+							font-weight: 400;
+							font-size: 28rpx;
+							color: #3D3D3D;
+						}
 						.cont {
 							margin-top: 30rpx;
 							display: flex;