From d94a55f3358ed7ded4d5a5579968744ed047b6a4 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 11 Nov 2025 10:20:12 +0800
Subject: [PATCH] feat:测试
---
src/views/layerManagement/components/leftList.vue | 65 ++++++++++++++++++++++++++------
src/views/layerManagement/index.vue | 39 +++++++++++++++++--
2 files changed, 88 insertions(+), 16 deletions(-)
diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index 505c737..4b717b7 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -159,7 +159,6 @@
const allFenceKeys = treeData.value.flatMap(
folder => folder.children.map(fence => fence.id) // folder 是 level 2,children 是 level 3
);
-
const allFenceNodes = treeData.value.flatMap(folder => folder.children);
if (checkedKeys.value.length === allFenceKeys.length) {
// 取消全选:清空 keys 和数据
@@ -178,21 +177,63 @@
}
};
// 定位按钮事件
+// const handleLocation = node => {
+// // checkedKeys.value = [];
+// // checkedNodes.value = [];
+// // coverData.value = [];
+// if (node.data.level === 2) {
+// const folderChildren = node.data.children || [];
+// const childrenIds = folderChildren.map(child => child.id);
+// treeRef.value.setCheckedKeys(childrenIds);
+// checkedKeys.value = childrenIds;
+// checkedNodes.value = folderChildren;
+// coverData.value = folderChildren;
+// emit('update:coverData', coverData.value);
+// } else {
+// const currentNodeId = node.data.id;
+// treeRef.value.setCheckedKeys([currentNodeId]);
+// checkedKeys.value = [currentNodeId];
+// checkedNodes.value = [node.data];
+
+// coverData.value = [node.data];
+// emit('update:coverData', coverData.value);
+// }
+// };
const handleLocation = node => {
- checkedKeys.value = [];
- checkedNodes.value = [];
- coverData.value = [];
+ const currentCheckedKeys = Array.isArray(checkedKeys.value) ? [...checkedKeys.value] : [];
+ const currentCheckedNodes = Array.isArray(checkedNodes.value) ? [...checkedNodes.value] : [];
+ // 触发定位逻辑(通知父组件)
+ EventBus.emit('focusOnNode', node.data);
if (node.data.level === 2) {
const folderChildren = node.data.children || [];
- // const childrenIds = folderChildren.map(child => child.id);
- // treeRef.value.setCheckedKeys(childrenIds);
- // checkedKeys.value = childrenIds;
- // checkedNodes.value = folderChildren;
- coverData.value = folderChildren;
- emit('update:coverData', coverData.value);
- } else {
- emit('update:coverData', [node.data]);
+ const childrenIds = folderChildren.map(child => child.id);
+ // 合并已选中的节点(去重)
+ const newCheckedKeys = [...new Set([...currentCheckedKeys, ...childrenIds])];
+ const newCheckedNodes = [...currentCheckedNodes, ...folderChildren];
+ treeRef.value.setCheckedKeys(newCheckedKeys);
+ checkedKeys.value = newCheckedKeys;
+ checkedNodes.value = newCheckedNodes;
+ coverData.value = newCheckedNodes;
+ }
+ else {
+ const currentNodeId = node.data.id;
+ if (!currentCheckedKeys.includes(currentNodeId)) {
+ currentCheckedKeys.push(currentNodeId);
+ currentCheckedNodes.push(node.data);
+ console.log(' currentCheckedNodes', currentCheckedNodes);
+
+ }
+ treeRef.value.setCheckedKeys(currentCheckedKeys);
+ checkedKeys.value = currentCheckedKeys;
+ checkedNodes.value = currentCheckedNodes;
+ coverData.value = currentCheckedNodes;
+ console.log('currentCheckedNodes',currentCheckedNodes);
+
+ console.log('coverData.value',node.data);
+
}
+
+ emit('update:coverData', coverData.value);
};
// 编辑按钮事件
const handleEdit = node => {
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index a33a2c3..9aa5477 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -65,7 +65,7 @@
const areaCode = userInfo.value?.detail?.areaCode || '';
// 红色警告交叉面提示窗
const isShowWaringTip = ref(false);
-const activeName = ref('电子围栏');
+const activeName = ref('自定义识别区');
const activeType = ref('0');
let tbJwdList = [];
const selectDataList = ref([]);
@@ -73,7 +73,7 @@
let curPolygonPosition = [];
const tabData = ref([
{
- name: '电子围栏',
+ name: '自定义识别区',
type: '0',
},
{
@@ -121,7 +121,7 @@
};
const getdataFolderApi = () => {
let id;
- if (activeName.value === '电子围栏') {
+ if (activeName.value === '自定义识别区') {
id = 1;
} else if (activeName.value === '自定义禁飞区') {
id = 2;
@@ -282,7 +282,7 @@
layerParams.value.editNest = true; // 显示右侧编辑组件
layerParams.value.decideWhetherToAddOrEdit = 2; // 标记为编辑模式
// 根据围栏类型设置fenceType
- if (activeName.value === '电子围栏') {
+ if (activeName.value === '自定义识别区') {
layerParams.value.fenceType = 1;
} else if (activeName.value === '自定义禁飞区') {
layerParams.value.fenceType = 2;
@@ -308,6 +308,7 @@
});
viewer = publicCesiumInstance.getViewer();
viewInstance.value = publicCesiumInstance;
+ viewInstance.value?.flyToContour();
const nanChangPosition = Cesium.Cartesian3.fromDegrees(
115.892151, // 经度
28.676493, // 纬度
@@ -394,13 +395,43 @@
}
};
provide('layerParams', layerParams);
+// onMounted(() => {
+// initMap();
+// cesiumContextMenu();
+// getdataFolderApi();
+// EventBus.on('deleteMapEntityById', deleteMapEntityById);
+// EventBus.on('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
+// });
onMounted(() => {
initMap();
cesiumContextMenu();
getdataFolderApi();
+
+ // 新增:监听定位事件
+ EventBus.on('focusOnNode', (nodeData) => {
+ focusOnNode(nodeData);
+ });
+
EventBus.on('deleteMapEntityById', deleteMapEntityById);
EventBus.on('deleteMapEntitiesByFolderId', deleteMapEntitiesByFolderId);
});
+
+// 新增:定位到指定节点
+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: 13, // 缩放倍数
+ pitch: -90
+ });
+};
onBeforeUnmount(() => {
destroyMap();
cesiumContextMenu(false);
--
Gitblit v1.9.3