HomePage.tsx 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. import React from 'react';
  2. import { useAuth } from '@/client/home-shadcn/hooks/AuthProvider';
  3. import { useNavigate } from 'react-router-dom';
  4. import { Button } from '@/client/components/ui/button';
  5. import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/client/components/ui/card';
  6. import { Avatar, AvatarFallback, AvatarImage } from '@/client/components/ui/avatar';
  7. import { Badge } from '@/client/components/ui/badge';
  8. import {
  9. ShieldCheck,
  10. UserCircle,
  11. Smartphone,
  12. LogIn,
  13. UserPlus,
  14. ExternalLink
  15. } from 'lucide-react';
  16. const HomePage: React.FC = () => {
  17. const { user } = useAuth();
  18. const navigate = useNavigate();
  19. return (
  20. <div className="min-h-screen bg-gradient-to-br from-slate-50 to-slate-100">
  21. {/* 顶部导航 */}
  22. <header className="sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60">
  23. <div className="container mx-auto flex h-16 items-center justify-between">
  24. <div className="flex items-center space-x-2">
  25. <ShieldCheck className="h-6 w-6 text-primary" />
  26. <h1 className="text-xl font-bold">网站首页</h1>
  27. </div>
  28. <div className="flex items-center space-x-4">
  29. {user ? (
  30. <div
  31. className="flex items-center space-x-3 cursor-pointer hover:bg-muted/50 rounded-lg px-3 py-2 transition-colors"
  32. onClick={() => navigate('/member')}
  33. >
  34. <Avatar className="h-8 w-8">
  35. <AvatarImage src={`https://avatar.vercel.sh/${user.username}`} />
  36. <AvatarFallback className="bg-primary text-primary-foreground">
  37. {user.username?.charAt(0).toUpperCase()}
  38. </AvatarFallback>
  39. </Avatar>
  40. <span className="hidden md:inline text-sm font-medium">{user.username}</span>
  41. </div>
  42. ) : (
  43. <div className="flex items-center space-x-2">
  44. <Button
  45. variant="ghost"
  46. size="sm"
  47. onClick={() => navigate('/login')}
  48. className="flex items-center space-x-1"
  49. >
  50. <LogIn className="h-4 w-4" />
  51. <span>登录</span>
  52. </Button>
  53. <Button
  54. size="sm"
  55. onClick={() => navigate('/register')}
  56. className="flex items-center space-x-1"
  57. >
  58. <UserPlus className="h-4 w-4" />
  59. <span>注册</span>
  60. </Button>
  61. </div>
  62. )}
  63. </div>
  64. </div>
  65. </header>
  66. {/* 主内容区 */}
  67. <main className="container mx-auto py-8">
  68. <div className="mx-auto max-w-6xl space-y-8">
  69. {/* 欢迎区域 */}
  70. <Card className="border-0 shadow-lg">
  71. <CardHeader>
  72. <CardTitle className="text-3xl font-bold bg-gradient-to-r from-primary to-purple-600 bg-clip-text text-transparent">
  73. 欢迎使用网站模板
  74. </CardTitle>
  75. <CardDescription className="text-lg">
  76. 这是一个现代化的网站首页模板,采用 shadcn/ui 设计系统构建
  77. </CardDescription>
  78. </CardHeader>
  79. <CardContent>
  80. <p className="text-muted-foreground">
  81. 已集成完整的用户认证系统,包含登录、注册和用户中心功能。
  82. 使用 React 19 + TypeScript + shadcn/ui + Tailwind CSS 技术栈。
  83. </p>
  84. </CardContent>
  85. </Card>
  86. {/* 功能特性卡片 */}
  87. <div className="grid gap-6 md:grid-cols-3">
  88. <Card className="border-0 shadow-lg hover:shadow-xl transition-shadow">
  89. <CardHeader>
  90. <div className="flex items-center space-x-2">
  91. <div className="p-2 bg-blue-100 rounded-lg">
  92. <ShieldCheck className="h-6 w-6 text-blue-600" />
  93. </div>
  94. <CardTitle className="text-lg">用户认证</CardTitle>
  95. </div>
  96. </CardHeader>
  97. <CardContent>
  98. <CardDescription>
  99. 完整的登录、注册功能,基于 JWT 的现代化认证系统
  100. </CardDescription>
  101. <Badge variant="secondary" className="mt-2">安全认证</Badge>
  102. </CardContent>
  103. </Card>
  104. <Card className="border-0 shadow-lg hover:shadow-xl transition-shadow">
  105. <CardHeader>
  106. <div className="flex items-center space-x-2">
  107. <div className="p-2 bg-green-100 rounded-lg">
  108. <UserCircle className="h-6 w-6 text-green-600" />
  109. </div>
  110. <CardTitle className="text-lg">用户中心</CardTitle>
  111. </div>
  112. </CardHeader>
  113. <CardContent>
  114. <CardDescription>
  115. 用户可以查看和管理个人信息,支持头像上传和个人资料编辑
  116. </CardDescription>
  117. <Badge variant="secondary" className="mt-2">个人管理</Badge>
  118. </CardContent>
  119. </Card>
  120. <Card className="border-0 shadow-lg hover:shadow-xl transition-shadow">
  121. <CardHeader>
  122. <div className="flex items-center space-x-2">
  123. <div className="p-2 bg-purple-100 rounded-lg">
  124. <Smartphone className="h-6 w-6 text-purple-600" />
  125. </div>
  126. <CardTitle className="text-lg">响应式设计</CardTitle>
  127. </div>
  128. </CardHeader>
  129. <CardContent>
  130. <CardDescription>
  131. 适配各种设备屏幕,采用移动端优先的设计理念
  132. </CardDescription>
  133. <Badge variant="secondary" className="mt-2">移动优先</Badge>
  134. </CardContent>
  135. </Card>
  136. </div>
  137. {/* 快速链接 */}
  138. <Card className="border-0 shadow-lg">
  139. <CardHeader>
  140. <CardTitle className="flex items-center space-x-2">
  141. <ExternalLink className="h-5 w-5" />
  142. <span>快速访问</span>
  143. </CardTitle>
  144. </CardHeader>
  145. <CardContent>
  146. <div className="flex flex-wrap gap-4">
  147. <Button
  148. variant="outline"
  149. onClick={() => window.open('/admin', '_blank')}
  150. className="flex items-center space-x-2"
  151. >
  152. <span>管理后台</span>
  153. <ExternalLink className="h-4 w-4" />
  154. </Button>
  155. <Button
  156. variant="outline"
  157. onClick={() => window.open('/ui', '_blank')}
  158. className="flex items-center space-x-2"
  159. >
  160. <span>API 文档</span>
  161. <ExternalLink className="h-4 w-4" />
  162. </Button>
  163. </div>
  164. </CardContent>
  165. </Card>
  166. </div>
  167. </main>
  168. {/* 页脚 */}
  169. <footer className="border-t bg-background">
  170. <div className="container mx-auto py-6">
  171. <div className="flex flex-col items-center justify-center space-y-2">
  172. <p className="text-sm text-muted-foreground">
  173. 网站模板 ©{new Date().getFullYear()} Created with React & shadcn/ui
  174. </p>
  175. <div className="flex items-center space-x-4 text-sm">
  176. <Button
  177. variant="link"
  178. size="sm"
  179. onClick={() => window.open('/admin', '_blank')}
  180. className="text-muted-foreground hover:text-primary"
  181. >
  182. 管理后台
  183. </Button>
  184. <span className="text-muted-foreground">•</span>
  185. <Button
  186. variant="link"
  187. size="sm"
  188. onClick={() => window.open('/ui', '_blank')}
  189. className="text-muted-foreground hover:text-primary"
  190. >
  191. API 文档
  192. </Button>
  193. </div>
  194. </div>
  195. </div>
  196. </footer>
  197. </div>
  198. );
  199. };
  200. export default HomePage;