From afec9f1c12683a11845b277c62e0ca9b83e1a5ca Mon Sep 17 00:00:00 2001
From: jihongshun <1151753686@qq.com>
Date: 星期四, 07 八月 2025 15:38:23 +0800
Subject: [PATCH] 切换设备正反逻辑

---
 src/views/system/project/components/addPorjectDialog.vue |  159 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 155 insertions(+), 4 deletions(-)

diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue
index 217b3eb..9a082c5 100644
--- a/src/views/system/project/components/addPorjectDialog.vue
+++ b/src/views/system/project/components/addPorjectDialog.vue
@@ -15,6 +15,7 @@
                   <el-table
                     :data="tableData"
                     max-height = '180'
+                    :row-key="getRowKeys"
                     style="width: 100%">
                     <el-table-column
                       prop="deviceName"
@@ -45,6 +46,7 @@
                   <div class="fontJust">宸℃鐐圭洰褰�</div>
                   <el-tree
                     class="filter-tree"
+                    node-key="id"
                     :data="treeData"
                     :props="defaultProps"
                     default-expand-all
@@ -72,6 +74,7 @@
 import chooseModelDialog from './chooseModelDialog.vue';
 import { obtainRealData ,buildKmz} from "@/api/system/template"
 let rotationAngle = Cesium.Math.toRadians(0)
+let lastConnectPolyline 
 export  default{
   components: {
     CesiumMap,
@@ -178,14 +181,60 @@
       }));
     },
     deleteData(row){
+      console.log(row)
       // 鎵惧埌 id 涓� "1" 鐨勫厓绱犵储寮�
       const index = this.tableData.findIndex(item => item.id === row.id);
       // 濡傛灉鎵惧埌浜嗭紝鍒犻櫎璇ュ厓绱�
       if (index !== -1) {
         this.tableData.splice(index, 1);
       }
-      const dealTreeData = this.dealTee()
-      this.treeData = dealTreeData
+      const indexTree = this.treeData.findIndex(item => item.id === row.id);
+      // 濡傛灉鎵惧埌浜嗭紝鍒犻櫎璇ュ厓绱�
+      if (index !== -1) {
+        this.treeData.splice(indexTree, 1);
+      }
+      if(this.treeData?.length >=2 && this.treeData[0]?.children?.length > 0 && this.treeData[1]?.children?.length > 0 ) {
+          this.dealAddHeight()
+      } else if(this.treeData?.length ==1) {
+        this.treeData.map((device,index) => {
+          // 纭繚璁惧鏈塩hildren鏁扮粍
+          if(index == 0) {
+            //绗竴涓暟鎹�
+            if (device.children && Array.isArray(device.children) && device.children.length > 0) {
+                // 鑾峰彇鏈�鍚庝竴涓┖涓偣
+                const lastChild = device.children[device.children.length - 1];
+                const firstChild = device.children[0];
+                // 娣辨嫹璐濇渶鍚庝竴涓厓绱狅紙鍖呮嫭宓屽鐨刢hildren锛�
+                const newChildJson = JSON.parse(JSON.stringify(lastChild));
+                // 娣辨嫹璐濇渶涓�涓�涓厓绱狅紙鍖呮嫭宓屽鐨刢hildren锛�
+                const firstChildJson = JSON.parse(JSON.stringify(firstChild));
+
+                if(newChildJson && newChildJson.label.includes('鍔犻珮')){
+                  device.children?.pop(newChild);
+                }else if(firstChildJson && firstChildJson.label.includes('鍔犻珮')) {
+                    device.children?.shift(firstChildJson);
+                }
+                // 娣诲姞鍒癱hildren鏁扮粍鏈熬
+            }
+          }
+        })
+      }
+      const entitiesToRemove = [];
+      viewer.entities.values.forEach(entity => {
+        if (entity.id && entity.id.includes(row.id)) {
+          entitiesToRemove.push(entity.id);
+        }
+      });
+      entitiesToRemove.forEach(id => {
+        viewer.entities.removeById(id);
+      });
+      this.drawConnectionsWithLabels(this.treeData)
+      // console.log(this.tableData)
+      console.log(this.treeData)
+      // const dealTreeData = this.dealTee()
+      // console.log(dealTreeData)
+      // this.treeData = dealTreeData
+      // this.drawConnectionsWithLabels(this.treeData)
     },
     chooseModel(row){
       this.deviceId = row.id
@@ -203,14 +252,89 @@
       obtainRealData(flightTemplateId,deviceId).then(res=>{
         console.log(res)
         let treeDealData = this.transformFlightData(res.data?.coordinateSystemVoS || [])
+        console.log(treeDealData)
         this.dealTreeMerge(obj,treeDealData)
+        
         this.rotateAllPoints(this.treeData || [],res.data.longitude,res.data.latitude,res.data.height)
+        console.log(this.treeData)
+        if(this.treeData?.length >=2 && this.treeData[0]?.children?.length > 0 && this.treeData[1]?.children?.length > 0 ) {
+            this.dealAddHeight()
+        }
+        console.log(this.treeData)
         this.drawConnectionsWithLabels(this.treeData)
       })
       // this.dealTreeMerge(obj)
     },
+    dealAddHeight(){
+      let currentLength = this.treeData.filter(item=>item.children)?.length || 0
+      console.log(this.treeData)
+      console.log(currentLength)
+      this.treeData.map((device,index) => {
+          // 纭繚璁惧鏈塩hildren鏁扮粍
+          if(index == 0) {
+            //绗竴涓暟鎹�
+            if (device.children && Array.isArray(device.children) && device.children.length > 0) {
+                // 鑾峰彇鏈�鍚庝竴涓┖涓偣
+                const lastChild = device.children[device.children.length - 1];
+                // 娣辨嫹璐濇渶鍚庝竴涓厓绱狅紙鍖呮嫭宓屽鐨刢hildren锛�
+                const newChild = JSON.parse(JSON.stringify(lastChild));
+                if(newChild.label.includes('鍔犻珮')) {
+
+                }else {
+                  newChild.label = newChild.label + '-鍔犻珮'
+                  // 楂樺害澧炲姞20
+                  // newChild.height += 20;
+                  //濉旈珮 - 楂樺害  + 寰�涓婇澶氬皯绫�
+                  newChild.height += (device.ardTowerModel?.modelHeight  - newChild.height +  20) ;
+                  console.log('push11111111111111')
+                  // 娣诲姞鍒癱hildren鏁扮粍鏈熬
+                  device.children.push(newChild);
+                }
+            }
+          }
+          else if(index == currentLength -1) {
+            if (device.children && Array.isArray(device.children) && device.children.length > 0) {
+                // 鑾峰彇鏈�鍚庝竴涓┖涓偣
+                const lastChild = device.children[0];
+                // 娣辨嫹璐濇渶涓�涓�涓厓绱狅紙鍖呮嫭宓屽鐨刢hildren锛�
+                const newChild = JSON.parse(JSON.stringify(lastChild));
+                if(newChild.label.includes('鍔犻珮')) {
+                }else {
+                  newChild.label = newChild.label + '-鍔犻珮绗竴涓偣'
+                  newChild.height += (device.ardTowerModel?.modelHeight  - newChild.height +  20) ;
+                  // 娣诲姞鍒癱hildren鏁扮粍鏈熬
+                  device.children.unshift(newChild);
+                }
+                
+            }
+          } else {
+            if (device.children && Array.isArray(device.children) && device.children.length > 0) {
+                // 鑾峰彇鏈�鍚庝竴涓┖涓偣
+                const firstChild = device.children[0];
+                const lastChild = device.children[device.children.length - 1];
+                // 娣辨嫹璐濇渶涓�涓�涓厓绱狅紙鍖呮嫭宓屽鐨刢hildren锛�
+                const newFirstChild = JSON.parse(JSON.stringify(firstChild));
+                const newLastChildChild = JSON.parse(JSON.stringify(lastChild));
+                //楂樺害澧炲姞20
+                if(newFirstChild.label.includes('鍔犻珮')) {
+                }else {
+                    newFirstChild.label = newFirstChild.label + '-鍔犻珮'
+                    newFirstChild.height += (device.ardTowerModel?.modelHeight  - newFirstChild.height +  20) ;
+                    device.children.unshift(firstChild);
+                }
+                if(newLastChildChild.label.includes('鍔犻珮')) {
+                }else {
+                    newLastChildChild.label = newLastChildChild.label + '-鍔犻珮'
+                    newLastChildChild.height += (device.ardTowerModel?.modelHeight  - newLastChildChild.height +  20) ;
+                    device.children.push(newLastChildChild);
+                }
+            }
+          }
+      })
+    },
     //杩斿洖鏁版嵁杞崲鏍戠粨鏋�
     transformFlightData(data) {
+      console.log(data)
       const result = [];
 
       data.forEach(item => {
@@ -257,8 +381,27 @@
         }
       });
     },
+    generateId() {
+      return 'id_' + Math.random().toString(36).substring(2, 10);
+    },
     drawConnectionsWithLabels(devices) {
+      if(lastConnectPolyline) {
+        viewer.entities.remove(lastConnectPolyline)
+        lastConnectPolyline = null
+      }
+        // 鐩存帴鎿嶄綔EntityCollection锛堟帹鑽愶級
+      const entitiesToRemove = [];
+      viewer.entities.values.forEach(entity => {
+        if (entity.id && entity.id.includes(this.deviceId)) {
+          entitiesToRemove.push(entity.id);
+        }
+      });
+
+      entitiesToRemove.forEach(id => {
+        viewer.entities.removeById(id);
+      });
       const airPoints = [];
+      console.log(devices)
       devices.forEach(device => {
         if (!Array.isArray(device.children)) return;
         device.children.forEach(airPoint => {
@@ -272,6 +415,7 @@
           // 鉁� 娣诲姞绌轰腑鐐瑰疄浣撳拰 label
           viewer.entities.add({
             position: airPos,
+            id:device.id +'airpoint' + this.generateId(),
             point: {
               pixelSize: 6,
               color: Cesium.Color.YELLOW
@@ -301,6 +445,7 @@
 
               // 鉁� 娣诲姞鍦伴潰鐐瑰疄浣撳拰 label
               viewer.entities.add({
+                id:device.id +'groundpoint' + this.generateId(),
                 position: groundPos,
                 point: {
                   pixelSize: 6,
@@ -320,6 +465,7 @@
 
               // 鉁� 钃濊壊铏氱嚎杩炴帴锛氱┖涓偣 鉃� 鍦伴潰鐐�
               viewer.entities.add({
+                id:device.id +'polyline' + this.generateId(),
                 polyline: {
                   positions: [airPos, groundPos],
                   width: 2,
@@ -333,10 +479,10 @@
           }
         });
       });
-
+      console.log(airPoints)
       // 鉁� 榛勮壊瀹炵嚎杩炴帴鎵�鏈夌┖涓偣
       if (airPoints.length > 1) {
-        viewer.entities.add({
+        lastConnectPolyline = viewer.entities.add({
           polyline: {
             positions: airPoints,
             width: 3,
@@ -375,6 +521,7 @@
               };
             });
           });
+          console.log(newGround.children)
           return newGround;
         }
          
@@ -397,6 +544,10 @@
       //聽灏嗘棆杞悗鐨勫眬閮ㄥ潗鏍囪浆鎹㈠洖涓栫晫鍧愭爣绯�
      return Cesium.Matrix4.multiplyByPoint(transformationMatrix,聽new聽Cesium.Cartesian3(rotatedX,聽rotatedY,聽rotatedZ),聽new聽Cesium.Cartesian3());
     },
+    getRowKeys(row){
+      console.log(row)
+      return row.id +this.generateId()
+    },
     submit(){
       console.log(this.treeData)
 

--
Gitblit v1.9.3