diff --git a/src/features/admin/pages/AdminPanel.jsx b/src/features/admin/pages/AdminPanel.jsx
new file mode 100644
index 0000000..93d8d87
--- /dev/null
+++ b/src/features/admin/pages/AdminPanel.jsx
@@ -0,0 +1,118 @@
+import React, { useState, useEffect } from 'react';
+import { Card, Table, Button, Space, Typography, message, Popconfirm, Spin } from 'antd';
+import { UserOutlined, UploadOutlined, SettingOutlined } from '@ant-design/icons';
+import { getUserList, deleteUser } from '../../auth/services/authApi';
+
+const { Title } = Typography;
+
+const AdminPanel = () => {
+  const [users, setUsers] = useState([]);
+  const [loading, setLoading] = useState(true);
+  
+  // 获取管理员信息
+  const adminUser = JSON.parse(localStorage.getItem('user') || '{}');
+  
+  // 加载用户数据
+  useEffect(() => {
+    fetchUsers();
+  }, []);
+  
+  // 获取用户列表
+  const fetchUsers = async () => {
+    try {
+      setLoading(true);
+      const response = await getUserList(adminUser.username);
+      if (response.success) {
+        const userList = response.data.users || [];
+        // 添加key属性
+        const formattedUsers = userList.map(user => ({
+          ...user,
+          key: user.id,
+          role: user.userType === 1 ? '管理员' : '普通用户',
+          status: '正常'
+        }));
+        setUsers(formattedUsers);
+      }
+    } catch (error) {
+      message.error(error.message || '获取用户列表失败');
+    } finally {
+      setLoading(false);
+    }
+  };
+  
+  // 删除用户
+  const handleDelete = async (username) => {
+    try {
+      const response = await deleteUser(adminUser.username, username);
+      if (response.success) {
+        message.success('用户删除成功');
+        fetchUsers(); // 重新加载用户列表
+      }
+    } catch (error) {
+      message.error(error.message || '删除用户失败');
+    }
+  };
+
+  const columns = [
+    { title: '用户名', dataIndex: 'username', key: 'username' },
+    { title: '角色', dataIndex: 'role', key: 'role' },
+    { title: '状态', dataIndex: 'status', key: 'status' },
+    { title: '注册日期', dataIndex: 'createTime', key: 'createTime' },
+    {
+      title: '操作',
+      key: 'action',
+      render: (_, record) => (
+        <Space size="middle">
+          <Button type="link">编辑</Button>
+          {record.userType !== 1 && (
+            <Popconfirm
+              title="确定要删除该用户吗？"
+              onConfirm={() => handleDelete(record.username)}
+              okText="确定"
+              cancelText="取消"
+            >
+              <Button type="link" danger>删除</Button>
+            </Popconfirm>
+          )}
+        </Space>
+      ),
+    },
+  ];
+
+  return (
+    <div className="p-6">
+      <Title level={2}>管理员控制面板</Title>
+      <div className="flex gap-4 mb-6">
+        <Card title="用户统计" className="w-1/3">
+          <div className="flex items-center">
+            <UserOutlined className="text-2xl mr-2" />
+            <span className="text-xl">{users.length} 名用户</span>
+          </div>
+        </Card>
+        <Card title="资源统计" className="w-1/3">
+          <div className="flex items-center">
+            <UploadOutlined className="text-2xl mr-2" />
+            <span className="text-xl">25 个资源</span>
+          </div>
+        </Card>
+        <Card title="系统状态" className="w-1/3">
+          <div className="flex items-center">
+            <SettingOutlined className="text-2xl mr-2" />
+            <span className="text-xl">运行正常</span>
+          </div>
+        </Card>
+      </div>
+      <Card title="用户管理">
+        {loading ? (
+          <div className="flex justify-center py-8">
+            <Spin size="large" tip="加载中..." />
+          </div>
+        ) : (
+          <Table columns={columns} dataSource={users} />
+        )}
+      </Card>
+    </div>
+  );
+};
+
+export default AdminPanel;
\ No newline at end of file
