From 75cdd3cdcec1fc22bddebd6352e5e87e0a8d5d33 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Fri, 18 Apr 2025 10:57:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/hooks/useSingleDroneMap/useSingleDroneMap.js |  135 +++++++--------------------------------------
 1 files changed, 21 insertions(+), 114 deletions(-)

diff --git a/src/hooks/useSingleDroneMap/useSingleDroneMap.js b/src/hooks/useSingleDroneMap/useSingleDroneMap.js
index ff7f0c3..b8b7aa7 100644
--- a/src/hooks/useSingleDroneMap/useSingleDroneMap.js
+++ b/src/hooks/useSingleDroneMap/useSingleDroneMap.js
@@ -2,25 +2,18 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2025-04-15 22:41:40
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2025-04-17 15:05:32
+ * @LastEditTime: 2025-04-17 20:24:19
  * @FilePath: \command-center-dashboard\src\hooks\useSingleDroneMap\useSingleDroneMap.js
  * @Description: 
  * 
  * Copyright (c) 2025 by shuishen, All Rights Reserved. 
  */
 import * as Cesium from 'cesium'
-import { render } from 'vue'
-import endingImg from '@/assets/images/aiNowFly/ending.png'
-import endingHighImg from '@/assets/images/aiNowFly/ending-high.png'
-import EventPopUpBox from '@/hooks/components/EventPopUpBox.vue'
 
-import eventSingle from '@/assets/images/home/useEventOperate/eventSingle.png'
+import { getEventImage } from '@/utils/stateToImageMap/event'
+import { getDroneFlagImage } from '@/utils/stateToImageMap/drone'
 
-import eventPending from '@/assets/images/home/useEventOperate/eventPending.png' // 待处理 0
-import eventWaitAudit from '@/assets/images/home/useEventOperate/eventWaitAudit.png' // 待审核 2
-import eventProcessing from '@/assets/images/home/useEventOperate/eventProcessing.png' // 处理中 3
-import eventCompleted from '@/assets/images/home/useEventOperate/eventCompleted.png' // 已完成 4
-import eventClosed from '@/assets/images/home/useEventOperate/eventClosed.png' // 已完结 5
+import { useMapHandlerClick } from '@/hooks/components/useMapHandlerClick'
 
 /**
  * 
@@ -31,20 +24,18 @@
   eventApi: null,
   eventApiParams: {}
 }) {
-  const styleTransform = 'translate(-50%,-110%)'
-
   const { eventPositions, eventApi, eventApiParams } = options
-  const eventImage = {
-    0: eventPending,
-    2: eventWaitAudit,
-    3: eventProcessing,
-    4: eventCompleted,
-    5: eventClosed
-  }
 
   let viewer = null
-  let handler = null
-  let currentEntity = null
+
+  const {
+    handlerInit: mapHandlerInit,
+    removeAll: removeMapHandlerAll
+  } = useMapHandlerClick({
+    getViewer () {
+      return viewer
+    }
+  })
 
   // 初始化机场位置
   const initDroneEntity = (dronePosition) => {
@@ -52,7 +43,7 @@
 
     if (!lng || !lat) return
 
-    const markerImg = status ? endingHighImg : endingImg
+    const markerImg = getDroneFlagImage(status)
     const position = Cesium.Cartesian3.fromDegrees(+lng, +lat, 0)
 
     const droneEntity = viewer?.entities.add({
@@ -93,7 +84,7 @@
     eventData.length && eventData.forEach((item, index) => {
       const { longitude, latitude, status, id } = item
 
-      const curImg = eventImage[status] || eventSingle
+      const curImg = getEventImage(status)
 
       const position = Cesium.Cartesian3.fromDegrees(+longitude, +latitude, 0)
 
@@ -109,7 +100,7 @@
           customData: {
             data: {
               ...item,
-              eventId: item.id,
+              eventId: id,
               type: 'single-drone-event'
             }
           }
@@ -155,104 +146,20 @@
     })
   }
 
-  // 查找特定类型的实体
-  const findEntityByType = (entities, type) => {
-    return entities.find(entity =>
-      entity?.properties?.customData?._value?.data?.type === type
-    )
-  }
-
-  // 左键单机事件
-  const singleMachineEvent = async click => {
-    currentEntity = null
-
-    let clickedEntities = viewer?.scene.drillPick(click.position).map(item => item.id)
-
-    if (!clickedEntities?.length) return
-
-    currentEntity = findEntityByType(clickedEntities, 'single-drone-event')
-
-    removeLabel()
-
-    if (currentEntity) {
-      viewer?.scene.postRender.addEventListener(labelBoxRender)
-    }
-  }
-
-  // 事件初始化
-  const handlerInit = () => {
-    if (handler) return
-
-    handler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas)
-    handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK)
-  }
-
-  // 事件移除
-  const removeHandler = () => {
-    handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
-    handler?.destroy()
-    handler = null
-  }
-
-  // 获取弹框box
-  const getLabelDom = data => {
-    const vNode = h(EventPopUpBox, { data, removeLabel })
-    const tooltipContainer = document.createElement('div')
-    tooltipContainer.id = 'mapPopUpBox'
-    tooltipContainer.style.position = 'absolute'
-    tooltipContainer.style.transform = styleTransform
-    tooltipContainer.style.pointerEvents = 'none'
-    document.querySelector('.page-index').append(tooltipContainer)
-    render(vNode, tooltipContainer)
-    return tooltipContainer
-  }
-
-  // 弹框位置刷新
-  const labelBoxRender = () => {
-    if (!currentEntity) return
-    let dom = document.querySelector('#mapPopUpBox')
-
-    if (!dom) {
-      dom = getLabelDom(currentEntity.properties.customData._value.data)
-    }
-    const screenPosition = viewer?.scene.cartesianToCanvasCoordinates(currentEntity?.position?._value)
-    if (screenPosition) {
-      dom.style.left = `${screenPosition.x}px`
-      dom.style.top = `${screenPosition.y}px`
-      dom.style.display = 'block'
-    }
-  }
-
-  const removeDom = () => {
-    const dom = document.querySelector('#mapPopUpBox')
-    if (dom && dom.parentNode) {
-      dom.parentNode.removeChild(dom)
-    }
-  }
-
-  // 移除弹框标签
-  const removeLabel = () => {
-    viewer?.scene.postRender.removeEventListener(labelBoxRender)
-    removeDom()
-  }
-
-
   const init = () => {
     viewer = window.$viewer
 
-    handlerInit()
+    mapHandlerInit()
   }
 
   const removeAll = () => {
     removeLayer()
-    removeHandler()
-    removeLabel()
+    removeMapHandlerAll()
   }
 
-  onMounted(() => {
-    nextTick(() => {
-      init()
-    })
+  onMounted(async () => {
+    await nextTick()
+    init()
   })
 
   // 自动清理

--
Gitblit v1.9.3