applications/drone-command/src/assets/images/dataCockpit/legend/offline-equipment.png
applications/drone-command/src/assets/images/dataCockpit/map/offline-equipment.png
applications/drone-command/src/components/map-container/device-map-container.vue
@@ -56,6 +56,7 @@ import { cockpitAggregationApi } from '@/api/dataCockpit' import layerControlIcon from '@/assets/images/dataCockpit/layerControl.png' import equipmentIcon from '@/assets/images/dataCockpit/map/equipment.png' import offlineEquipmentIcon from '@/assets/images/dataCockpit/map/offline-equipment.png' import droneIcon from '@/assets/images/dataCockpit/map/drone.png' import aggregationIcon from '@/assets/images/dataCockpit/map/aggregation.png' import commandPostIcon from '@/assets/images/dataCockpit/map/command-post.png' @@ -78,7 +79,7 @@ const POLYGON_HEIGHT_M = 0.2 const props = defineProps({ onlineDevices: { allDevices: { type: Array, default: () => [], }, @@ -719,6 +720,8 @@ const deviceEntries = [] const devicePositions = [] devices.forEach((item, index) => { const isOnline = String(item.status) === '0' const position = getDevicePosition(item) if (!position) return const entityId = `online-device-${item.id ?? index}-${index}` @@ -726,14 +729,14 @@ devicePositions.push({ lng: position.longitude, lat: position.latitude }) const billboard = deviceBillboardCollection.add({ position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0), image: equipmentIcon, image: isOnline ? equipmentIcon : offlineEquipmentIcon, width: 40, height: 56, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, }) billboard.id = entityId devicePickMap.set(entityId, { data: item, billboard }) deviceEntries.push({ position, rangeMeters, billboard }) deviceEntries.push({ position, rangeMeters, billboard, isOnline }) }) if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) { closePopup() @@ -750,6 +753,7 @@ centerHeight ) } if (!entry.isOnline) return if (!Number.isFinite(entry.rangeMeters) || entry.rangeMeters <= 0) return const primitive = createDeviceRangePrimitiveWithHeight(entry.position, entry.rangeMeters, centerHeight) if (!primitive) return @@ -1147,7 +1151,7 @@ watch( () => props.onlineDevices, () => props.allDevices, devices => { renderDeviceEntities(devices || []) }, @@ -1219,7 +1223,7 @@ const height = viewer?.camera?.positionCartographic?.height const stage = getStageByHeight(height) updateStageDisplay(stage) renderDeviceEntities(props.onlineDevices) renderDeviceEntities(props.allDevices) loadPartitions() loadAggregation() loadCommandPosts() applications/drone-command/src/views/dataCockpit/components/LegendBar.vue
@@ -2,7 +2,7 @@ * @Author : yuan * @Date : 2026-01-17 14:51:39 * @LastEditors : yuan * @LastEditTime : 2026-01-30 15:20:56 * @LastEditTime : 2026-01-31 16:03:51 * @FilePath : \applications\drone-command\src\views\dataCockpit\components\LegendBar.vue * @Description : * Copyright 2026 OBKoro1, All Rights Reserved. @@ -35,6 +35,11 @@ <img class="legend-icon" :src="equipmentIcon" alt="设备" /> <span class="legend-text" data-text="设备">设备</span> </div> <div class="legend-item"> <img class="legend-icon" :src="offlineEquipmentIcon" alt="告警设备" /> <span class="legend-text" data-text="告警设备">告警设备</span> </div> </div> </template> @@ -42,6 +47,7 @@ import droneIcon from '@/assets/images/dataCockpit/legend/drone.png' import commandPostIcon from '@/assets/images/dataCockpit/legend/command-post.png' import equipmentIcon from '@/assets/images/dataCockpit/legend/equipment.png' import offlineEquipmentIcon from '@/assets/images/dataCockpit/legend/offline-equipment.png' </script> <style scoped lang="scss"> applications/drone-command/src/views/dataCockpit/components/RightContainer.vue
@@ -2,7 +2,7 @@ * @Author : yuan * @Date : 2026-01-07 15:17:54 * @LastEditors : yuan * @LastEditTime : 2026-01-20 09:19:16 * @LastEditTime : 2026-01-31 15:47:40 * @FilePath : \applications\drone-command\src\views\dataCockpit\components\RightContainer.vue * @Description : * Copyright 2026 OBKoro1, All Rights Reserved. @@ -68,7 +68,7 @@ } }) const emit = defineEmits(['update:collapsed', 'update:onlineDevices']) const emit = defineEmits(['update:collapsed', 'update:allDevices']) const collapsedModel = computed({ get: () => props.collapsed, @@ -145,11 +145,12 @@ const startAt = Date.now() loading.value = true try { const params = { current: 1, size: 20, deviceStatusList: '0' } const params = { current: 1, size: 9999, deviceStatusList: '0,1,2' } const res = await deviceSearchApi(params) const records = res?.data?.data?.records ?? [] counterDeviceStatusList.value = records.map(formatDeviceItem) emit('update:onlineDevices', records) let onlineData = records.filter(item => String(item.status) === '0') counterDeviceStatusList.value = onlineData.map(formatDeviceItem) emit('update:allDevices', records) } finally { const elapsed = Date.now() - startAt if (elapsed < minLoadingMs) { applications/drone-command/src/views/dataCockpit/index.vue
@@ -2,7 +2,7 @@ * @Author : yuan * @Date : 2026-01-06 16:35:50 * @LastEditors : yuan * @LastEditTime : 2026-01-16 17:17:24 * @LastEditTime : 2026-01-31 15:40:15 * @FilePath : \applications\drone-command\src\views\dataCockpit\index.vue * @Description : * Copyright 2026 OBKoro1, All Rights Reserved. @@ -11,7 +11,7 @@ <template> <div class="page-container"> <DeviceMapContainer :online-devices="onlineDevices" :all-devices="allDevices" :alarm-drones="realWarningData" :left-collapsed="leftCollapsed" container-id="data-cockpit-map" @@ -29,7 +29,8 @@ @real-warning-counter="handleAlarmAction('counter', $event)" @real-warning-favorite="handleAlarmFavorite" /> <RightContainer class="right-container" v-model:collapsed="rightCollapsed" v-model:onlineDevices="onlineDevices" /> <RightContainer class="right-container" v-model:collapsed="rightCollapsed" v-model:allDevices="allDevices" /> <CenterContainer @select-warning="onSelectWarning" @select-equipment="onSelectEquipment" /> <LegendBar class="legend-container" /> </div> @@ -54,7 +55,7 @@ const leftCollapsed = ref(false); const rightCollapsed = ref(false); const onlineDevices = ref([]); const allDevices = ref([]); const realWarningData = ref([]); const realWarningLoading = ref(true); const minLoadingMs = 400; @@ -133,7 +134,7 @@ const startAt = Date.now(); realWarningLoading.value = true; try { const params = { current: 1, size: 20, alarmType: '1' }; const params = { current: 1, size: 9999, alarmType: '1' }; const res = await alarmLogApi(params); const records = res?.data?.data?.records ?? []; realWarningData.value = records.map((record) => ({