From 89380e6260a75d1d3b94de687ebcc2f50d50659d Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 03 Feb 2026 15:44:33 +0800
Subject: [PATCH] feat:环境变量配置调整
---
applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue | 165 ++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 146 insertions(+), 19 deletions(-)
diff --git a/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue b/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue
index 2455c18..869bdae 100644
--- a/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue
+++ b/applications/drone-command/src/views/recordManage/historyTracks/TrajectoryDiaLog.vue
@@ -1,29 +1,79 @@
-<template>
- <el-dialog v-model="visible" :title="dialogTitle" @closed="handleClosed" destroy-on-close>
- <div>
- <div>无人机名称:{{ formData.droneName }}</div>
- <div>序列号: {{ formData.serialNo }}</div>
- <div>告警时间: {{ formData.alarmTime }}</div>
- <div>触发原因: {{ formData.triggerType }}</div>
- <div>停留时长: {{ formData.stayDuration }}</div>
+<template>
+ <el-dialog
+ class="command-page-map-view-dialog"
+ v-model="visible"
+ :show-close="false"
+ :close-on-click-modal="false"
+ @closed="handleClosed"
+ destroy-on-close
+ >
+ <div class="dialog-container">
+ <div class="left-container">
+ <div class="leftMap command-cesium" id="leftMapContainer"></div>
+ </div>
+ <div class="right-container">
+ <div class="header">
+ <span>{{ dialogTitle }}</span>
+
+ <el-icon class="close-btn" @click.stop="visible = false"><Close /></el-icon>
+ </div>
+
+ <div class="content">
+ <div class="detail-title">轨迹信息</div>
+ <el-row>
+ <el-col :span="24">
+ <div class="label">无人机名称</div>
+ <div class="val">{{ formData.droneName }}</div>
+ </el-col>
+ <el-col :span="24">
+ <div class="label">无人机序列号</div>
+ <div class="val">{{ formData.serialNo }}</div>
+ </el-col>
+ <el-col :span="24">
+ <div class="label">告警时间</div>
+ <div class="val">{{ formData.alarmTime }}</div>
+ </el-col>
+ <el-col :span="24">
+ <div class="label">触发原因</div>
+ <div class="val">{{ formData.triggerType }}</div>
+ </el-col>
+ <el-col :span="24">
+ <div class="label">停留时长</div>
+ <div class="val">{{ formData.stayDuration }}</div>
+ </el-col>
+ </el-row>
+ <div class="detail-title">轨迹点</div>
+ <div class="command-table-container">
+ <div class="command-table-content">
+ <el-table class="command-table" :data="list" :row-class-name="getRowClassName">
+ <el-table-column type="index" width="60" label="序号" />
+ <el-table-column label="经纬度">
+ <template #default="{ row }">{{ row.longitude }},{{ row.latitude }}</template>
+ </el-table-column>
+ <el-table-column prop="createTime" label="时间" />
+ </el-table>
+ </div>
+ </div>
+ </div>
+ <div class="footer">
+ <el-button v-if="dialogMode != 'view'" color="#2B2B4C" @click="handleCancel">{{ dialogReadonly ? '关闭' : '取消' }}</el-button>
+ </div>
+ </div>
</div>
- <el-table :data="list">
- <el-table-column type="index" width="60" label="序号" />
- <el-table-column prop="areaCode" label="areaCode" />
- <el-table-column prop="createTime" label="createTime" />
- <el-table-column prop="latitude" label="latitude" />
- <el-table-column prop="longitude" label="longitude" />
- </el-table>
- <template #footer>
- <el-button @click="handleCancel">{{ dialogReadonly ? '关闭' : '取消' }}</el-button>
- </template>
</el-dialog>
</template>
<script setup>
-import { computed, ref } from 'vue'
+import { Close } from '@element-plus/icons-vue'
+
+import { computed, nextTick, ref } from 'vue'
import { fwDroneFlightRecordDetailApi } from '@/views/recordManage/historyTracks/fwDroneFlightRecord'
import { fwDroneFlightRecordDetailPageApi } from '@/views/recordManage/historyTracks/flyTrajectory'
+import { PublicCesium } from '@/utils/cesium/publicCesium'
+import * as Cesium from 'cesium'
+import { flyVisual } from '@ztzf/utils'
+import { ArrowLineMaterialProperty } from '@/utils/cesium/Material'
+import droneIcon from '@/assets/images/dataCockpit/map/drone.png'
const initForm = () => ({
droneName: '',
@@ -59,18 +109,85 @@
const res = await fwDroneFlightRecordDetailApi({ id: formData.value.id })
const res1 = await fwDroneFlightRecordDetailPageApi({ flightRecordId: formData.value.id })
list.value = res1.data.data.records ?? []
+ drawFlightPath()
formData.value = res?.data?.data ?? {}
+}
+
+let arrowLineMaterialProperty = new ArrowLineMaterialProperty({
+ color: new Cesium.Color(128 / 255, 215 / 255, 255 / 255, 1),
+ directionColor: new Cesium.Color(1, 1, 1, 1),
+ outlineColor: new Cesium.Color(1, 1, 1, 1),
+ outlineWidth: 0,
+ speed: 5,
+})
+
+// 角度转c3
+function degreesToC3({ longitude, latitude, height = 0 }) {
+ return Cesium.Cartesian3.fromDegrees(longitude, latitude, height)
+}
+// 渲染航线
+function drawFlightPath() {
+ const positions = list.value.map(p => degreesToC3(p))
+ if (!positions.length) return
+ droneLineEntity && geometricSource.entities.remove(droneLineEntity)
+ droneLineEntity = geometricSource.entities.add({
+ polyline: {
+ width: 4,
+ positions: positions,
+ material: arrowLineMaterialProperty,
+ clampToGround: false,
+ },
+ })
+ startDroneEntity && geometricSource.entities.remove(startDroneEntity)
+ startDroneEntity = geometricSource.entities.add({
+ position: positions[0],
+ billboard: {
+ image: droneIcon,
+ width: 40,
+ height: 40,
+ verticalOrigin: Cesium.VerticalOrigin.CENTER,
+ },
+ })
+ viewer.flyTo(droneLineEntity, { duration: 0 })
}
// 关闭后重置
function handleClosed() {
formData.value = initForm()
+ list.value = []
+ viewer = null
+ geometricSource = null
+ droneLineEntity = null
+ startDroneEntity = null
+}
+
+function getRowClassName({ row }) {
+ console.log(row.isAlarm, 11111111111)
+
+ return row?.isAlarm === 1 ? 'alarm-row' : ''
+}
+
+let viewer, geometricSource, droneLineEntity, startDroneEntity
+function initMap() {
+ if (viewer) return
+ const publicCesiumInstance = new PublicCesium({
+ dom: 'leftMapContainer',
+ flatMode: false,
+ terrain: true,
+ layerMode: 4,
+ boundary: false,
+ })
+ viewer = publicCesiumInstance.getViewer()
+ geometricSource = new Cesium.CustomDataSource('geometricSource')
+ viewer.dataSources.add(geometricSource)
}
// 打开弹框
async function open({ mode, row } = {}) {
dialogMode.value = mode || 'add'
visible.value = true
+ await nextTick()
+ initMap()
if (dialogMode.value === 'add') {
formData.value = initForm()
} else {
@@ -81,3 +198,13 @@
defineExpose({ open })
</script>
+
+<style scoped lang="scss">
+:deep(.alarm-row) {
+ background: #2B2B4C !important;
+
+ td {
+ background-color: transparent !important;
+ }
+}
+</style>
--
Gitblit v1.9.3