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>
   );
 }
 
