diff --git a/web/src/pages/TeamAdminLayout.tsx b/web/src/pages/TeamAdminLayout.tsx index a017965..1efa5f4 100644 --- a/web/src/pages/TeamAdminLayout.tsx +++ b/web/src/pages/TeamAdminLayout.tsx @@ -1,6 +1,8 @@ import { NavLink, Outlet, useNavigate } from 'react-router-dom'; import { useAuthStore } from '../store/auth'; -import { useState } from 'react'; +import { useThemeStore } from '../store/theme'; +import { useNotificationStore } from '../store/notification'; +import { useState, useEffect } from 'react'; import logoImg from '../assets/logo_32.png'; import styles from './AdminLayout.module.css'; @@ -14,9 +16,23 @@ const navItems = [ export function TeamAdminLayout() { const user = useAuthStore((s) => s.user); const logout = useAuthStore((s) => s.logout); + const theme = useThemeStore((s) => s.theme); + const toggleTheme = useThemeStore((s) => s.toggleTheme); + const unreadCount = useNotificationStore((s) => s.unreadCount); + const fetchUnreadCount = useNotificationStore((s) => s.fetchUnreadCount); const navigate = useNavigate(); const [collapsed, setCollapsed] = useState(false); + // 60s 轮询未读数 + tab 重新可见时立即拉一次(和 AdminLayout 一致) + useEffect(() => { + if (!user) return; + fetchUnreadCount(); + const tick = setInterval(fetchUnreadCount, 60_000); + const onVis = () => { if (!document.hidden) fetchUnreadCount(); }; + document.addEventListener('visibilitychange', onVis); + return () => { clearInterval(tick); document.removeEventListener('visibilitychange', onVis); }; + }, [user, fetchUnreadCount]); + const handleLogout = () => { logout(); navigate('/login', { replace: true }); @@ -80,6 +96,50 @@ export function TeamAdminLayout() {