吉安感知网项目-前端
罗广辉
2026-01-31 f11355b8fc2eeb13247b72891a24a07b26c4561e
Merge remote-tracking branch 'origin/master'
4 files modified
2 files added
44 ■■■■■ changed files
applications/drone-command/src/assets/images/dataCockpit/legend/offline-equipment.png patch | view | raw | blame | history
applications/drone-command/src/assets/images/dataCockpit/map/offline-equipment.png patch | view | raw | blame | history
applications/drone-command/src/components/map-container/device-map-container.vue 14 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/dataCockpit/components/LegendBar.vue 8 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/dataCockpit/components/RightContainer.vue 11 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/dataCockpit/index.vue 11 ●●●● patch | view | raw | blame | history
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) => ({