blob: 5296647c4f0476b14c0e0c48d5b49717a7e3bdd2 [file] [log] [blame]
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;