'use client' import Image from 'next/image' import Link from 'next/link' import { signOut } from 'next-auth/react' import { Session } from 'next-auth' import { useState, useRef, useEffect } from 'react' import { initializeNetwork } from '@/lib/network' interface HeaderProps { session: Session | null } export default function Header({ session }: HeaderProps) { const isAdmin = session ? (session.user as any)?.role === 'ADMIN' : false const [showDropdown, setShowDropdown] = useState(false) const [isInternalNetwork, setIsInternalNetwork] = useState(false) const [networkChecked, setNetworkChecked] = useState(false) const [showNetworkBanner, setShowNetworkBanner] = useState(false) const [isAccessingFromExternal, setIsAccessingFromExternal] = useState(false) const dropdownRef = useRef(null) // 系统设置 const [headerBgColor, setHeaderBgColor] = useState('#1f2937') const [logoUrl, setLogoUrl] = useState('http://s3.1080p.hk/shuzhou/2025/05/18/8ebadf0a7cc34eaea00e8619b8efb827.png') const [siteName, setSiteName] = useState('由壹点3D素材') // 加载系统设置 useEffect(() => { const loadSettings = async () => { try { const response = await fetch('/api/system-settings') if (response.ok) { const settings = await response.json() setHeaderBgColor(settings.headerBgColor || '#1f2937') setLogoUrl(settings.logoUrl || 'http://s3.1080p.hk/shuzhou/2025/05/18/8ebadf0a7cc34eaea00e8619b8efb827.png') setSiteName(settings.siteName || '由壹点3D素材') } } catch (error) { console.error('加载系统设置失败:', error) } } loadSettings() }, []) // 检测网络状态 useEffect(() => { const detectNetwork = async () => { try { const networkStatus = await initializeNetwork() setIsInternalNetwork(networkStatus.isInternal) setNetworkChecked(true) // 检查当前是否从外网访问 const currentHost = window.location.hostname const isExternal = currentHost !== '192.168.58.20' && currentHost !== 'localhost' setIsAccessingFromExternal(isExternal) // 如果内网可达但当前从外网访问,显示切换提示(除非用户已关闭) const bannerDismissed = sessionStorage.getItem('networkBannerDismissed') if (networkStatus.isInternal && isExternal && !bannerDismissed) { setShowNetworkBanner(true) } } catch (error) { console.error('网络检测失败:', error) setIsInternalNetwork(false) setNetworkChecked(true) } } detectNetwork() }, []) // 切换到内网地址 const switchToInternal = () => { const currentPath = window.location.pathname + window.location.search window.location.href = `http://192.168.58.20:4320${currentPath}` } // 关闭横幅 const dismissBanner = () => { setShowNetworkBanner(false) sessionStorage.setItem('networkBannerDismissed', 'true') } // 点击外部关闭下拉菜单 useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setShowDropdown(false) } } document.addEventListener('mousedown', handleClickOutside) return () => document.removeEventListener('mousedown', handleClickOutside) }, []) // 获取用户名首字母 const getInitials = (name: string) => { return name?.charAt(0).toUpperCase() || 'U' } return ( <> {/* 网络切换提示横幅 */} {showNetworkBanner && (

检测到您在内网环境

切换到内网地址可获得更快的上传下载速度,并避免登录问题

)}
{/* Logo */} {siteName} {siteName} {/* Navigation */}
) }