| | |
| | | <template> |
| | | <div class="detailsHead"> |
| | | <div class="droneName" :title="taskDetails.name">{{taskDetails.name}}</div> |
| | | <div class="droneName" :title="taskDetails.name">{{ taskDetails.name }}</div> |
| | | <div class="infoListBox"> |
| | | <div v-for="item in infoList"> |
| | | <div class="infoValue">{{ item.value }}</div> |
| | | <div class="infoValue">{{ item.value }}{{ item.unit }}</div> |
| | | <div class="infoTitle">{{ item.title }}</div> |
| | | </div> |
| | | </div> |
| | | <div class="controlBtn"> |
| | | <el-icon class="refresh" @click="ElMessage.warning('加急开发中...')"> |
| | | <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> |
| | |
| | | import { getFlightStatistics } from '@/api/home/machineNest' |
| | | import _, { throttle } from 'lodash' |
| | | import { getLnglatAltitude, getLnglatDist } from '@/utils/cesium/mapUtil' |
| | | import { networkQuality } from '@/const/drc' |
| | | import { fourGQuality, SDRQuality } from '@/const/drc' |
| | | import { ElMessage } from 'element-plus' |
| | | import EventBus from '@/event-bus' |
| | | |
| | | const taskDetailsViewer = inject('taskDetailsViewer') |
| | | const wsInfo = inject('wsInfo') |
| | | const dockSn = inject('dockSn') |
| | | const taskDetails = inject('taskDetails') |
| | | const open = ref(true) |
| | | const isAiLive = inject('isAiLive') |
| | | const singleTotal = ref({}) |
| | | |
| | | // 不要随意更换顺序,有联动 |
| | | const infoList = ref([ |
| | | { title: '实时真高', value: 0 }, |
| | | { title: '绝对高度', value: 0 }, |
| | | { title: '水平速度', value: 0 }, |
| | | { title: '垂直速度', value: 0 }, |
| | | { title: '经度', value: 0 }, |
| | | { title: '纬度', value: 0 }, |
| | | { title: '风速', value: 0 }, |
| | | { title: '4G信号', value: 0 }, |
| | | { title: 'SDR信号', value: 0 }, |
| | | { title: 'GPS搜星数', value: 0 }, |
| | | { title: 'RTK搜星数', value: 0 }, |
| | | { title: '距离机场', value: 0 }, |
| | | { title: '飞行时长', value: 0 }, |
| | | { title: '电池电量', value: 0 }, |
| | | { 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: 0, unit: '' }, |
| | | { index: 8, title: 'SDR信号', value: 0, 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 = () => { |
| | | ElMessage.warning('加急开发中...') |
| | | open.value = !open.value |
| | | if (isAiLive.value) { |
| | | EventBus.emit('CurrentTaskDetails-getDroneLiveUrl') |
| | | } else { |
| | | EventBus.emit('CurrentTaskDetails-getAiLiveUrl') |
| | | } |
| | | } |
| | | |
| | | function refreshLive(){ |
| | | EventBus.emit('CurrentTaskDetails-getAiLiveUrl') |
| | | } |
| | | |
| | | function getFlightStatisticsFun() { |
| | |
| | | const { latitude, longitude, height } = device_osd_host |
| | | if (!latitude) return |
| | | getLnglatAltitude(longitude, latitude, taskDetailsViewer.value).then(res => { |
| | | const last = height - res?.height |
| | | infoList.value[0].value = last ? infoList.value[0].value : _.round(height - res?.height, 1) + 'm' |
| | | const last = height - res?.height |
| | | infoList.value[0].value = last ? infoList.value[0].value : _.round(height - res?.height, 1) |
| | | }) |
| | | } |
| | | |
| | |
| | | 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 } = dock_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) + 'M' |
| | | dist = _.round(getLnglatDist(longitude, latitude, dockLon, dockLat), 0) |
| | | } |
| | | const GPSNum = dock_osd_host?.position_state?.gps_number || infoList.value[9].value |
| | | const RTKNum = dock_osd_host?.position_state?.rtk_number || infoList.value[10].value |
| | | infoList.value = [ |
| | | { title: '实时真高', value: '0' }, |
| | | { title: '绝对高度', value: _.round(height || 0, 1) + 'M' }, |
| | | { title: '水平速度', value: _.round(horizontal_speed || 0, 0) + 'M/s' }, |
| | | { title: '垂直速度', value: _.round(vertical_speed || 0, 0) + 'M/s' }, |
| | | { title: '经度', value: _.round(longitude || 0, 2) }, |
| | | { title: '纬度', value: _.round(latitude || 0, 2) }, |
| | | { title: '风速', value: _.round(wind_speed || 0, 0) + 'M/s' }, |
| | | { title: '4G信号', value: networkQuality?.[dock_osd_host?.quality] || '-' }, |
| | | { title: 'SDR信号', value: '0' }, |
| | | { title: 'GPS搜星数', value: GPSNum }, |
| | | { title: 'RTK搜星数', value: RTKNum }, |
| | | { title: '距离机场', value: dist }, |
| | | { title: '飞行时长', value: _.round((singleTotal.value?.hour_count || 0),1) + '小时' }, |
| | | { title: '电池电量', value: (battery?.capacity_percent || 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 = newFourG |
| | | if (newSdr !== undefined) infoList.value[8].value = 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() |
| | | } |
| | | |
| | |
| | | color: #ededed; |
| | | text-align: center; |
| | | line-height: 42px; |
| | | white-space:nowrap; |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | padding: 0 10px; |
| | |
| | | font-weight: 400; |
| | | margin-left: 15px; |
| | | |
| | | >div{ |
| | | > div { |
| | | width: 90px; |
| | | |
| | | .infoValue { |
| | | font-size: 20px; |
| | | color: #ffffff; |