添加了相关测试文件,引入Tailwindcss
Change-Id: I12054143571bb688590af0357125a0ed26ff2050
diff --git a/src/App.jsx b/src/App.jsx
new file mode 100644
index 0000000..bb6db99
--- /dev/null
+++ b/src/App.jsx
@@ -0,0 +1,97 @@
+import React, { useState, useEffect } from 'react';
+import { Layout, Menu, Avatar, Dropdown, message, Button } from 'antd';
+import { UserOutlined, LogoutOutlined, HomeOutlined, AppstoreOutlined, SettingOutlined } from '@ant-design/icons';
+import { useNavigate, Link } from 'react-router-dom';
+// 删除 import './App.css';
+
+const { Header, Content, Footer } = Layout;
+
+function App() {
+ const [user, setUser] = useState(null);
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ // 从localStorage获取用户信息
+ const storedUser = localStorage.getItem('user');
+ if (storedUser) {
+ setUser(JSON.parse(storedUser));
+ }
+ }, []);
+
+ const handleLogout = () => {
+ localStorage.removeItem('token');
+ localStorage.removeItem('user');
+ message.success('已成功退出登录');
+ navigate('/login');
+ };
+
+ const userMenu = (
+ <Menu>
+ <Menu.Item key="profile" icon={<UserOutlined />}>
+ 个人资料
+ </Menu.Item>
+ <Menu.Divider />
+ <Menu.Item key="logout" icon={<LogoutOutlined />} onClick={handleLogout}>
+ 退出登录
+ </Menu.Item>
+ </Menu>
+ );
+
+ return (
+ <Layout className="min-h-screen">
+ <Header className="flex items-center px-6">
+ <div className="text-white text-xl font-bold mr-6">PT网站</div>
+ <Menu theme="dark" mode="horizontal" defaultSelectedKeys={['1']}>
+ <Menu.Item key="1" icon={<HomeOutlined />}>
+ <Link to="/">首页</Link>
+ </Menu.Item>
+ <Menu.Item key="2" icon={<AppstoreOutlined />}>资源</Menu.Item>
+ {/* 只对管理员显示管理面板菜单项 */}
+ {user?.role === 'admin' && (
+ <Menu.Item key="3" icon={<SettingOutlined />}>
+ <Link to="/admin">管理面板</Link>
+ </Menu.Item>
+ )}
+ </Menu>
+ <div className="ml-auto">
+ <Dropdown menu={userMenu} placement="bottomRight">
+ <span className="flex items-center cursor-pointer text-white">
+ <Avatar src={user?.avatar} icon={<UserOutlined />} />
+ <span className="ml-2">{user?.username || '用户'}</span>
+ <span className="ml-1 text-xs opacity-80">({user?.role || '游客'})</span>
+ </span>
+ </Dropdown>
+ </div>
+ </Header>
+ <Content className="p-6">
+ <div className="bg-white p-6 min-h-[280px] rounded">
+ <h1>欢迎来到PT网站</h1>
+ <p>这里是网站的主要内容区域。您可以在这里展示各种资源和信息。</p>
+
+ {/* 根据用户角色显示不同内容 */}
+ {user?.role === 'admin' && (
+ <div className="mt-6 p-4 bg-gray-50 rounded border-l-4 border-blue-500">
+ <h2>管理员专区</h2>
+ <p>这部分内容只有管理员可以看到。</p>
+ <Button type="primary" onClick={() => navigate('/admin')}>
+ 进入管理面板
+ </Button>
+ </div>
+ )}
+
+ {user?.role === 'moderator' && (
+ <div className="mt-6 p-4 bg-gray-50 rounded border-l-4 border-green-500">
+ <h2>版主专区</h2>
+ <p>这部分内容只有版主可以看到。</p>
+ </div>
+ )}
+ </div>
+ </Content>
+ <Footer className="text-center">
+ PT网站 ©{new Date().getFullYear()} 版权所有
+ </Footer>
+ </Layout>
+ );
+}
+
+export default App;