From 2800fa4f32f3900509cb4d6eefaf2bfaf54efdd7 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Mon, 21 Apr 2025 18:29:09 +0800
Subject: [PATCH] fix: 天气显示

---
 src/components/CurrentTaskDetails/TaskDetailsHead.vue |  154 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 106 insertions(+), 48 deletions(-)

diff --git a/src/components/CurrentTaskDetails/TaskDetailsHead.vue b/src/components/CurrentTaskDetails/TaskDetailsHead.vue
index 708ce52..472373b 100644
--- a/src/components/CurrentTaskDetails/TaskDetailsHead.vue
+++ b/src/components/CurrentTaskDetails/TaskDetailsHead.vue
@@ -1,19 +1,19 @@
 <template>
 	<div class="detailsHead">
-		<div class="droneName">小蓝工业园</div>
+		<div class="droneName" :title="taskDetails.device_names">{{ taskDetails.device_names }}</div>
 		<div class="infoListBox">
 			<div v-for="item in infoList">
-				<div class="infoValue">{{ item.value }}</div>
+				<div class="infoValue" :title="item.value">{{ item.value }}{{ item.unit }}</div>
 				<div class="infoTitle">{{ item.title }}</div>
 			</div>
 		</div>
 		<div class="controlBtn">
-			<el-icon class="refresh">
+			<el-icon class="refresh" @click="refreshLive">
 				<Refresh />
 			</el-icon>
 			<div class="switchBtn" @click="switchBtn">
-				<div :class="{ open: open }">NO</div>
-				<div :class="{ open: !open }">OFF</div>
+				<div :class="{ open: !isAiLive }">OFF</div>
+				<div :class="{ open: isAiLive }">ON</div>
 			</div>
 		</div>
 	</div>
@@ -22,38 +22,47 @@
 <script setup>
 import { Refresh } from '@element-plus/icons-vue'
 import { getFlightStatistics } from '@/api/home/machineNest'
-import { throttle } from 'lodash'
-import { getLnglatAltitude } from '@/utils/cesium/mapUtil'
-import _ from 'lodash'
+import _, { throttle } from 'lodash'
+import { getLnglatAltitude, getLnglatDist } from '@/utils/cesium/mapUtil'
+import { fourGQuality, SDRQuality } from '@/const/drc'
+import { ElMessage } from 'element-plus'
+import EventBus from '@/event-bus'
 
 const taskDetailsViewer = inject('taskDetailsViewer')
-const deviceOsdInfo = inject('deviceOsdInfo')
+const wsInfo = inject('wsInfo')
 const dockSn = inject('dockSn')
-const open = ref(true)
+const taskDetails = inject('taskDetails')
+const isAiLive = inject('isAiLive')
 const singleTotal = ref({})
-const host = computed(() => deviceOsdInfo?.value?.data?.host || {})
 
-const infoList = computed(() => {
-	const { longitude, latitude, height, payloads } = host?.value || {}
-	return [
-		{ title: '实时真高', value: '0' },
-		{ title: '绝对高度', value: _.round(height || 0, 1) + 'm' },
-		{ title: '水平速度', value: '0' },
-		{ title: '垂直速度', value: '0' },
-		{ title: '经度', value: _.round(longitude || 0, 2) },
-		{ title: '纬度', value: _.round(latitude || 0, 2) },
-		{ title: '4G信号', value: '0' },
-		{ title: 'SDR信号', value: '0' },
-		{ title: 'GPS搜星数', value: '0' },
-		{ title: 'RTK搜星数', value: '0' },
-		{ title: '距离机场', value: '0' },
-		{ title: '飞行时长', value: (singleTotal.value?.hour_count || 0) + '小时' },
-		{ title: '电池电量', value: (host?.value?.battery?.capacity_percent || 0) + '%' },
-	]
-})
+// 不要随意更换顺序,有联动
+const infoList = ref([
+	{ index: 0, title: '实时真高', value: 0, unit: 'M' },
+	{ index: 1, title: '绝对高度', value: 0, unit: 'M' },
+	{ index: 2, title: '水平速度', value: 0, unit: 'M/s' },
+	{ index: 3, title: '垂直速度', value: 0, unit: 'M/s' },
+	{ index: 4, title: '经度', value: 0, unit: '°' },
+	{ index: 5, title: '纬度', value: 0, unit: '°' },
+	{ index: 6, title: '风速', value: 0, unit: 'M/s' },
+	{ index: 7, title: '4G信号', value: '-', unit: '' },
+	{ index: 8, title: 'SDR信号', value: '-', unit: '' },
+	{ index: 9, title: 'GPS搜星数', value: 0, unit: '' },
+	{ index: 10, title: 'RTK搜星数', value: 0, unit: '' },
+	{ index: 11, title: '距离机场', value: 0, unit: 'M' },
+	{ index: 12, title: '飞行时长', value: 0, unit: '小时' },
+	{ index: 13, title: '电池电量', value: 0, unit: '%' },
+])
 
 const switchBtn = () => {
-	open.value = !open.value
+	if (isAiLive.value) {
+		EventBus.emit('CurrentTaskDetails-getDroneLiveUrl')
+	} else {
+		EventBus.emit('CurrentTaskDetails-getAiLiveUrl')
+	}
+}
+
+function refreshLive() {
+	EventBus.emit('CurrentTaskDetails-getDroneLiveUrl',true)
 }
 
 function getFlightStatisticsFun() {
@@ -63,23 +72,60 @@
 	})
 }
 
+const trueAltitude = inject('trueAltitude')
+
+// 获取真实高度
 function getRealTimeReallyHigh() {
 	if (!taskDetailsViewer?.value) return
-	const { latitude, longitude, height } = host?.value || {}
+	const device_osd_host = wsInfo?.value?.device_osd?.data?.host || {}
+	const { latitude, longitude, height } = device_osd_host
 	if (!latitude) return
 	getLnglatAltitude(longitude, latitude, taskDetailsViewer.value).then(res => {
-		const findIndex = infoList.value.findIndex(item => item.title === '实时真高')
-		infoList.value[findIndex].value = _.round(height - res?.height, 1) + 'm'
+		const last = height - res?.height
+		infoList.value[0].value = last ? _.round(height - res?.height, 1) : infoList.value[0].value
+		trueAltitude.value = infoList.value[0].value
 	})
 }
 
-const getRealTimeReallyHighThrottle = throttle(getRealTimeReallyHigh, 500, { leading: true, trailing: true })
+function getHeadInfo() {
+	const device_osd_host = wsInfo?.value?.device_osd?.data?.host || {}
+	const dock_osd_host = wsInfo?.value?.dock_osd?.data?.host || {}
+	const { longitude, latitude, height, horizontal_speed, vertical_speed, wind_speed, battery } = device_osd_host
+	const { longitude: dockLon, latitude: dockLat, wireless_link } = dock_osd_host
+	let dist = infoList.value[11].value
+	if (longitude && latitude && dockLon && dockLat) {
+		dist = _.round(getLnglatDist(longitude, latitude, dockLon, dockLat), 0)
+	}
+
+	const newGPSNum = dock_osd_host?.position_state?.gps_number
+	const newRTKNum = dock_osd_host?.position_state?.rtk_number
+	const newFourG = wireless_link?.['4g_quality']
+	const newSdr = wireless_link?.['sdr_quality']
+
+	infoList.value[1].value = _.round(height || 0, 1)
+	infoList.value[2].value = _.round(horizontal_speed || 0, 0)
+	infoList.value[3].value = _.round(vertical_speed || 0, 0)
+	infoList.value[4].value = _.round(longitude || 0, 2)
+	infoList.value[5].value = _.round(latitude || 0, 2)
+	infoList.value[6].value = _.round(wind_speed || 0, 0)
+	if (newFourG !== undefined) infoList.value[7].value = fourGQuality[newFourG]
+	if (newSdr !== undefined) infoList.value[8].value = SDRQuality[newSdr]
+	if (newGPSNum !== undefined) infoList.value[9].value = newGPSNum
+	if (newRTKNum !== undefined) infoList.value[10].value = newRTKNum
+	infoList.value[11].value = dist
+	infoList.value[12].value = _.round(singleTotal.value?.hour_count || 0, 1)
+	infoList.value[13].value = battery?.capacity_percent || 0
+	getRealTimeReallyHigh()
+}
+
+const getHeadInfoThrottle = throttle(getHeadInfo, 1000, { leading: true, trailing: true })
+
 watch(
-	deviceOsdInfo,
+	wsInfo,
 	() => {
-		getRealTimeReallyHighThrottle()
+		getHeadInfoThrottle()
 	},
-	{ immediate: true }
+	{ immediate: true, deep: true }
 )
 
 watch(
@@ -117,6 +163,10 @@
 		color: #ededed;
 		text-align: center;
 		line-height: 42px;
+		white-space: nowrap;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		padding: 0 10px;
 	}
 
 	.infoListBox {
@@ -124,21 +174,29 @@
 		flex: 1;
 		display: flex;
 		align-items: center;
-		justify-content: space-around;
+		justify-content: space-evenly;
 		font-family: Segoe UI, Segoe UI;
 		font-weight: 400;
+		margin-left: 15px;
 
-		.infoValue {
-			font-size: 20px;
-			color: #ffffff;
-			line-height: 15px;
-			margin-bottom: 10px;
-		}
+		> div {
+			width: 90px;
 
-		.infoTitle {
-			font-size: 12px;
-			color: #d2e8fa;
-			line-height: 15px;
+			.infoValue {
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				font-size: 20px;
+				color: #ffffff;
+				line-height: 18px;
+				margin-bottom: 10px;
+			}
+
+			.infoTitle {
+				font-size: 12px;
+				color: #d2e8fa;
+				line-height: 15px;
+			}
 		}
 	}
 

--
Gitblit v1.9.3