Compare commits

..

No commits in common. "8b7a2161bacc7771daa9834a6fb16dbe0e6a9d82" and "607ab15cf917d7aface6bf950f39ed6d0bea2436" have entirely different histories.

3 changed files with 14 additions and 95 deletions

View File

@ -177,7 +177,6 @@ export default {
this.init().then(() => { this.init().then(() => {
// //
this.map.on('load', () => { this.map.on('load', () => {
this.$emit('map-ready') //
/* 更新样式,添加自定义 sprite */ /* 更新样式,添加自定义 sprite */
// //
@ -356,26 +355,6 @@ export default {
}), 'top-left') }), 'top-left')
} }
}, },
/**
* @description 通用地图图层和数据源清除方法
* @param {Array} layerIds - 要清除的图层ID数组
* @param {Array} sourceIds - 要清除的数据源ID数组
*/
clearMapElements (layerIds = [], sourceIds = []) {
//
layerIds.forEach(id => {
if (this.map.getLayer(id)) {
this.map.removeLayer(id)
}
})
//
sourceIds.forEach(id => {
if (this.map.getSource(id)) {
this.map.removeSource(id)
}
})
},
/** /**
* @description: 清除地图上的航线 * @description: 清除地图上的航线
*/ */
@ -750,10 +729,9 @@ export default {
* @description: 镜头跳转 * @description: 镜头跳转
* @param {obj} lonLat {lon:lon,lat:lat} 经纬度 * @param {obj} lonLat {lon:lon,lat:lat} 经纬度
*/ */
goto (lonLat, zoom = 18) { goto (lonLat) {
this.map.flyTo({ this.map.flyTo({
center: lonLat, center: lonLat,
zoom: zoom,
speed: 2, speed: 2,
curve: 1, curve: 1,
easing (t) { easing (t) {

View File

@ -7,22 +7,19 @@
<el-radio-button label="飞行时长"></el-radio-button> <el-radio-button label="飞行时长"></el-radio-button>
<el-radio-button label="飞行距离"></el-radio-button> <el-radio-button label="飞行距离"></el-radio-button>
<el-radio-button label="消耗电量"></el-radio-button> <el-radio-button label="消耗电量"></el-radio-button>
<el-radio-button label="飞行轨迹"></el-radio-button>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="chart-area" v-if="flyDataList.length"> <div class="chart-area">
<div v-if="boxShow" id="main" class="chart-container"></div> <div v-if="flyDataList.length" id="main" class="chart-container"></div>
<map-box v-else ref="mapbox" @map-ready="onMapReady"/> <div v-else class="no-data-tip">暂无数据</div>
</div> </div>
<div v-else class="no-data-tip">暂无数据</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import * as echarts from 'echarts' import * as echarts from 'echarts'
import MapBox from '@/components/MapBox'
import { getFlyData } from '@/utils/api/table' import { getFlyData } from '@/utils/api/table'
import DateRangePicker from '@/components/DateRangePicker' import DateRangePicker from '@/components/DateRangePicker'
@ -39,13 +36,11 @@ export default {
flyDataList: [], flyDataList: [],
selectedPlaneIdArr: this.$store.state.app.toFlyDataIdArr, selectedPlaneIdArr: this.$store.state.app.toFlyDataIdArr,
dateRange: [start, end], dateRange: [start, end],
radioClass: '飞行时长', radioClass: '飞行时长'
boxShow: true
} }
}, },
components: { components: {
DateRangePicker, DateRangePicker
MapBox
}, },
computed: { computed: {
source () { source () {
@ -90,14 +85,12 @@ export default {
const keyMap = { const keyMap = {
飞行时长: (item) => { 飞行时长: (item) => {
if (!item.start_time || !item.end_time) return 0 if (!item.start_time || !item.end_time) return 0
return Math.round((item.end_time - item.start_time) / 60) return (item.end_time - item.start_time) / 60
}, },
飞行距离: (item) => Number(item.distance || 0), 飞行距离: (item) => Number(item.distance || 0),
消耗电量: (item) => Number(item.power_used || 0) 消耗电量: (item) => Number(item.power_used || 0)
} }
if (this.radioClass === '飞行轨迹') return []//
this.flyDataList.forEach(item => { this.flyDataList.forEach(item => {
const planeName = item.plane_name const planeName = item.plane_name
const date = new Date(item.start_time * 1000) const date = new Date(item.start_time * 1000)
@ -152,10 +145,10 @@ export default {
} }
}, },
created () { created () {
this.loadFlyData()
}, },
watch: { watch: {
flyDataList (newVal) { flyDataList (newVal) {
//
if (!newVal.length && this.myChart) { if (!newVal.length && this.myChart) {
this.myChart.dispose() this.myChart.dispose()
this.myChart = null this.myChart = null
@ -164,15 +157,6 @@ export default {
this.initChart() this.initChart()
}) })
} }
//
if (!this.boxShow && newVal.length) {
this.onMapReady()
}
},
boxshow (val) {
if (!val) {
this.onMapReady()
}
}, },
dateRange: { dateRange: {
handler () { handler () {
@ -181,60 +165,15 @@ export default {
immediate: true immediate: true
}, },
source (newVal) { source (newVal) {
if (Array.isArray(newVal) && newVal.length > 1) { if (newVal.length > 1) {
this.initChart() this.initChart()
} }
}, },
radioClass (val) { radioClass () {
if (val === '飞行轨迹') { this.initChart()
this.boxShow = false
} else {
this.boxShow = true
this.$nextTick(() => {
this.initChart()
})
}
} }
}, },
methods: { methods: {
//
onMapReady () {
this.drawAllPathsOnMap()
},
//
drawAllPathsOnMap () {
if (!this.$refs.mapbox) return
//
this.$refs.mapbox.clearMapElements(['path'], ['path'])
//
this.flyDataList.forEach(item => {
if (!item.gps_path) return
try {
const pathArray = JSON.parse(item.gps_path)
if (Array.isArray(pathArray) && pathArray.length > 0) {
this.$refs.mapbox.createPathWithArray(pathArray)
}
} catch (e) {
console.warn('gps_path 解析失败', item.gps_path)
}
})
//
if (this.flyDataList.length > 0 && this.flyDataList[0].gps_path) {
try {
const firstPath = JSON.parse(this.flyDataList[0].gps_path)
if (Array.isArray(firstPath) && firstPath.length > 0) {
const [lon, lat] = firstPath[0]
this.$refs.mapbox.goto({ lon, lat })
}
} catch (e) {
//
}
}
},
//
async loadFlyData () { async loadFlyData () {
if (this.selectedPlaneIdArr.length === 0) { if (this.selectedPlaneIdArr.length === 0) {
this.$router.push('/register/index') this.$router.push('/register/index')
@ -252,6 +191,7 @@ export default {
const res = await getFlyData(this.selectedPlaneIdArr, startTimestamp, endTimestamp) const res = await getFlyData(this.selectedPlaneIdArr, startTimestamp, endTimestamp)
if (res.data.status === 1) { if (res.data.status === 1) {
this.flyDataList = res.data.dataList this.flyDataList = res.data.dataList
console.log('飞行数据列表:', this.flyDataList)
} else { } else {
this.$message.error(res.data.msg) this.$message.error(res.data.msg)
} }
@ -280,7 +220,7 @@ export default {
xAxis: { type: 'category' }, xAxis: { type: 'category' },
yAxis: { yAxis: {
gridIndex: 0, gridIndex: 0,
name: this.radioClass === '飞行时长' ? '分钟' : this.radioClass === '飞行距离' ? '米' : '毫安' name: this.radioClass === '飞行时长' ? '分钟' : this.radioClass === '飞行距离' ? '米' : 'mAh'
}, },
grid: { top: '55%' }, grid: { top: '55%' },
series: [ series: [

View File

@ -136,6 +136,7 @@ export default {
// mqtt // mqtt
for (const key in jsonData) { for (const key in jsonData) {
if (key === 'heartBeat') { if (key === 'heartBeat') {
console.log('接收到心跳信息', plane)
// watch // watch
plane.planeState.heartRandom = Math.random() plane.planeState.heartRandom = Math.random()
plane.planeState.heartBeat = jsonData.heartBeat plane.planeState.heartBeat = jsonData.heartBeat