blob: 93d8d877187ce261feead28c138aa2ab7ac988a3 [file] [log] [blame]
ybtda5978b2025-05-31 15:58:05 +08001import React, { useState, useEffect } from 'react';
2import { Card, Table, Button, Space, Typography, message, Popconfirm, Spin } from 'antd';
3import { UserOutlined, UploadOutlined, SettingOutlined } from '@ant-design/icons';
4import { getUserList, deleteUser } from '../../auth/services/authApi';
5
6const { Title } = Typography;
7
8const AdminPanel = () => {
9 const [users, setUsers] = useState([]);
10 const [loading, setLoading] = useState(true);
11
12 // 获取管理员信息
13 const adminUser = JSON.parse(localStorage.getItem('user') || '{}');
14
15 // 加载用户数据
16 useEffect(() => {
17 fetchUsers();
18 }, []);
19
20 // 获取用户列表
21 const fetchUsers = async () => {
22 try {
23 setLoading(true);
24 const response = await getUserList(adminUser.username);
25 if (response.success) {
26 const userList = response.data.users || [];
27 // 添加key属性
28 const formattedUsers = userList.map(user => ({
29 ...user,
30 key: user.id,
31 role: user.userType === 1 ? '管理员' : '普通用户',
32 status: '正常'
33 }));
34 setUsers(formattedUsers);
35 }
36 } catch (error) {
37 message.error(error.message || '获取用户列表失败');
38 } finally {
39 setLoading(false);
40 }
41 };
42
43 // 删除用户
44 const handleDelete = async (username) => {
45 try {
46 const response = await deleteUser(adminUser.username, username);
47 if (response.success) {
48 message.success('用户删除成功');
49 fetchUsers(); // 重新加载用户列表
50 }
51 } catch (error) {
52 message.error(error.message || '删除用户失败');
53 }
54 };
55
56 const columns = [
57 { title: '用户名', dataIndex: 'username', key: 'username' },
58 { title: '角色', dataIndex: 'role', key: 'role' },
59 { title: '状态', dataIndex: 'status', key: 'status' },
60 { title: '注册日期', dataIndex: 'createTime', key: 'createTime' },
61 {
62 title: '操作',
63 key: 'action',
64 render: (_, record) => (
65 <Space size="middle">
66 <Button type="link">编辑</Button>
67 {record.userType !== 1 && (
68 <Popconfirm
69 title="确定要删除该用户吗?"
70 onConfirm={() => handleDelete(record.username)}
71 okText="确定"
72 cancelText="取消"
73 >
74 <Button type="link" danger>删除</Button>
75 </Popconfirm>
76 )}
77 </Space>
78 ),
79 },
80 ];
81
82 return (
83 <div className="p-6">
84 <Title level={2}>管理员控制面板</Title>
85 <div className="flex gap-4 mb-6">
86 <Card title="用户统计" className="w-1/3">
87 <div className="flex items-center">
88 <UserOutlined className="text-2xl mr-2" />
89 <span className="text-xl">{users.length} 名用户</span>
90 </div>
91 </Card>
92 <Card title="资源统计" className="w-1/3">
93 <div className="flex items-center">
94 <UploadOutlined className="text-2xl mr-2" />
95 <span className="text-xl">25 个资源</span>
96 </div>
97 </Card>
98 <Card title="系统状态" className="w-1/3">
99 <div className="flex items-center">
100 <SettingOutlined className="text-2xl mr-2" />
101 <span className="text-xl">运行正常</span>
102 </div>
103 </Card>
104 </div>
105 <Card title="用户管理">
106 {loading ? (
107 <div className="flex justify-center py-8">
108 <Spin size="large" tip="加载中..." />
109 </div>
110 ) : (
111 <Table columns={columns} dataSource={users} />
112 )}
113 </Card>
114 </div>
115 );
116};
117
118export default AdminPanel;