dragon-web/src/views/vehicle/record.vue

249 lines
8.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<script>
import AMapLoader from '@amap/amap-jsapi-loader';
import {deleteRecord, getList, historyMap} from "@/api/table";
export default {
components: {},
props: {},
data() {
return{
duration:2000,
AMap: null,
map: null,
historyList:[],
recordId:null,
recordCar:{
vin:null,
startTime:null,
endTime:null
},
arr:[],
lineArr:null,
carMsg:[],
}
},
mounted() {
},
created() {
this.getList()
},
methods: {
deleteRecord(recordId){
this.recordId = recordId
deleteRecord(this.recordId).then(res=>{
this.$message.success("删除成功!")
location.reload()
})
},
getList(){
getList().then(res=>{
this.historyList = res.data
})
},
doDo(recordCar){
this.recordCar.vin = recordCar.vin
this.recordCar.startTime = recordCar.startTime
this.recordCar.endTime = recordCar.endTime
historyMap(this.recordCar).then(res=>{
console.log(res)
this.carMsg = res.data
res.data.forEach(item=>{
this.carMsg = item
this.arr.push(item.longitude.replace(/"/g, "") +","+item.latitude.replace(/"/g, ""))
this.lineArr = this.arr.map(item => item.trim().replace(/'/g, '').split(','))
console.log(this.lineArr)
})
})
this.initMap()
this.startAnimation()
},
initMap() {
AMapLoader.load({
key: "0b5f26b194361cbc9571101bc2856962", // 申请好的Web端开发者Key首次调用 load 时必填
version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
plugins: [
"AMap.Scale",
"AMap.HawkEye",
"AMap.ToolBar",
"AMap.AutoComplete",
"AMap.PlaceSearch",
"AMap.ControlBar",
"AMap.MouseTool",
"AMap.DragRoute",
"AMap.MoveAnimation"], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
}).then((AMap) => {
// 获取到作为地图容器的DOM元素创建地图实例
this.map = new AMap.Map("container", { //设置地图容器id
resizeEnable: true,
viewMode: "2D", // 使用3D视图
zoomEnable: true, // 地图是否可缩放默认值为true
dragEnable: true, // 地图是否可通过鼠标拖拽平移默认为true
doubleClickZoom: true, // 地图是否可通过双击鼠标放大地图默认为true
zoom: 13, //初始化地图级别
center: this.lineArr[0], // 初始化中心点坐标 北京
// mapStyle: "amap://styles/darkblue", // 设置颜色底层
})
this.marker = new AMap.Marker({
position: this.lineArr[0],
icon: "https://a.amap.com/jsapi_demos/static/demo-center-v2/car.png",
offset: new AMap.Pixel(-13, -26),
});
this.map.add(this.marker)
// 绘制轨迹
this.polyline = new AMap.Polyline({
path: this.lineArr,
showDir: true,
strokeColor: "#28F", //线颜色
// strokeOpacity: 1, //线透明度
strokeWeight: 6, //线宽
// strokeStyle: "solid" //线样式
});
this.map.add(this.polyline)
// 走过的路径
this.passedPolyline = new AMap.Polyline({
strokeColor: "#AF5", //线颜色
strokeWeight: 6, //线宽
});
this.map.add(this.passedPolyline)
// 监听marker移动
this.marker.on('moving', (e) => {
this.passedPolyline.setPath(e.passedPath); // 设置路径样式
this.map.setCenter(e.target.getPosition(), true) // 设置地图中心点
});
this.map.setFitView(); // 根据覆盖物自适应展示地图
})
},
startAnimation () {
setTimeout(()=>{
AMap.plugin('AMap.MoveAnimation', () => {
console.log('开始回放')
this.marker.moveAlong(this.lineArr, {
// 每一段的时长
duration: this.duration,//可根据实际采集时间间隔设置
// JSAPI2.0 是否延道路自动设置角度在 moveAlong 里设置
autoRotation: true,
});
})
},2000)
},
},
}
</script>
<template>
<div>
<div v-for="car in carMsg" :key="car.id">
<p>主键id:{{car.id}}</p>
<p>VIN:{{car.vin}}</p>
<p>时间戳:{{car.createTime}}</p>
<p>经度:{{car.longitude}}</p>
<p>维度:{{car.latitude}}</p>
<p>速度:{{car.speed}}</p>
<p>里程:{{car.mileage}}</p>
<p>总电压:{{car.voltage}}</p>
<p>总电流:{{car.current}}</p>
<p>绝缘电阻:{{car.resistance}}</p>
<p>档位:{{car.gear}}</p>
<p>加速踏板行程值:{{car.accelerationPedal}}</p>
<p>制动踏板行程值:{{car.brakePedal}}</p>
<p>燃料消耗率:{{car.fuelConsumptionRate}}</p>
<p>电机控制器温度:{{car.motorControllerTemperature}}</p>
<p>电机转速:{{car.motorSpeed}}</p>
<p>电机转矩:{{car.motorTorque}}</p>
<p>电机温度:{{car.motorTemperature}}</p>
<p>电机电压:{{car.motorVoltage}}</p>
<p>电机电流:{{car.motorCurrent}}</p>
<p>动力电池剩余电量SOC:{{car.remainingBattery}}</p>
<p>当前状态允许的最大反馈功率:{{car.maximumFeedbackPower}}</p>
<p>当前状态允许最大放电功率:{{car.maximumDischargePower}}</p>
<p>BMS自检计数器:{{car.selfCheckCounter}}</p>
<p>动力电池充放电电流:{{car.totalBatteryCurrent}}</p>
<p>动力电池负载端总电压V3:{{car.totalBatteryVoltage}}</p>
<p>单次最大电压:{{car.singleBatteryMaxVoltage}}</p>
<p>单体电池最低电压:{{car.singleBatteryMinVoltage}}</p>
<p>单体电池最高温度:{{car.singleBatteryMaxTemperature}}</p>
<p>单体电池最低温度:{{car.singleBatteryMinTemperature}}</p>
<p>动力电池可用容量:{{car.availableBatteryCapacity}}</p>
<p>车辆状态:{{car.vehicleStatus}}</p>
<p>充电状态:{{car.chargingStatus}}</p>
<p>运行状态:{{car.operatingStatus}}</p>
<p>SOC:{{car.socStatus}}</p>
<p>可充电储能装置工作状态:{{car.chargingEnergyStorageStatus}}</p>
<p>驱动电机状态:{{car.driveMotorStatus}}</p>
<p>定位是否有效:{{car.positionStatus}}</p>
<p>EAS(汽车防盗系统)状态:{{car.easStatus}}</p>
<p>PTC(电动加热器)状态:{{car.ptcStatus}}</p>
<p>EPS(电动助力系统)状态:{{car.epsStatus}}</p>
<p>ABS(防抱死)状态:{{car.absStatus}}</p>
<p>MCU(电机/逆变器)状态:{{car.mcuStatus}}</p>
<p>动力电池加热状态:{{car.heatingStatus}}</p>
<p>动力电池当前状态:{{car.batteryStatus}}</p>
<p>动力电池保温状态:{{car.batteryInsulationStatus}}</p>
</div>
<div>
<el-form>
<table style="width: 100% ">
<tr>
<td>VIN</td>
<td><el-input placeholder="请输入车辆VIN"></el-input></td>
<td>开始时间</td>
<td><el-input placeholder="请输入开始时间"></el-input></td>
<td>结束时间</td>
<td><el-input placeholder="请输入结束时间"></el-input></td>
<td>
<el-button type="primary">搜索</el-button>
<el-button type="danger">重置</el-button>
</td>
</tr>
</table>
</el-form>
<el-table :data="historyList">
<el-table-column label="历史轨迹ID">
<template slot-scope="scope">
{{scope.row.recordId}}
</template>
</el-table-column>
<el-table-column label="VIN">
<template slot-scope="scope">
{{scope.row.vin}}
</template>
</el-table-column>
<el-table-column label="开始时间">
<template slot-scope="scope">
{{scope.row.startTime}}
</template>
</el-table-column>
<el-table-column label="结束时间">
<template slot-scope="scope">
{{scope.row.endTime}}
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button @click="doDo(scope.row)" type="text">历史轨迹</el-button>
<el-button type="info" @click="deleteRecord(scope.row.recordId)"></el-button>
</template>
</el-table-column>
</el-table>
</div>
<div id="container"></div>
</div>
</template>
<style scoped lang="scss">
#container{
width: 50%;
height: 400px;
}
</style>