'use client' import { useEffect, useState } from 'react' interface MaintenanceInfo { enabled: boolean message: string | null startTime: string | null endTime: string | null } export default function MaintenanceBanner() { const [maintenance, setMaintenance] = useState(null) const [dismissed, setDismissed] = useState(false) useEffect(() => { const fetchMaintenance = async () => { try { const response = await fetch('/api/system-settings') if (response.ok) { const data = await response.json() if (data.maintenanceEnabled && data.maintenanceMessage) { // 检查维护时间范围 const now = new Date() const startTime = data.maintenanceStartTime ? new Date(data.maintenanceStartTime) : null const endTime = data.maintenanceEndTime ? new Date(data.maintenanceEndTime) : null // 如果设置了时间范围,检查是否在范围内 if (startTime && endTime) { if (now < startTime || now > endTime) { return // 不在维护时间范围内,不显示 } } else if (startTime && now < startTime) { return // 维护还未开始 } else if (endTime && now > endTime) { return // 维护已结束 } setMaintenance({ enabled: true, message: data.maintenanceMessage, startTime: data.maintenanceStartTime, endTime: data.maintenanceEndTime, }) } } } catch (error) { console.error('获取维护通知失败:', error) } } fetchMaintenance() // 每5分钟检查一次 const interval = setInterval(fetchMaintenance, 5 * 60 * 1000) return () => clearInterval(interval) }, []) // 检查是否已关闭 useEffect(() => { if (maintenance?.enabled) { const dismissedKey = `maintenance_dismissed_${maintenance.startTime || 'default'}` const isDismissed = sessionStorage.getItem(dismissedKey) === 'true' setDismissed(isDismissed) } }, [maintenance]) if (!maintenance?.enabled || !maintenance.message || dismissed) { return null } const handleDismiss = () => { const dismissedKey = `maintenance_dismissed_${maintenance.startTime || 'default'}` sessionStorage.setItem(dismissedKey, 'true') setDismissed(true) } return (

⚠️ 系统维护通知

{maintenance.message}

) }