| 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 '@/api/auth'; |
| import { useAuth } from '@/features/auth/contexts/AuthContext'; |
| |
| const { Title } = Typography; |
| |
| const AdminPanel = () => { |
| const [users, setUsers] = useState([]); |
| const [loading, setLoading] = useState(true); |
| const { user } = useAuth(); |
| |
| // 获取管理员信息 |
| const adminUser = user; |
| |
| // 加载用户数据 |
| useEffect(() => { |
| fetchUsers(); |
| }, []); |
| |
| // 获取用户列表 |
| const fetchUsers = async () => { |
| try { |
| setLoading(true); |
| const params = { |
| username: adminUser.username, |
| }; |
| const response = await getUserList(params); |
| if (response && response.data) { |
| const userList = response.data.users || []; |
| const totalNumber = response.data.amount || 0; |
| // 添加key属性 |
| const formattedUsers = userList.map(user => ({ |
| ...user, |
| key: user.uid, |
| role: user.level, |
| status: '正常' |
| })); |
| setUsers(formattedUsers); |
| } |
| } catch (error) { |
| message.error('获取用户列表失败'); |
| } finally { |
| setLoading(false); |
| } |
| }; |
| |
| // 删除用户 |
| const handleDelete = async (username) => { |
| try { |
| const params = { |
| username: adminUser.username, |
| targetUsername: username, |
| }; |
| const response = await deleteUser(params); |
| if (response.message) { |
| message.success(response.message || '用户删除成功'); |
| 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"> |
| {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; |