diff --git a/apps/web/src/components/dashboard/live-dashboard.tsx b/apps/web/src/components/dashboard/live-dashboard.tsx index 64236a40..b0519257 100644 --- a/apps/web/src/components/dashboard/live-dashboard.tsx +++ b/apps/web/src/components/dashboard/live-dashboard.tsx @@ -61,7 +61,8 @@ export function LiveDashboard({ locale }: LiveDashboardProps) { const tBrand = useTranslations('brand') const tHost = useTranslations('host') - const { connect, disconnect } = useDashboardStore() + // Phase 19 修復: SSE 連接已移至 AppLayout 全局管理 + // const { connect, disconnect } = useDashboardStore() const hosts = useHosts() const overallStatus = useOverallStatus() const alerts = useAlerts() @@ -110,16 +111,12 @@ export function LiveDashboard({ locale }: LiveDashboardProps) { }, } - useEffect(() => { - const apiBaseUrl = getApiBaseUrl() - console.log('[Dashboard] Connecting to SSE...', apiBaseUrl) - connect(apiBaseUrl) - - return () => { - console.log('[Dashboard] Disconnecting SSE...') - disconnect() - } - }, [connect, disconnect]) + // Phase 19 修復: SSE 連接已移至 AppLayout 全局管理 + // useEffect(() => { + // const apiBaseUrl = getApiBaseUrl() + // connect(apiBaseUrl) + // return () => disconnect() + // }, [connect, disconnect]) return (
diff --git a/apps/web/src/components/layout/app-layout.tsx b/apps/web/src/components/layout/app-layout.tsx index 05f78188..1e44e787 100644 --- a/apps/web/src/components/layout/app-layout.tsx +++ b/apps/web/src/components/layout/app-layout.tsx @@ -9,6 +9,9 @@ * - 響應式側邊欄折疊 * - 主內容區域自動適應 * - 持久化折疊狀態 (localStorage) + * - **Phase 19 修復**: 全局 SSE 連接 (所有頁面共享連線狀態) + * + * @updated 2026-03-28 - 修復 Header「已斷線」狀態問題 */ import { useState, useEffect } from 'react' @@ -16,6 +19,7 @@ import { Sidebar } from './sidebar' import { Header } from './header' import { DotMatrixBg } from '@/components/ui/dot-matrix-bg' import { cn } from '@/lib/utils' +import { useDashboardStore } from '@/stores/dashboard.store' // ============================================================================= // Types @@ -45,6 +49,9 @@ export function AppLayout({ const [collapsed, setCollapsed] = useState(false) const [mounted, setMounted] = useState(false) + // Phase 19 修復: 全局 SSE 連接 + const { connect, disconnect } = useDashboardStore() + // Load collapsed state from localStorage useEffect(() => { setMounted(true) @@ -54,6 +61,20 @@ export function AppLayout({ } }, []) + // Phase 19 修復: 全局啟動 SSE 連接 (所有頁面共享) + useEffect(() => { + const apiBaseUrl = process.env.NEXT_PUBLIC_API_URL || '' + if (apiBaseUrl) { + console.log('[AppLayout] 全局 SSE 連接啟動...', apiBaseUrl) + connect(apiBaseUrl) + } + + return () => { + console.log('[AppLayout] SSE 連接關閉') + disconnect() + } + }, [connect, disconnect]) + // Save collapsed state to localStorage const handleToggle = () => { const newState = !collapsed