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:
@@ -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">
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user