2025-04-14 10:57:27 +08:00

283 lines
6.8 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>
<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>