"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState, useEffect } from "react"; import { Menu, X, Sun, Moon, LogIn, UserPlus, LogOut, PenSquare, Search, Settings } from "lucide-react"; import { apiMe, apiLogout, type User } from "@/lib/api"; import NotificationBell from "./NotificationBell"; export default function Header() { const router = useRouter(); const [menuOpen, setMenuOpen] = useState(false); const [theme, setTheme] = useState<"light" | "dark">("light"); const [user, setUser] = useState(null); const [searchQuery, setSearchQuery] = useState(""); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); const q = searchQuery.trim(); if (q) { router.push(`/?q=${encodeURIComponent(q)}`); } }; useEffect(() => { // 读取主题 const savedTheme = document.documentElement.classList.contains("dark") ? "dark" : "light"; setTheme(savedTheme); // 从后端获取登录态(HttpOnly cookie 自动携带) apiMe() .then((res) => setUser(res.user || null)) .catch(() => setUser(null)); }, []); const toggleTheme = () => { const newTheme = theme === "dark" ? "light" : "dark"; setTheme(newTheme); document.documentElement.classList.toggle("dark", newTheme === "dark"); document.cookie = `j13-theme=${newTheme}; path=/; max-age=31536000`; }; const handleLogout = async () => { try { await apiLogout(); } catch { /* ignore */ } setUser(null); setMenuOpen(false); router.refresh(); }; return (
姜十三论坛 {/* 桌面端导航 */} {/* 移动端菜单按钮 */}
{/* 移动端下拉菜单 */} {menuOpen && (
{ handleSearch(e); setMenuOpen(false); }} className="relative"> setSearchQuery(e.target.value)} placeholder="搜索帖子..." className="w-full pl-9 pr-3 py-2 rounded-lg text-sm" style={{ background: "var(--bg-secondary)", color: "var(--text)", border: "1px solid var(--border)" }} /> setMenuOpen(false)} className="block py-2" style={{ color: "var(--text)" }}>首页 {user && ( setMenuOpen(false)} className="block py-2" style={{ color: "var(--text)" }}>发帖 )} {user ? ( setMenuOpen(false)} className="block py-2" style={{ color: "var(--text)" }}>通知中心 ) : null} {user ? ( <> setMenuOpen(false)} className="block py-2" style={{ color: "var(--text)" }}>账号设置 ) : ( <> setMenuOpen(false)} className="block py-2" style={{ color: "var(--text)" }}>登录 setMenuOpen(false)} className="block py-2" style={{ color: "var(--text)" }}>注册 )}
)}
); }