feat(auth): 实现登录注册功能并重构 App 组件
- 新增登录和注册页面组件
- 实现用户认证和权限管理逻辑
- 重构 App 组件,使用 Router 和 AuthProvider
- 添加管理员面板和论坛页面组件
Change-Id: Iaa4502616970e75e3268537f73c75dac8f60e24d
diff --git a/src/App.jsx b/src/App.jsx
index bb6db99..84658a6 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,96 +1,22 @@
-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;
+import React from "react";
+import { BrowserRouter as Router } from "react-router-dom";
+import { AuthProvider } from "./features/auth/contexts/AuthContext";
+import AppRoutes from "./routes"; // 您的主路由组件
+// 如果您在 main.jsx 中没有使用 Antd 的 App 组件,且需要ConfigProvider
+// import { ConfigProvider, App as AntApp } from 'antd';
+// import antdThemeConfig from './config/antdTheme'; // 假设有主题配置
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>
+ // <ConfigProvider theme={antdThemeConfig}> {/* 如果有主题配置 */}
+ // <AntApp> {/* 如果在 main.jsx 中未使用,可以在这里包裹 */}
+ <Router>
+ <AuthProvider>
+ <AppRoutes />
+ </AuthProvider>
+ </Router>
+ // </AntApp>
+ // </ConfigProvider>
);
}