diff --git a/ruoyi-ui/src/views/cesiumMap/index.vue b/ruoyi-ui/src/views/cesiumMap/index.vue index 887b4d7..8ef5327 100644 --- a/ruoyi-ui/src/views/cesiumMap/index.vue +++ b/ruoyi-ui/src/views/cesiumMap/index.vue @@ -183,22 +183,22 @@ export default { initRightClickHandler() { // 创建屏幕空间事件处理器 this.rightClickHandler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas) - + // 右键点击事件:删除单个实体 this.rightClickHandler.setInputAction((click) => { // 如果正在绘制,不处理删除操作 if (this.isDrawing) { return; } - + const pickedObject = this.viewer.scene.pick(click.position) - + if (Cesium.defined(pickedObject) && pickedObject.id) { const pickedEntity = pickedObject.id - + // 查找对应的实体数据 let entityData = this.allEntities.find(e => e.entity === pickedEntity || e === pickedEntity) - + // 特殊处理:如果点击的是线段上的点,找到对应的线实体 if (!entityData) { // 检查是否是线段上的点 @@ -211,7 +211,7 @@ export default { } } } - + if (entityData) { // 显示确认对话框 if (confirm('确定要删除这个对象吗?')) { @@ -230,22 +230,22 @@ export default { initHoverHandler() { // 创建屏幕空间事件处理器 this.hoverHandler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas) - + // 鼠标移动事件:检测是否悬停在线上 this.hoverHandler.setInputAction((movement) => { // 如果正在绘制,不处理悬停操作 if (this.isDrawing) { return; } - + const pickedObject = this.viewer.scene.pick(movement.endPosition) - + if (Cesium.defined(pickedObject) && pickedObject.id) { const pickedEntity = pickedObject.id - + // 查找对应的实体数据 let entityData = this.allEntities.find(e => e.entity === pickedEntity || e === pickedEntity) - + // 特殊处理:如果悬停的是线段上的点,找到对应的线实体 if (!entityData) { // 检查是否是线段上的点 @@ -258,7 +258,7 @@ export default { } } } - + // 如果是线实体,显示长度信息 if (entityData && entityData.type === 'line') { const length = this.calculateLineLength(entityData.positions) @@ -527,13 +527,13 @@ export default { const newPosition = this.getClickPosition(movement.endPosition); if (newPosition) { this.activeCursorPosition = newPosition; - + // 当已经有至少一个点时,实时计算线段长度 if (this.drawingPoints.length > 0) { // 计算从最后一个点到当前鼠标位置的线段长度 const tempPositions = [...this.drawingPoints, newPosition]; const length = this.calculateLineLength(tempPositions); - + // 更新测量结果,显示实时长度 this.measurementResult = { distance: length, @@ -2010,12 +2010,12 @@ export default { removeEntity(id) { // 查找对应的实体数据 - const index = this.allEntities.findIndex(e => - e.id === id || + const index = this.allEntities.findIndex(e => + e.id === id || (e.entity && e.entity.id === id) || (e.type === 'line' && e.pointEntities && e.pointEntities.some(p => p.id === id)) ) - + if (index > -1) { const entity = this.allEntities[index] @@ -2394,20 +2394,20 @@ export default { initPointMovement() { // 创建屏幕空间事件处理器 this.pointMovementHandler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas) - + let selectedPoint = null let selectedLineEntity = null let pointIndex = -1 let originalCameraController = null let isMoving = false - + // 鼠标按下事件:选择点 this.pointMovementHandler.setInputAction((click) => { const pickedObject = this.viewer.scene.pick(click.position) - + if (Cesium.defined(pickedObject) && pickedObject.id) { const pickedEntity = pickedObject.id - + // 检查是否点击了点实体 if (pickedEntity.point) { // 查找包含该点的线实体 @@ -2419,7 +2419,7 @@ export default { selectedLineEntity = lineEntity pointIndex = index isMoving = true - + // 禁用相机控制器,使地图固定 originalCameraController = this.viewer.scene.screenSpaceCameraController.enableInputs this.viewer.scene.screenSpaceCameraController.enableInputs = false @@ -2430,7 +2430,7 @@ export default { } } }, Cesium.ScreenSpaceEventType.LEFT_DOWN) - + // 鼠标移动事件:移动点 this.pointMovementHandler.setInputAction((movement) => { if (isMoving && selectedPoint && selectedLineEntity) { @@ -2438,14 +2438,14 @@ export default { if (newPosition) { // 更新点的位置 selectedPoint.position = newPosition - + // 创建新的位置数组,确保 Cesium 能够检测到变化 const newPositions = [...selectedLineEntity.positions] newPositions[pointIndex] = newPosition - + // 移除旧的线段实体 this.viewer.entities.remove(selectedLineEntity.entity) - + // 清除所有可能存在的重复线段 const entitiesToRemove = [] this.viewer.entities.values.forEach(e => { @@ -2456,7 +2456,7 @@ export default { entitiesToRemove.forEach(e => { this.viewer.entities.remove(e) }) - + // 创建新的线段实体 const newEntity = this.viewer.entities.add({ id: selectedLineEntity.id, @@ -2468,27 +2468,27 @@ export default { clampToGround: true } }) - + // 更新线实体的引用和位置数组 selectedLineEntity.entity = newEntity selectedLineEntity.positions = newPositions - + // 更新点数据 selectedLineEntity.points[pointIndex] = this.cartesianToLatLng(newPosition) - + // 重新计算距离 const length = this.calculateLineLength(selectedLineEntity.positions) this.measurementResult = { distance: length, type: 'line' } - + // 强制刷新地图渲染 this.viewer.scene.requestRender() } } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE) - + // 鼠标释放事件:结束移动 this.pointMovementHandler.setInputAction(() => { // 恢复相机控制器 @@ -2496,9 +2496,9 @@ export default { this.viewer.scene.screenSpaceCameraController.enableInputs = originalCameraController originalCameraController = null } - - + + isMoving = false selectedPoint = null selectedLineEntity = null diff --git a/ruoyi-ui/src/views/childRoom/LeftMenu.vue b/ruoyi-ui/src/views/childRoom/LeftMenu.vue index 60706fe..a70a304 100644 --- a/ruoyi-ui/src/views/childRoom/LeftMenu.vue +++ b/ruoyi-ui/src/views/childRoom/LeftMenu.vue @@ -2,7 +2,7 @@
@@ -12,29 +12,33 @@
- + + + diff --git a/ruoyi-ui/src/views/dialogs/PageLayoutDialog.vue b/ruoyi-ui/src/views/dialogs/PageLayoutDialog.vue new file mode 100644 index 0000000..0d85718 --- /dev/null +++ b/ruoyi-ui/src/views/dialogs/PageLayoutDialog.vue @@ -0,0 +1,197 @@ + + + + +