CarRental/pages_device/carInfo.vue
2024-10-14 18:02:05 +08:00

1382 lines
32 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<view class="fixed">
<u-navbar title=" " :border-bottom="false" :background="background" title-color='#fff' title-size='36'
height='45' back-icon-color='#000'></u-navbar>
</view>
<view class="top">
<view class="model">
{{deviceInfos.model}}
</view>
<view class="switch" v-if="false">
<image src="https://lxnapi.ccttiot.com/bike/img/static/uXLYdSpcdiKGoNpJBiGZ" mode="" class="replay">
</image>
正在连接
<image src="https://lxnapi.ccttiot.com/bike/img/static/ukhgaoFSHmlJWkgyC4U4" mode="" class="bluetooth">
</image>
</view>
</view>
<view class="power">
<view class="tit">
电量
</view>
<view class="num">
{{deviceInfos.remainingPower}}%
</view>
</view>
<view class="car_img">
<image src="https://lxnapi.ccttiot.com/bike/img/static/ukC1CG1uAz1pwV0qZ03n" mode=""></image>
</view>
<view class="tips">
<view class="yuan">
</view>
当前车辆状态 {{deviceInfos.lockStatus==1?'开锁': '关锁' }}
</view>
<view class="btn_box">
<view class="btn1" @click="btn(2)">
<image src="https://lxnapi.ccttiot.com/bike/img/static/uaW9kLzl1RYoU8WyiuYL" mode=""></image>
鸣笛寻车
</view>
<!-- <view class="btn2" @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd">
<view class="slider" :style="{ transform: 'translateX(' + translateX + 'rpx)' }"></view>
右滑启动
</view> -->
<view class="btn1" @click="btn(1)" v-if="deviceInfos.lockStatus==1">
<image src="https://lxnapi.ccttiot.com/bike/img/static/uEUTkjiSqIDTjnLxGvP8" mode=""></image>
已启动
</view>
<view class="btn1" @click="btn(0)" v-else>
<image src="https://lxnapi.ccttiot.com/bike/img/static/uAx8pleqdhKswoupY8Wo" mode=""></image>
已关锁
</view>
<view class="btn1">
<image src="https://lxnapi.ccttiot.com/bike/img/static/uGrptW1UAUQy0v1pQQvC" mode=""></image>
鸣笛寻车
</view>
</view>
<view class="order_info">
<view class="info_top">
<view class="tit1">
欢迎使用电动车
</view>
<view class="txt1" @click="topage(1)">
查看订单 <image src="https://lxnapi.ccttiot.com/bike/img/static/uAxKe5Or9LMUn4DNBL9B" mode=""></image>
</view>
</view>
<view class="info_cont">
<image src="https://lxnapi.ccttiot.com/bike/img/static/ueWcek6yF0kSadYfYhyV" mode=""></image>
<view class="infos">
<view class="time">
{{time1()}}
</view>
<view class="data">
{{time2()}}
</view>
<view class="tips1">
到期后将产生超时费用
</view>
</view>
</view>
<view class="btns" @click="topage(0)">
去续租
</view>
</view>
<view class="store_car">
<view class="tops">
<view class="type">
租车门店
</view>
{{storeInfo.name}}
</view>
<view class="address">
{{storeInfo.simpleAddress}}
</view>
<view class="time">
营业时间{{storeInfo.businessTimeStart}}-{{storeInfo.businessTimeEnd}}
</view>
<view class="store_btn_li">
<view class="store_btn" @click="callPhone(storeInfo.contactMobile)">
<image src="https://lxnapi.ccttiot.com/bike/img/static/umkJCfPac4Mrzni8aoda" mode=""></image>
联系门店
</view>
<view class="store_btn" @click="mapFun">
<image src="https://lxnapi.ccttiot.com/bike/img/static/uolYZ4dLvxxI2n2WzZ4J" mode="" ></image>
导航到店
</view>
</view>
</view>
<view class="bot_btn" @click="toback">
<view class="btn">
还车
</view>
</view>
</view>
</template>
<script>
const app = getApp();
var xBlufi = require("@/utils/blufi/xBlufi.js");
let _this = null;
export default {
data() {
return {
devicesList: [
// {name:'110000',
// mac:'11111'}
],
searching: false,
texts: '正在扫描蓝牙设备...',
btnflag: true,
tishiflag: false,
option: '',
bluthlist: [], //蓝牙数组
// status: 'loading',
statusflag: false,
Bluetoothmac: '',
mac: '',
ishave: false,
ver_data: null,
deviceInfoss: {},
gps: {},
isband: false,
// status: false,
deviceIds: '',
name: '',
dl: 0,
czmoney: true,
iscz: true,
bgc: {
backgroundColor: "#F7FAFE",
},
show: true,
showgj: true,
searchKeyword: '11',
latitude: 39.916527,
longitude: 116.397128,
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,
orderinfo:{},
storeInfo:{}
}
},
onLoad(e) {
this.sn = e.sn
this.deviceInfo()
this.getorderInfo()
},
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: {
toback(){
uni.redirectTo({
url:'/page_user/user_order?orderNo='+this.orderinfo.orderNo
})
},
callPhone(phone){
uni.makePhoneCall({
phoneNumber:phone
})
// setTimeout(()=>{
// this.showkf=false
// },500)
},
topage(num){
console.log(this.orderinfo.orderNo);
if (this.orderinfo && this.orderinfo.orderNo) {
// console.log(this.orderInfo.orderNo);
if (num == 0) {
uni.redirectTo({
url: '/page_user/renewCar?orderNo=' + this.orderinfo.orderNo
});
} else if (num == 1) {
uni.redirectTo({
url: '/page_user/user_order?orderNo=' + this.orderinfo.orderNo
});
}
} else {
console.error('orderInfo is undefined or orderNo is missing');
}
},
time1() {
const expiryTime = new Date(this.orderinfo.expiryTime); // 获取过期时间
const now = new Date(); // 获取当前时间
// 计算时间差(毫秒)
const timeDifference = expiryTime - now;
if (timeDifference < 0) {
return '已超时';
} else {
const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24));
if (days > 0) {
return `${days}`;
}
const hours = Math.floor((timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
if (hours > 0) {
return `${hours}小时`;
}
const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
if (minutes > 0) {
return `${minutes}分钟`;
}
return '即将超时'; // 如果时间差小于1分钟
}
},
time2(){
console.log(this.orderinfo);
const expiryTime = new Date(this.orderinfo.expiryTime);
const month = (expiryTime.getMonth() + 1).toString().padStart(2, '0'); // 获取月份并补零
const day = expiryTime.getDate().toString().padStart(2, '0'); // 获取日期并补零
const hours = expiryTime.getHours().toString().padStart(2, '0'); // 获取小时并补零
const minutes = expiryTime.getMinutes().toString().padStart(2, '0'); // 获取分钟并补零
return `${month}/${day} ${hours}:${minutes}到期`;
},
mapFun() {
console.log('点击了');
uni.openLocation({
latitude: this.storeInfo.lat,
//纬度 - 目的地/坐标点
longitude: this.storeInfo.lng,
//经度 - 目的地/坐标点
// name: "荆门市",
address: this.storeInfo.simpleAddress
});
},
getorderInfo(){
let data = {
sn: this.sn
}
this.$u.get(`appVerify/getInProgressOrder?`, data).then((res) => {
if (res.code == 200) {
this.orderinfo = res.data
this.getstoreInfo()
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
getstoreInfo() {
let data = {
storeId: this.orderinfo.storeId
}
this.$u.get(`app/getStore?`, data).then((res) => {
if (res.code == 200) {
this.storeInfo = res.data
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
});
},
deviceInfo(){
this.$u.get('app/getDeviceBySn?sn=' + this.sn).then((res) => {
console.log(res, 'rererer');
if (res.code === 200) {
// console.log(this.areaId,);
this.deviceInfos = res.data
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
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
if (num == 0) {
uni.showLoading({
title: '加载中...'
})
console.log('点击了....1');
this.$u.post('/appVerify/device/unlock?sn=' + this.sn+'&orderNo='+this.orderinfo.orderNo).then((res) => {
if (res.code == 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.deviceInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.hideLoading()
this.bulebtn(2)
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
} else if (num == 1) {
uni.showLoading({
title: '加载中...'
})
console.log('点击了....2');
this.$u.post('/appVerify/device/lock?sn=' + this.sn+'&orderNo='+this.orderinfo.orderNo).then((res) => {
if (res.code == 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.deviceInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.hideLoading()
this.bulebtn(3)
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
} else if (num == 2) {
uni.showLoading({
title: '加载中...'
})
this.$u.post('/app/device/ring?sn=' + this.sn).then((res) => {
if (res.code == 200) {
uni.hideLoading()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.hideLoading()
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
this.bulebtn(1)
}
})
} else if (num == 3) {
} else if (num == 4) {
} else if (num == 5) {
} else if (num == 6) {
} else if (num == 7) {
} else if (num == 8) {
uni.showLoading({
title: '加载中...'
})
this.$u.post('/appVerify/device/reboot?sn=' + this.sn).then((res) => {
if (res.code == 200) {
this.deviceInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
// uni.hideLoading()
// this.bulebtn(4)
}
})
} else if (num == 9) {
uni.showLoading({
title: '加载中...'
})
this.$u.post('/appVerify/device/seatCushionLock?sn=' + this.sn).then((res) => {
if (res.code == 200) {
this.deviceInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
} else if (num == 10) {
uni.showLoading({
title: '加载中...'
})
this.$u.post('/appVerify/refreshDevice?sn=' + this.sn).then((res) => {
if (res.code == 200) {
this.deviceInfo()
uni.showToast({
title: '操作成功',
icon: 'none',
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 = '蓝牙连接中'
// 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.maskloading = false
vm.deviceInfo()
// 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.deviceInfo()
// uni.hideLoading()
// vm.remakr()
},
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);
// vm.dl = (vm.orderinfo.deviceAmount / vm.orderinfo.unitPrice).toFixed(2); // 使用 vm 访问 Vue 实例的属性
xBlufi.notifySendCustomData({
customData: "11play1@"
});
vm.maskloading = false
vm.deviceInfo()
// 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: '连接蓝牙设备中...'
// });
// }
// }
},
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.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_MY_DATA:
this.loadPercent = options.data;
this.loadText = '文件读取中'
console.log("文件读取中", options.data);
break;
case xBlufi.XBLUFI_TYPE.TYPE_RECIEVE_CUSTON_DATA:
// this.isband = true
// this.ver_data = this.parseCustomData(options.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;
}
},
}
}
</script>
<style lang="scss">
page {
overflow-y: auto;
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/uYRs7Cv2Pbp95w3KjGO3');
background-size: cover;
/* 背景图片等比缩放以覆盖整个容器 */
background-position: center;
/* 背景图片居中显示 */
background-repeat: no-repeat;
/* 防止背景图片重复 */
min-height: 100vh;
/* 确保页面至少有 100% 的视窗高度,避免高度不足导致无法滚动 */
}
.page {
width: 750rpx;
// height: 100vh;
padding-bottom: 200rpx;
.bot_btn{
position: fixed;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
width: 750rpx;
height: 174rpx;
background: #FFFFFF;
box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0,0,0,0.3);
border-radius: 0rpx 0rpx 0rpx 0rpx;
.btn{
display: flex;
align-items: center;
justify-content: center;
width: 682rpx;
height: 84rpx;
background: #4297F3;
border-radius: 42rpx 42rpx 42rpx 42rpx;
font-weight: 500;
font-size: 36rpx;
color: #FFFFFF;
}
}
.order_info {
position: relative;
margin: 0 auto;
margin-top: 44rpx;
padding: 18rpx 24rpx 40rpx;
width: 698rpx;
border-radius: 30rpx;
background: #FFFFFF;
.btns {
position: absolute;
right: 32rpx;
bottom: 52rpx;
display: flex;
align-items: center;
justify-content: center;
width: 174rpx;
height: 68rpx;
background: #4297F3;
border-radius: 42rpx 42rpx 42rpx 42rpx;
font-weight: 600;
font-size: 36rpx;
color: #FFFFFF;
}
.info_top {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.tit1 {
font-weight: 600;
font-size: 28rpx;
color: #3D3D3D;
}
.txt1 {
font-weight: 400;
font-size: 24rpx;
color: #3D3D3D;
image {
margin-left: 6rpx;
width: 20rpx;
height: 20rpx;
}
}
}
.info_cont {
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
image {
width: 108rpx;
height: 108rpx;
}
.infos {
margin-top: 30rpx;
margin-left: 36rpx;
.time {
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
}
.data {
margin-top: 10rpx;
font-weight: 400;
font-size: 32rpx;
color: #F14C4C;
}
.tips1 {
margin-top: 8rpx;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
}
}
}
.store_car {
border-radius: 30rpx;
width: 696rpx;
padding: 30rpx 28rpx 0 28rpx;
margin: 0 auto;
margin-top: 50rpx;
// height: 342rpx;
// margin-bottom: 100rpx;
background: #FFFFFF;
.store_btn_li {
display: flex;
flex-wrap: nowrap;
margin-top: 26rpx;
margin-left: -28rpx;
border-top: 1rpx solid #D8D8D8;
width: 696rpx;
height: 102rpx;
.store_btn:first-child {
border-right: 1rpx solid #D8D8D8;
}
.store_btn {
display: flex;
align-items: center;
justify-content: center;
width: 50%;
height: 102rpx;
image {
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
margin-right: 18rpx;
width: 40rpx;
height: 40rpx;
}
}
}
.line {
width: 100%;
height: 1rpx;
background: #D8D8D8;
}
.address {
margin-top: 48rpx;
font-weight: 400;
font-size: 36rpx;
color: #3D3D3D;
}
.time {
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
.tops {
display: flex;
align-items: center;
font-weight: 600;
font-size: 36rpx;
color: #3D3D3D;
.type {
margin-right: 10rpx;
font-weight: 400;
font-size: 24rpx;
color: #0D75E5;
padding: 6rpx 12rpx;
background: #DCEDFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
}
}
}
.btn_box {
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-around;
.btn1 {
width: 130rpx;
display: flex;
flex-wrap: wrap;
justify-content: center;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
image {
margin-bottom: 10rpx;
width: 120rpx;
height: 120rpx;
}
}
.btn2 {
width: 268rpx;
height: 90rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #ebebeb;
border-radius: 45rpx;
padding-right: 30rpx;
position: relative;
overflow: hidden;
.slider {
width: 90rpx;
height: 90rpx;
background-color: #fff;
border-radius: 45rpx;
position: absolute;
left: 0;
}
}
}
.tips {
margin-top: 18rpx;
display: flex;
align-items: center;
justify-content: center;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
.yuan {
margin-right: 14rpx;
border-radius: 50%;
width: 16rpx;
height: 16rpx;
background: #FF8282;
}
}
.car_img {
margin: 0 auto;
margin-top: -108rpx;
width: 440rpx;
height: 340rpx;
}
.power {
padding-top: 60rpx;
margin: 0 auto;
margin-top: 60rpx;
width: 562rpx;
height: 348rpx;
background-image: url('https://lxnapi.ccttiot.com/bike/img/static/unqrw7KFxtvIjYBfBGus');
background-size: cover;
/* 背景图片等比缩放以覆盖整个容器 */
background-position: center;
/* 背景图片居中显示 */
.tit {
width: 100%;
text-align: center;
font-weight: 600;
font-size: 32rpx;
color: #3D3D3D;
}
.num {
margin-top: 16rpx;
width: 100%;
text-align: center;
font-weight: 600;
font-size: 88rpx;
color: #3D3D3D;
span {
font-size: 32rpx;
font-weight: 500;
}
}
}
.top {
margin-top: 200rpx;
width: 750rpx;
padding: 0 32rpx;
display: flex;
align-items: center;
justify-content: space-between;
.model {
font-weight: 600;
font-size: 48rpx;
color: #3D3D3D;
}
.switch {
// margin-left: auto;
width: 272rpx;
height: 60rpx;
background: #FFFFFF;
border-radius: 30rpx 30rpx 30rpx 30rpx;
font-weight: 400;
font-size: 32rpx;
color: #FF8282;
display: flex;
flex-wrap: nowrap;
align-items: center;
.replay {
margin-left: 22rpx;
margin-right: 14rpx;
width: 32rpx;
height: 32rpx;
}
.bluetooth {
margin-left: auto;
width: 60rpx;
height: 60rpx;
}
}
}
.fixed {
z-index: 999;
position: fixed;
top: 0;
}
}
</style>