blob: fd2a3816035c88228f71b24639168331ac458254 [file] [log] [blame]
Krishyadbfadaa2025-06-09 20:33:15 +08001import React, { useEffect } from 'react';
Krishyaf1d0ea82025-05-03 17:01:58 +08002import './Header.css';
223010095b28c672025-04-10 20:12:45 +08003import logo from '../assets/logo.png';
22301009df48f962025-06-05 13:40:44 +08004import { useUser } from '../context/UserContext';
Krishyadbfadaa2025-06-09 20:33:15 +08005import { BookOpen } from '@icon-park/react';
6import { useLocation } from 'wouter';
223010095b28c672025-04-10 20:12:45 +08007
8const Header = () => {
22301009df48f962025-06-05 13:40:44 +08009 const { user } = useUser();
Krishyadbfadaa2025-06-09 20:33:15 +080010 const [location, setLocation] = useLocation();
223010095b28c672025-04-10 20:12:45 +080011
22301009007da0e2025-04-15 21:24:46 +080012 const navLinks = [
13 { to: '/friend-moments', label: '好友动态' },
14 { to: '/forum', label: '论坛' },
15 { to: '/interest-groups', label: '兴趣小组' },
16 { to: '/seed-list', label: '种子列表' },
17 { to: '/publish-seed', label: '发布种子' },
18 ];
19
Krishyadbfadaa2025-06-09 20:33:15 +080020 // 头像变化时刷新组件(这段其实 React 会自动做,但你手动 history 管理就错过了)
21 useEffect(() => {}, [user?.avatarUrl]);
223010095b28c672025-04-10 20:12:45 +080022
23 return (
24 <div className="main-page">
223010095b28c672025-04-10 20:12:45 +080025 <header className="header">
223010095b28c672025-04-10 20:12:45 +080026 <div className="logo-and-name">
27 <img src={logo} alt="网站 logo" className="logo" />
28 <span className="site-name">Echo</span>
29 </div>
223010093d8132e2025-06-07 11:34:38 +080030 <div className="user-and-message" style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>
Krishyadbfadaa2025-06-09 20:33:15 +080031 <button
32 className="guide-button"
33 onClick={() => setLocation('/new-user-guide')}
34 title="新手指南"
35 >
36 <BookOpen theme="outline" size="20" fill="#fff" />
37 <span style={{ marginLeft: '6px' }}>新手指南</span>
38 </button>
223010093d8132e2025-06-07 11:34:38 +080039
22301009007da0e2025-04-15 21:24:46 +080040 <a href="/user/profile">
22301009df48f962025-06-05 13:40:44 +080041 <img
42 src={user?.avatarUrl}
43 alt="用户头像"
44 className="user-avatar"
45 />
22301009007da0e2025-04-15 21:24:46 +080046 </a>
Krishyadbfadaa2025-06-09 20:33:15 +080047
48 {/* <span
22301009df48f962025-06-05 13:40:44 +080049 className="message-center"
Krishyadbfadaa2025-06-09 20:33:15 +080050 onClick={() => setLocation('/messages')}
Krishyaf1d0ea82025-05-03 17:01:58 +080051 style={{ cursor: 'pointer' }}
52 >
53 消息
Krishyadbfadaa2025-06-09 20:33:15 +080054 </span> */}
223010095b28c672025-04-10 20:12:45 +080055 </div>
56 </header>
22301009007da0e2025-04-15 21:24:46 +080057
223010095b28c672025-04-10 20:12:45 +080058 <nav className="nav">
22301009007da0e2025-04-15 21:24:46 +080059 {navLinks.map(({ to, label }) => (
22301009df48f962025-06-05 13:40:44 +080060 <a
61 key={to}
22301009007da0e2025-04-15 21:24:46 +080062 href={to}
63 onClick={(e) => {
Krishyaf1d0ea82025-05-03 17:01:58 +080064 e.preventDefault();
Krishyadbfadaa2025-06-09 20:33:15 +080065 setLocation(to);
22301009007da0e2025-04-15 21:24:46 +080066 }}
Krishyadbfadaa2025-06-09 20:33:15 +080067 className={`nav-item ${location.startsWith(to) ? 'active' : ''}`}
22301009007da0e2025-04-15 21:24:46 +080068 >
69 {label}
70 </a>
71 ))}
223010095b28c672025-04-10 20:12:45 +080072 </nav>
73 </div>
74 );
75};
76
77export default Header;