From 37eae0a8ac09d5cff412d0eb2db8b96ac9da8c02 Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Thu, 1 May 2025 23:08:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=A4=E5=A4=A7=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E5=99=A8=E5=9C=A8=E5=B8=83=E5=B1=80=E4=B8=AD=E6=97=B6=E6=89=8D?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E7=9B=91=E5=90=AC=E5=99=A8=E5=92=8C=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related to #1 --- .../src/composables/useDockerManager.ts | 39 ++++++++++++------- .../src/composables/useStatusMonitor.ts | 13 +++++-- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/packages/frontend/src/composables/useDockerManager.ts b/packages/frontend/src/composables/useDockerManager.ts index 6b537b3..b3366c1 100644 --- a/packages/frontend/src/composables/useDockerManager.ts +++ b/packages/frontend/src/composables/useDockerManager.ts @@ -3,6 +3,7 @@ import { useI18n } from 'vue-i18n'; import { useSettingsStore } from '../stores/settings.store'; import { storeToRefs } from 'pinia'; import type { WebSocketMessage, MessagePayload } from '../types/websocket.types'; +import { useLayoutStore } from '../stores/layout.store'; // --- Interfaces (Copied from DockerManager.vue) --- interface PortInfo { @@ -253,15 +254,21 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe watch(isConnected, (newIsConnected, oldIsConnected) => { console.log(`[DockerManager ${sessionId}] Connection status changed: ${oldIsConnected} -> ${newIsConnected}`); if (newIsConnected) { - // Connection established - setupWsListeners(); - requestDockerStatus(); // Fetch initial status + // 只有当Docker管理器在布局中时才设置监听器和定时器 + const layoutStore = useLayoutStore(); + if (layoutStore.usedPanes.has('dockerManager')) { + // Connection established + setupWsListeners(); + requestDockerStatus(); // Fetch initial status - // Start refresh interval (consider if backend pushes updates reliably) - if (!refreshInterval) { - // Keep a safety interval - refreshInterval = setInterval(requestDockerStatus, 15000); // Check every 15s - console.log(`[DockerManager ${sessionId}] Main refresh interval started (15s).`); + // Start refresh interval (consider if backend pushes updates reliably) + if (!refreshInterval) { + // Keep a safety interval + refreshInterval = setInterval(requestDockerStatus, 15000); // Check every 15s + console.log(`[DockerManager ${sessionId}] Main refresh interval started (15s).`); + } + } else { + console.log(`[DockerManager ${sessionId}] Docker管理器不在布局中,跳过设置监听器和定时器。`); } } else { // Connection lost @@ -283,11 +290,17 @@ export function createDockerManager(sessionId: string, wsDeps: DockerManagerDepe // This handles cases where the manager is created after the WS connection is live. if (isConnected.value) { console.log(`[DockerManager ${sessionId}] Initial setup: Already connected.`); - setupWsListeners(); - requestDockerStatus(); - if (!refreshInterval) { - refreshInterval = setInterval(requestDockerStatus, 15000); - console.log(`[DockerManager ${sessionId}] Initial setup: Main refresh interval started (15s).`); + // 只有当Docker管理器在布局中时才设置监听器和定时器 + const layoutStore = useLayoutStore(); + if (layoutStore.usedPanes.has('dockerManager')) { + setupWsListeners(); + requestDockerStatus(); + if (!refreshInterval) { + refreshInterval = setInterval(requestDockerStatus, 15000); + console.log(`[DockerManager ${sessionId}] Initial setup: Main refresh interval started (15s).`); + } + } else { + console.log(`[DockerManager ${sessionId}] Docker管理器不在布局中,跳过初始设置。`); } } else { console.log(`[DockerManager ${sessionId}] Initial setup: Not connected yet.`); diff --git a/packages/frontend/src/composables/useStatusMonitor.ts b/packages/frontend/src/composables/useStatusMonitor.ts index 3f2e235..bce0087 100644 --- a/packages/frontend/src/composables/useStatusMonitor.ts +++ b/packages/frontend/src/composables/useStatusMonitor.ts @@ -2,6 +2,7 @@ import { ref, readonly, watch, type Ref, ComputedRef } from 'vue'; // 修正导 // import { useWebSocketConnection } from './useWebSocketConnection'; // 移除全局导入 import type { ServerStatus } from '../types/server.types'; import type { WebSocketMessage, MessagePayload } from '../types/websocket.types'; +import { useLayoutStore } from '../stores/layout.store'; // 定义与 WebSocket 相关的依赖接口 export interface StatusMonitorDependencies { @@ -84,9 +85,15 @@ export function createStatusMonitorManager(sessionId: string, wsDeps: StatusMoni watch(isConnected, (newValue, oldValue) => { console.log(`[会话 ${sessionId}][状态监控模块] 连接状态变化: ${oldValue} -> ${newValue}`); if (newValue) { - registerStatusHandlers(); - // 连接成功后,可以考虑请求一次初始状态(如果后端支持) - // sendMessage({ type: 'status:get', sessionId }); + // 只有当状态监视器在布局中时才注册处理器 + const layoutStore = useLayoutStore(); + if (layoutStore.usedPanes.has('statusMonitor')) { + registerStatusHandlers(); + // 连接成功后,可以考虑请求一次初始状态(如果后端支持) + // sendMessage({ type: 'status:update', sessionId }); + } else { + console.log(`[会话 ${sessionId}][状态监控模块] 状态监视器不在布局中,跳过注册处理器。`); + } } else { unregisterAllStatusHandlers(); // 连接断开时清除状态