fix(ui): Phase 19 P1 修復 Header「已斷線」狀態

問題: 非 Dashboard 頁面顯示「已斷線」,因為 SSE 只在 Dashboard 啟動

修復:
- AppLayout 全局啟動 SSE 連接 (所有頁面共享)
- LiveDashboard 移除重複的 SSE 連接邏輯
- 現在所有頁面都會顯示正確的連線狀態

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-03-28 18:45:26 +08:00
parent d206460751
commit c361153c67
2 changed files with 29 additions and 11 deletions

View File

@@ -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 (
<div className="space-y-6">

View File

@@ -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