blob: b0453e4766838d16fd063e440d89f16733a74a9a [file] [log] [blame]
22301008b86c21c2025-06-20 19:17:00 +08001import React, { useState } from 'react'
TRM-codingd1cbf672025-06-18 15:15:08 +08002import { NavLink, useLocation, useNavigate } from 'react-router-dom'
3import {
4 Home,
5 BookOpen,
TRM-codingd1cbf672025-06-18 15:15:08 +08006 ChevronDown,
7} from 'lucide-react'
8import '../App.css'
9
10const menuItems = [
11 { id: 'home', label: '首页', icon: Home, path: '/home' },
12 { id: 'notebooks', label: '笔记管理', icon: BookOpen, path: '/notebooks' },
wu70fc8c52025-06-19 15:55:03 +080013 // { id: 'activity', label: '活动中心', icon: Activity, path: '/activity' },
14 // { id: 'notes', label: '笔记灵感', icon: BookOpen, path: '/notes' },
15 // { id: 'creator', label: '创作学院', icon: Users, path: '/creator' },
16 // { id: 'journal', label: '创作日刊', icon: BookOpen, path: '/journal' },
TRM-codingd1cbf672025-06-18 15:15:08 +080017]
18
19export default function Sidebar() {
20 const [expandedMenu, setExpandedMenu] = useState(null)
21 const location = useLocation()
22 const navigate = useNavigate()
23
TRM-codingd1cbf672025-06-18 15:15:08 +080024 const toggleMenu = item => {
25 if (item.submenu) {
26 setExpandedMenu(expandedMenu === item.id ? null : item.id)
27 } else {
28 navigate(item.path)
29 setExpandedMenu(null)
30 }
31 }
32
33 return (
34 <aside className="sidebar">
35 {/* 发布笔记 按钮 */}
36 <button
37 className="publish-btn"
38 onClick={() => navigate('/posts/new')}
39 >
40 发布笔记
41 </button>
42
43 <nav className="nav-menu">
44 {menuItems.map(item => (
45 <div key={item.id} className="nav-item">
46 <a
47 href="#"
48 className={`nav-link${location.pathname === item.path ? ' active' : ''}`}
49 onClick={e => { e.preventDefault(); toggleMenu(item) }}
50 >
51 <item.icon size={16} />
52 <span>{item.label}</span>
53 {item.submenu && (
54 <ChevronDown
55 size={16}
56 style={{
57 marginLeft: 'auto',
58 transform: expandedMenu === item.id ? 'rotate(180deg)' : 'rotate(0deg)',
59 transition: 'transform 0.3s ease'
60 }}
61 />
62 )}
63 </a>
64 {item.submenu && expandedMenu === item.id && (
65 <div className="nav-submenu">
66 {item.submenu.map(sub => (
67 <NavLink
68 key={sub.id}
69 to={sub.path}
70 className={({ isActive }) => `nav-link${isActive ? ' active' : ''}`}
71 >
72 {sub.label}
73 </NavLink>
74 ))}
75 </div>
76 )}
77 </div>
78 ))}
79 </nav>
80 </aside>
81 )
82}