blob: 4bd05c527e78f06eb36e6abb7bdf2555c8bd2284 [file] [log] [blame]
TRM-codingd1cbf672025-06-18 15:15:08 +08001import React, { useState, useEffect } from 'react';
2import '../style/Admin.css';
3import { Select, message, Table } from 'antd';
4import { fetchUserList, giveUser, giveAdmin, giveSuperAdmin } from '../api/posts';
5
6const { Option } = Select;
7const ROLE_LIST = ['用户', '管理员', '超级管理员'];
8
9function UserManagement({ superAdminId }) {
10 const [users, setUsers] = useState([]);
11
12 useEffect(() => {
13 async function load() {
14 try {
15 const data = superAdminId
16 ? await fetchUserList(superAdminId)
17 : await fetch('/api/users').then(res => res.json());
18 setUsers(data);
19 } catch (e) {
20 console.error(e);
21 }
22 }
23 load();
24 }, [superAdminId]);
25
26 // handle role changes
27 const handleRoleChange = async (userId, newRole) => {
28 try {
29 if (newRole === '用户') await giveUser(superAdminId, userId);
30 else if (newRole === '管理员') await giveAdmin(superAdminId, userId);
31 else if (newRole === '超级管理员') await giveSuperAdmin(superAdminId, userId);
32 setUsers(us => us.map(u => u.id === userId ? { ...u, role: newRole } : u));
33 message.success('修改成功');
34 } catch (e) {
35 console.error(e);
36 message.error('修改失败');
37 }
38 };
39
40 // define table columns
41 const columns = [
42 { title: '用户名', dataIndex: 'username', key: 'username' },
43 { title: '角色', dataIndex: 'role', key: 'role' },
44 {
45 title: '操作',
46 key: 'action',
47 render: (_, record) => {
48 const orderedRoles = [record.role, ...ROLE_LIST.filter(r => r !== record.role)];
49 return (
50 <Select
51 value={record.role}
52 style={{ width: 120 }}
53 onChange={value => handleRoleChange(record.id, value)}
54 >
55 {orderedRoles.map(r => (
56 <Option key={r} value={r}>{r}</Option>
57 ))}
58 </Select>
59 );
60 },
61 },
62 ];
63
64 return (
65 <div className="admin-container">
66 <Table
67 dataSource={users}
68 columns={columns}
69 rowKey="id"
70 pagination={false}
71 />
72 </div>
73 );
74}
75
76export default UserManagement;