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