Layout.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { CircleHelp, LogOut, UserRound } from 'lucide-react'
  2. import { NavLink, Outlet } from 'react-router-dom'
  3. import { Brand } from './Brand'
  4. import { Footer } from './Footer'
  5. import { useAuth } from '../AuthContext'
  6. export function Layout() {
  7. const { user, logout } = useAuth()
  8. return (
  9. <div className="app-shell">
  10. <header className="topbar">
  11. <NavLink to="/" className="logo-link">
  12. <Brand />
  13. </NavLink>
  14. <nav>
  15. <NavLink to="/" end>
  16. 我的课程
  17. </NavLink>
  18. </nav>
  19. <div className="top-actions">
  20. {user?.role !== 'ADMIN' && (
  21. <NavLink to="/profile?tab=points" className="points-balance-badge" title="查看积分消费记录">
  22. 积分 {user?.pointsBalance ?? 0}
  23. </NavLink>
  24. )}
  25. <NavLink to="/profile" className="user-link">
  26. <UserRound size={16} />
  27. <span>{user?.contactName || user?.phone}</span>
  28. </NavLink>
  29. <NavLink to="/help" className="icon-button" title="使用帮助">
  30. <CircleHelp size={19} />
  31. </NavLink>
  32. <button className="icon-button" title="退出登录" onClick={logout}>
  33. <LogOut size={18} />
  34. </button>
  35. </div>
  36. </header>
  37. <main className="app-main">
  38. <Outlet />
  39. </main>
  40. <Footer />
  41. </div>
  42. )
  43. }