diff --git a/src/pages/movement-supervision.vue b/src/pages/movement-supervision.vue index ce3c0d4..e182122 100644 --- a/src/pages/movement-supervision.vue +++ b/src/pages/movement-supervision.vue @@ -106,6 +106,17 @@ const client = shallowRef(); // 电梯状态管理 const elevatorStore = useElevatorStore(); + +// 计算当前场景的楼层号 +const currentFloor = computed(() => currentFloorIndex.value + 1); + +// 将当前楼层信息提供给电梯store +elevatorStore.setCurrentFloor(currentFloor.value); + +// 监听楼层变化,更新电梯store中的当前楼层 +watch(currentFloor, (newFloor) => { + elevatorStore.setCurrentFloor(newFloor); +}); // 模拟门设备WS推送(仅开发调试使用) let doorMockTimer: number | undefined; let doorMockStatus: 0 | 1 = 0; @@ -533,7 +544,7 @@ onMounted(async () => { elevatorStore.handleElevatorWebSocketData({ id: '1998661793706377218', type: 102, - elevatorFloor: 5, + elevatorFloor: 1, elevatorDirection: 2, // 停止 elevatorFrontDoorStatus: 2, // 正在开关 isConnected: true @@ -544,26 +555,26 @@ onMounted(async () => { // 定义电梯状态变化序列 const elevatorStates = [ - { floor: 5, direction: 2, doorStatus: 2 }, // 5楼,停止,正在开关门 - { floor: 5, direction: 2, doorStatus: 3 }, // 5楼,停止,门已开 - { floor: 5, direction: 2, doorStatus: 1 }, // 5楼,停止,门已关 - { floor: 5, direction: 2, doorStatus: 1 }, // 5楼,向上,门已关 - { floor: 6, direction: 2, doorStatus: 1 }, // 6楼,向上,门已关 - { floor: 6, direction: 2, doorStatus: 2 }, // 6楼,向上,正在开关门 - { floor: 6, direction: 2, doorStatus: 3 }, // 6楼,向上,门已开 - { floor: 6, direction: 2, doorStatus: 1 }, // 6楼,向上,门已关 - { floor: 7, direction: 2, doorStatus: 1 }, // 7楼,向上,门已关 - { floor: 7, direction: 2, doorStatus: 2 }, // 7楼,向上,正在开关门 - { floor: 7, direction: 2, doorStatus: 3 }, // 7楼,向上,门已开 - { floor: 7, direction: 2, doorStatus: 1 }, // 7楼,向上,门已关 - { floor: 7, direction: 1, doorStatus: 1 }, // 7楼,停止,门已关 - { floor: 7, direction: 3, doorStatus: 1 }, // 7楼,向下,门已关 - { floor: 6, direction: 3, doorStatus: 1 }, // 6楼,向下,门已关 - { floor: 6, direction: 3, doorStatus: 2 }, // 6楼,向下,正在开关门 - { floor: 6, direction: 3, doorStatus: 3 }, // 6楼,向下,门已开 - { floor: 6, direction: 3, doorStatus: 1 }, // 6楼,向下,门已关 - { floor: 5, direction: 3, doorStatus: 1 }, // 5楼,向下,门已关 - { floor: 5, direction: 1, doorStatus: 1 }, // 5楼,停止,门已关 + { floor: 1, direction: 2, doorStatus: 2 }, // 1楼,停止,正在开关门 + { floor: 1, direction: 2, doorStatus: 3 }, // 1楼,停止,门已开 + { floor: 1, direction: 2, doorStatus: 1 }, // 1楼,停止,门已关 + { floor: 1, direction: 2, doorStatus: 1 }, // 1楼,向上,门已关 + { floor: 2, direction: 2, doorStatus: 1 }, // 2楼,向上,门已关 + { floor: 2, direction: 2, doorStatus: 2 }, // 2楼,向上,正在开关门 + { floor: 2, direction: 2, doorStatus: 3 }, // 2楼,向上,门已开 + { floor: 2, direction: 2, doorStatus: 1 }, // 2楼,向上,门已关 + { floor: 3, direction: 2, doorStatus: 1 }, // 3楼,向上,门已关 + { floor: 3, direction: 2, doorStatus: 2 }, // 3楼,向上,正在开关门 + { floor: 3, direction: 2, doorStatus: 3 }, // 3楼,向上,门已开 + { floor: 3, direction: 2, doorStatus: 1 }, // 3楼,向上,门已关 + { floor: 3, direction: 1, doorStatus: 1 }, // 3楼,停止,门已关 + { floor: 3, direction: 3, doorStatus: 1 }, // 3楼,向下,门已关 + { floor: 2, direction: 3, doorStatus: 1 }, // 2楼,向下,门已关 + { floor: 2, direction: 3, doorStatus: 2 }, // 2楼,向下,正在开关门 + { floor: 2, direction: 3, doorStatus: 3 }, // 2楼,向下,门已开 + { floor: 2, direction: 3, doorStatus: 1 }, // 2楼,向下,门已关 + { floor: 1, direction: 3, doorStatus: 1 }, // 1楼,向下,门已关 + { floor: 1, direction: 1, doorStatus: 1 }, // 1楼,停止,门已关 ]; elevatorMockTimer = window.setInterval(() => { diff --git a/src/services/editor/editor-drawers.ts b/src/services/editor/editor-drawers.ts index 40d9ae8..422829a 100644 --- a/src/services/editor/editor-drawers.ts +++ b/src/services/editor/editor-drawers.ts @@ -391,8 +391,12 @@ function drawElevatorMinimal( elevatorDirection, elevatorFrontDoorStatus, isConnected, + isCurrentFloor = true, // 默认为true,兼容旧数据 } = elevatorData; + // 如果不是当前楼层,强制设为关门状态,但保留其他状态 + const actualDoorStatus = isCurrentFloor ? elevatorFrontDoorStatus : 1; + const { x = 0, y = 0, width: w = 0, height: h = 0 } = pen.calculative?.worldRect ?? {}; // 基于pen元素尺寸的动态边框参数 @@ -475,7 +479,7 @@ function drawElevatorMinimal( y + h / 2, Math.min(48, w * 0.8), // 根据pen大小调整电梯图标宽度,最大48像素 Math.min(60, h * 0.8), // 根据pen大小调整电梯图标高度,最大60像素 - elevatorFrontDoorStatus, + actualDoorStatus, // 使用经过楼层过滤后的门状态 time, elevatorDirection ); diff --git a/src/stores/elevator.store.ts b/src/stores/elevator.store.ts index f0e30bd..939ae78 100644 --- a/src/stores/elevator.store.ts +++ b/src/stores/elevator.store.ts @@ -47,6 +47,8 @@ export const useElevatorStore = defineStore('elevator', () => { const elevators = ref>(new Map()); const elevatorPoints = ref>(new Map()); const editorService = ref(null); + // 当前楼层状态 + const currentFloor = ref(1); // 动画相关状态 const movingElevators = ref>(new Set()); const animationFrameId = ref(null); @@ -54,7 +56,16 @@ export const useElevatorStore = defineStore('elevator', () => { // ========== 方法 ========== - + /** + * 设置当前楼层 + */ + const setCurrentFloor = (floor: number) => { + currentFloor.value = floor; + console.log(`🛗 当前楼层设置为: ${floor}`); + // 重新刷新所有电梯显示,以应用新的楼层过滤 + refreshMapping(); + }; + /** * 设置编辑器服务 * 注意:此方法只保存编辑器引用,不会立即构建映射 @@ -240,6 +251,9 @@ export const useElevatorStore = defineStore('elevator', () => { const penId = elevatorData.penId; + // 判断电梯当前楼层是否与场景楼层一致 + const isCurrentFloor = elevatorData.elevatorFloor === currentFloor.value; + // 基础更新数据 const updateData: any = { // 更新点位信息 @@ -250,7 +264,8 @@ export const useElevatorStore = defineStore('elevator', () => { lastUpdate: elevatorData.lastUpdate, // 保存原始后端数据 elevatorDirection: elevatorData.elevatorDirection, - elevatorFrontDoorStatus: elevatorData.elevatorFrontDoorStatus + elevatorFrontDoorStatus: isCurrentFloor ? elevatorData.elevatorFrontDoorStatus : 1, // 非当前楼层强制设为关门状态 + isCurrentFloor: isCurrentFloor // 添加标识,用于渲染层判断 } }; @@ -258,6 +273,10 @@ export const useElevatorStore = defineStore('elevator', () => { // 更新电梯点 editorService.value.updatePen(penId, updateData, false); + // 调试信息 + if (elevatorData.elevatorFloor !== currentFloor.value) { + console.log(`🛗 电梯 ${elevatorData.deviceId} 位于 ${elevatorData.elevatorFloor} 楼,当前场景为 ${currentFloor.value} 楼,隐藏开关门状态`); + } } catch (error) { console.error(`🛗 更新电梯点显示失败 (${elevatorData.deviceId}):`, error); @@ -286,8 +305,10 @@ export const useElevatorStore = defineStore('elevator', () => { elevators, elevatorPoints, editorService, + currentFloor, // 方法 setEditorService, + setCurrentFloor, handleElevatorWebSocketData, refreshMapping };