blob: bb6db99aaf8b2ff84fef4865575499a40d070303 [file] [log] [blame]
ybt02e716d2025-04-15 17:19:32 +08001import React, { useState, useEffect } from 'react';
2import { Layout, Menu, Avatar, Dropdown, message, Button } from 'antd';
3import { UserOutlined, LogoutOutlined, HomeOutlined, AppstoreOutlined, SettingOutlined } from '@ant-design/icons';
4import { useNavigate, Link } from 'react-router-dom';
5// 删除 import './App.css';
6
7const { Header, Content, Footer } = Layout;
8
9function App() {
10 const [user, setUser] = useState(null);
11 const navigate = useNavigate();
12
13 useEffect(() => {
14 // 从localStorage获取用户信息
15 const storedUser = localStorage.getItem('user');
16 if (storedUser) {
17 setUser(JSON.parse(storedUser));
18 }
19 }, []);
20
21 const handleLogout = () => {
22 localStorage.removeItem('token');
23 localStorage.removeItem('user');
24 message.success('已成功退出登录');
25 navigate('/login');
26 };
27
28 const userMenu = (
29 <Menu>
30 <Menu.Item key="profile" icon={<UserOutlined />}>
31 个人资料
32 </Menu.Item>
33 <Menu.Divider />
34 <Menu.Item key="logout" icon={<LogoutOutlined />} onClick={handleLogout}>
35 退出登录
36 </Menu.Item>
37 </Menu>
38 );
39
40 return (
41 <Layout className="min-h-screen">
42 <Header className="flex items-center px-6">
43 <div className="text-white text-xl font-bold mr-6">PT网站</div>
44 <Menu theme="dark" mode="horizontal" defaultSelectedKeys={['1']}>
45 <Menu.Item key="1" icon={<HomeOutlined />}>
46 <Link to="/">首页</Link>
47 </Menu.Item>
48 <Menu.Item key="2" icon={<AppstoreOutlined />}>资源</Menu.Item>
49 {/* 只对管理员显示管理面板菜单项 */}
50 {user?.role === 'admin' && (
51 <Menu.Item key="3" icon={<SettingOutlined />}>
52 <Link to="/admin">管理面板</Link>
53 </Menu.Item>
54 )}
55 </Menu>
56 <div className="ml-auto">
57 <Dropdown menu={userMenu} placement="bottomRight">
58 <span className="flex items-center cursor-pointer text-white">
59 <Avatar src={user?.avatar} icon={<UserOutlined />} />
60 <span className="ml-2">{user?.username || '用户'}</span>
61 <span className="ml-1 text-xs opacity-80">({user?.role || '游客'})</span>
62 </span>
63 </Dropdown>
64 </div>
65 </Header>
66 <Content className="p-6">
67 <div className="bg-white p-6 min-h-[280px] rounded">
68 <h1>欢迎来到PT网站</h1>
69 <p>这里是网站的主要内容区域。您可以在这里展示各种资源和信息。</p>
70
71 {/* 根据用户角色显示不同内容 */}
72 {user?.role === 'admin' && (
73 <div className="mt-6 p-4 bg-gray-50 rounded border-l-4 border-blue-500">
74 <h2>管理员专区</h2>
75 <p>这部分内容只有管理员可以看到。</p>
76 <Button type="primary" onClick={() => navigate('/admin')}>
77 进入管理面板
78 </Button>
79 </div>
80 )}
81
82 {user?.role === 'moderator' && (
83 <div className="mt-6 p-4 bg-gray-50 rounded border-l-4 border-green-500">
84 <h2>版主专区</h2>
85 <p>这部分内容只有版主可以看到。</p>
86 </div>
87 )}
88 </div>
89 </Content>
90 <Footer className="text-center">
91 PT网站 ©{new Date().getFullYear()} 版权所有
92 </Footer>
93 </Layout>
94 );
95}
96
97export default App;