283 lines
6.8 KiB
Vue
283 lines
6.8 KiB
Vue
<!-- 换电 -->
|
||
<template>
|
||
<div class="b-body-gray">
|
||
<scroll-view scroll-y="true" :style="{height:scrollHeight+'px'}">
|
||
<div style="padding-top: 5px;">
|
||
<uni-forms :border="true" :label-width="90">
|
||
<uni-card>
|
||
<uni-forms-item label="车辆编号:">
|
||
<bikeCodeScan ref="refbikeScan" v-model="bikeCode" @scan-change="getBikeInfo" />
|
||
</uni-forms-item>
|
||
<uni-forms-item label="车辆状态:">
|
||
<div class="divContent divCenter">{{formdata.online}}</div>
|
||
<div class="divContent">{{formdata.timestamp}}</div>
|
||
</uni-forms-item>
|
||
<uni-forms-item label="老电池编号:">
|
||
<div class="divContent divCenter">{{formdata.oldBatteryCode}}</div>
|
||
</uni-forms-item>
|
||
<uni-forms-item label="电池电量:">
|
||
<div class="divContent divCenter">{{formdata.soc?formdata.soc:0}}%</div>
|
||
</uni-forms-item>
|
||
<uni-forms-item label="车辆位置:">
|
||
<uni-list :border="false">
|
||
<uni-list-item showArrow title="查看地图"
|
||
:note="formdata.latitude?formdata.latitude+','+formdata.longitude:''"
|
||
link="navigateTo"
|
||
:to="'/pages/map/map-findbike?longitude='+formdata.longitude+'&latitude='+formdata.latitude" />
|
||
</uni-list>
|
||
</uni-forms-item>
|
||
|
||
<div class="divBtn">
|
||
<text :class="formdata.ecuId?'b-btn-babyblue':'b-btn-gray'" v-for="item in arrEcuBtn"
|
||
@click="checkecu(item.url)">{{item.title}}</text>
|
||
</div>
|
||
<uni-forms-item label="新电池编号:">
|
||
<scanCode v-model="newBatteryCode" placeholder="请输入" />
|
||
</uni-forms-item>
|
||
<div class="b-btn-blue" style="text-align: center;" @click="checkecu('openBatteryLock')">
|
||
打开电池仓
|
||
</div>
|
||
<div style="text-align: right;">
|
||
<text style="margin-right: 5px;margin-top: 5px;">
|
||
<uni-icons custom-prefix="iconfont" type="icon-ebikeguzhangshangbao1" size="20"
|
||
color="#999" />
|
||
</text>
|
||
<text class="b-font-gray-sm">电池仓打不开,</text>
|
||
<text class="b-font-blue-sm" style="font-weight: bold;" @click="openfaultreport">上报故障</text>
|
||
</div>
|
||
</uni-card>
|
||
|
||
<div style="padding: 15px;">
|
||
<div class="b-font-gray-base" style="margin-bottom: 10px;font-weight: bold;">温馨提示</div>
|
||
<div class="b-font-gray-sm">1、读取到新电池的电量即视为更换成功新的电池;</div>
|
||
<div class="b-font-gray-sm">2、电池更换完成自动读取设备状态和电池电量,过程可能需要个
|
||
几分钟;</div>
|
||
<div class="b-font-gray-sm">3、更换完成请点击下面完成换电按钮;</div>
|
||
<div class="b-font-gray-sm">4、如果直接点击更换完成,电量会暂时变成41%,系统检测到电
|
||
量上报后会自动变成上报的电量;</div>
|
||
</div>
|
||
</uni-forms>
|
||
</div>
|
||
</scroll-view>
|
||
</div>
|
||
|
||
<div class="divBottom">
|
||
<text class="b-btn-white" style="margin-right: 15px;" @click="refresh">刷新</text>
|
||
<text class="b-btn-blue" @click="completebatter">完成换电</text>
|
||
</div>
|
||
</template>
|
||
|
||
<script setup>
|
||
import * as api from "@/utils/api.js";
|
||
import dayjs from 'dayjs';
|
||
import {
|
||
showModelMessage
|
||
} from "@/utils/tools.js";
|
||
import {
|
||
ref,
|
||
watch,
|
||
onMounted
|
||
} from "vue";
|
||
import {
|
||
onLoad
|
||
} from "@dcloudio/uni-app";
|
||
//车辆信息
|
||
let bikeCode = ref(null); //车辆编号
|
||
const refbikeScan = ref(null);
|
||
let formdata = ref({
|
||
bikeId: "",
|
||
ecuId: "",
|
||
latitude: null,
|
||
longitude: null,
|
||
oldBatteryCode: "",
|
||
online: null,
|
||
soc: "", //电量
|
||
timestamp: ""
|
||
});
|
||
let newBatteryCode = ref(''); //新电池编号
|
||
|
||
// 获取设备信息
|
||
const systemInfo = uni.getSystemInfoSync();
|
||
// 获取屏幕高度和状态栏高度
|
||
const screenHeight = systemInfo.screenHeight;
|
||
let scrollHeight = screenHeight - 150;
|
||
|
||
//按钮
|
||
let arrEcuBtn = [{
|
||
title: "寻车铃声",
|
||
url: "findEbike",
|
||
}, {
|
||
title: "开锁",
|
||
url: "unlock",
|
||
}, {
|
||
title: "关锁",
|
||
url: "lock",
|
||
}];
|
||
|
||
|
||
//加载
|
||
onLoad((option) => {
|
||
const {
|
||
bikeCode
|
||
} = option;
|
||
getBikeInfo(bikeCode);
|
||
})
|
||
onMounted(() => {
|
||
if (bikeCode.value != "") {
|
||
if (refbikeScan.value) {
|
||
refbikeScan.value.onSetValue(bikeCode.value); // 调用子组件暴露的方法来更新子组件值
|
||
}
|
||
|
||
}
|
||
})
|
||
|
||
|
||
//获取车辆信息
|
||
const getBikeInfo = (bikecode) => {
|
||
if (bikecode == bikeCode.value) return;
|
||
const params = {
|
||
bikeCode: bikecode
|
||
};
|
||
bikeCode.value = bikecode;
|
||
api.callEbikeBatteryApply("getBikeMsg", params, "get").then(res => {
|
||
const {
|
||
code,
|
||
data,
|
||
message
|
||
} = res;
|
||
if (code === 500) {
|
||
showModelMessage(message);
|
||
formdata.value = {};
|
||
return;
|
||
}
|
||
if (arrEcuBtn.length < 4) {
|
||
arrEcuBtn.push({
|
||
title: "关电池仓",
|
||
url: "closeBatteryLock",
|
||
});
|
||
}
|
||
const timestamp = data.timestamp;
|
||
let newtime = timestamp ? dayjs(timestamp * 1000).format('YYYY-MM-DD HH:mm:ss') : "";
|
||
const newdata = {
|
||
...data,
|
||
timestamp: newtime
|
||
};
|
||
formdata.value = {
|
||
...newdata
|
||
};
|
||
})
|
||
|
||
}
|
||
//跳转地图
|
||
const openMap = () => {
|
||
const {
|
||
longitude,
|
||
latitude
|
||
} = formdata.value;
|
||
uni.navigateTo({
|
||
url: "./map-findebike"
|
||
})
|
||
}
|
||
//中控操作
|
||
const checkecu = (url) => {
|
||
const {
|
||
ecuId,
|
||
bikeId
|
||
} = formdata.value;
|
||
if (!ecuId) {
|
||
showModelMessage("请先扫码车辆编号!");
|
||
return;
|
||
}
|
||
api.callCoreApi(url, {
|
||
ecuId,
|
||
bikeId
|
||
}, 'get').then(res => {
|
||
const {
|
||
code,
|
||
message
|
||
} = res;
|
||
showModelMessage(message);
|
||
})
|
||
}
|
||
//上报故障
|
||
const openfaultreport = () => {
|
||
const bikecode = bikeCode.value;
|
||
if (!bikecode) {
|
||
showModelMessage("请先扫码车辆编号!");
|
||
return;
|
||
}
|
||
uni.navigateTo({
|
||
url: "/pages/devops/faultreport/faultreport?bikeCode=" + bikecode
|
||
})
|
||
}
|
||
|
||
//刷新
|
||
const refresh = () => {
|
||
const bikecode = bikeCode.value;
|
||
if (!bikecode) {
|
||
showModelMessage("请先扫码车辆编号!");
|
||
return;
|
||
}
|
||
getBikeInfo(bikecode)
|
||
}
|
||
|
||
//完成换电
|
||
const completebatter = () => {
|
||
const bikeId = formdata.value.bikeId;
|
||
const bikecode = bikeCode.value;
|
||
const newbattercode = newBatteryCode.value
|
||
if (!bikecode) {
|
||
showModelMessage("请先扫码车辆编号!");
|
||
return;
|
||
}
|
||
if (!newbattercode) {
|
||
showModelMessage("请先扫码新电池编号!");
|
||
return;
|
||
}
|
||
//校验新电池
|
||
const params = {
|
||
bikeId,
|
||
newBatteryCode: newbattercode,
|
||
bikeCode: bikecode
|
||
}
|
||
api.callEbikeBatteryApply("change", params).then(res => {
|
||
const {
|
||
code,
|
||
message
|
||
} = res;
|
||
showModelMessage(message);
|
||
if (code == 200) {
|
||
uni.navigateBack();
|
||
}
|
||
})
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.divContent {}
|
||
|
||
.divBtn {
|
||
height: 35px;
|
||
}
|
||
|
||
.divBtn text {
|
||
margin-right: 5px;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.divCenter {
|
||
display: flex;
|
||
align-items: center;
|
||
height: 35px
|
||
}
|
||
|
||
.divBottom {
|
||
position: absolute;
|
||
bottom: 0px;
|
||
padding: 0px 15px;
|
||
text-align: center;
|
||
background: white;
|
||
width: 100%;
|
||
line-height: 55px;
|
||
}
|
||
</style> |