From b0827f4c098e9507ce1d5dc490111421ebdea29a Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Fri, 14 Nov 2025 19:16:57 +0800
Subject: [PATCH] feat:11
---
src/views/layerManagement/components/leftList.vue | 29 +++++++++-----
src/views/layerManagement/index.vue | 91 ++++++++++++++++++++++++++++++++++-----------
2 files changed, 86 insertions(+), 34 deletions(-)
diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index 23fb1a6..812bcdd 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -188,37 +188,44 @@
};
// 定位按钮事件
const handleLocation = node => {
- if (node.data.level === 2) {
- layerParams.value.isSingleLocating = false;
+ if (node.data.level === 2) {
+ layerParams.value.isSingleLocating = false;
+ // 新增:标记当前定位的文件夹ID
+ layerParams.value.currentLocationFolderId = node.data.id;
} else if (node.data.level === 3) {
- layerParams.value.isSingleLocating = true;
+ layerParams.value.isSingleLocating = true;
+ // 清空文件夹定位标识
+ layerParams.value.currentLocationFolderId = null;
}
const currentCheckedKeys = [...checkedKeys.value];
const currentCheckedNodes = [...checkedNodes.value];
EventBus.emit('focusOnNode', node.data);
+
if (node.data.level === 2) {
const folderChildren = node.data.children || [];
const childrenIds = folderChildren.map(child => child.id);
- // 合并已选中的节点和当前文件夹的子节点
- const newCheckedKeys = [...new Set([...currentCheckedKeys, ...childrenIds])];
- const newCheckedNodes = [...currentCheckedNodes, ...folderChildren];
+ const newChildrenIds = childrenIds.filter(id => !currentCheckedKeys.includes(id));
+ const newChildrenNodes = folderChildren.filter(child => newChildrenIds.includes(child.id));
+
+ const newCheckedKeys = [...new Set([...currentCheckedKeys, ...newChildrenIds])];
+ const newCheckedNodes = [...currentCheckedNodes, ...newChildrenNodes];
+
treeRef.value.setCheckedKeys(newCheckedKeys);
checkedKeys.value = newCheckedKeys;
checkedNodes.value = newCheckedNodes;
coverData.value = newCheckedNodes;
- }
- // 如果是单个节点(level 3),仅添加到选中列表(如果未选中)
- else if (!currentCheckedKeys.includes(node.data.id)) {
- layerParams.value.isSingleLocating = true
+ emit('update:coverData', coverData.value);
+ } else if (!currentCheckedKeys.includes(node.data.id)) {
+ layerParams.value.isSingleLocating = true;
currentCheckedKeys.push(node.data.id);
currentCheckedNodes.push(node.data);
treeRef.value.setCheckedKeys(currentCheckedKeys);
checkedKeys.value = currentCheckedKeys;
checkedNodes.value = currentCheckedNodes;
coverData.value = currentCheckedNodes;
+ emit('update:coverData', coverData.value);
}
- emit('update:coverData', coverData.value);
};
// 编辑按钮事件
const handleEdit = node => {
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index 9ff0fda..1d40241 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -97,7 +97,8 @@
editFolderData: null,
editingIsProhibited: false, //禁止编辑
isDetailShow: false,
- isSingleLocating:false
+ isSingleLocating:false ,
+ currentLocationFolderId:null,
});
const handleClick = tab => {
@@ -169,6 +170,8 @@
};
// 点击显示区域
const handleCoverDataUpdate = data => {
+console.log('daa',data);
+
selectDataList.value = data;
if (selectDataList.value.length > 0) {
@@ -243,6 +246,7 @@
});
});
+ console.log('layerParams.value.isSingleLocating',layerParams.value.isSingleLocating);
if (!layerParams.value.isSingleLocating) {
focusOnAllFeatures();
@@ -251,16 +255,46 @@
};
const focusOnAllFeatures = () => {
if (tbJwdList.length === 0 || !viewer) return;
+
+ // 判断是否有指定定位的文件夹
+ if (layerParams.value.currentLocationFolderId) {
+ console.log('11111111');
+
+ // 筛选当前文件夹下的所有子节点坐标
+ const targetFolderPositions = selectDataList.value
+ .filter(item => item.folder_id === layerParams.value.currentLocationFolderId)
+ .flatMap(item => {
+ const positions = parseGeoDataToPositions(item.geo_data, item.altitude);
+ return positions.length >= 3 ? positions : [];
+ });
+
+ if (targetFolderPositions.length > 0) {
+ const positionsData = targetFolderPositions.map(pos => [
+ pos.lng,
+ pos.lat,
+ pos.height || 0
+ ]);
+ flyVisual({
+ positionsData,
+ viewer,
+ multiple: activeName.value === '国土空间规划' ? 13 : 10,
+ pitch: -90
+ });
+ return; // 仅聚焦当前文件夹,结束方法
+ }
+ }
+ console.log('333333');
+ // 无指定文件夹时,聚焦所有选中数据(保持原有逻辑)
const positionsData = tbJwdList.map(pos => [
pos.lng,
pos.lat,
- pos.height || 0
+ pos.height || 0
]);
flyVisual({
positionsData,
viewer,
- multiple:activeName.value == '国土空间规划' ? 13 :4, // 缩放倍数
- pitch: -90
+ multiple: activeName.value === '国土空间规划' ? 13 : 4,
+ pitch: -90
});
};
// 区域点击显示详细信息
@@ -409,14 +443,6 @@
}
};
provide('layerParams', layerParams);
-// onMounted(() => {
-// initMap();
-// cesiumContextMenu();
-// getdataFolderApi();
-// EventBus.on('deleteMapEntityById', deleteMapEntityById);
-// EventBus.on('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
-
-// });
onMounted(() => {
initMap();
cesiumContextMenu();
@@ -430,23 +456,42 @@
});
//定位到指定节点
-const focusOnNode = (nodeData) => {
+// const focusOnNode = (nodeData) => {
+// if (!viewer || !nodeData?.geo_data) return;
+// // 解析节点坐标
+// const positions = parseGeoDataToPositions(nodeData.geo_data, nodeData.altitude);
+// if (positions.length < 3) {
+
+// return;
+// }
+// flyVisual({
+// positionsData: positions.map(pos => [pos.lng, pos.lat, pos.height || 0]),
+// viewer,
+// multiple:activeName.value == '国土空间规划' ? 13 :7, // 缩放倍数
+// pitch: -90
+// });
+
+// };
+// 父组件中修改 focusOnNode 方法
+const focusOnNode = (nodeData) => {
if (!viewer || !nodeData?.geo_data) return;
// 解析节点坐标
const positions = parseGeoDataToPositions(nodeData.geo_data, nodeData.altitude);
-if (positions.length < 3) {
-
- return;
- }
- flyVisual({
- positionsData: positions.map(pos => [pos.lng, pos.lat, pos.height || 0]),
- viewer,
- multiple:activeName.value == '国土空间规划' ? 13 :7, // 缩放倍数
- pitch: -90
- });
+ if (positions.length < 3) return;
+ // level 2 节点走全量聚焦,level 3 节点走单个聚焦
+ if (nodeData.level === 2) {
+ focusOnAllFeatures();
+ } else {
+ flyVisual({
+ positionsData: positions.map(pos => [pos.lng, pos.lat, pos.height || 0]),
+ viewer,
+ multiple: activeName.value === '国土空间规划' ? 13 : 7, // 缩放倍数
+ pitch: -90
+ });
+ }
};
onBeforeUnmount(() => {
destroyMap();
--
Gitblit v1.9.3