blob: 8eb48e3b98c6d3c607197acfea3c62020ac4d5fa [file] [log] [blame]
// src/components/UserManagement.jsx
import React, { useState, useEffect } from 'react'
import { useParams } from 'react-router-dom'
import { Table, Select, message } from 'antd'
import {
fetchUserList,
giveUser,
giveAdmin,
giveSuperAdmin
} from '../api/posts_trm'
import '../style/Admin.css'
const { Option } = Select
const ROLE_LIST = ['用户', '管理员', '超级管理员']
export default function UserManagement() {
// 直接从 URL 参数里拿到 superAdminId
const { userId: superAdminId } = useParams()
const [users, setUsers] = useState([])
const [unauthorized, setUnauthorized] = useState(false)
useEffect(() => {
async function load() {
try {
// 调用接口获取用户列表
const data = await fetchUserList(superAdminId)
// 检查是否是权限错误
if (data && data.status === 'error' && data.message === 'Unauthorized') {
setUnauthorized(true)
setUsers([])
return
}
// 确保数据是数组格式
let userList = []
if (Array.isArray(data)) {
userList = data
} else if (Array.isArray(data.data)) {
userList = data.data
} else if (Array.isArray(data.users)) {
userList = data.users
}
setUsers(userList)
setUnauthorized(false)
} catch (e) {
console.error(e)
if (e.message === 'Unauthorized') {
setUnauthorized(true)
setUsers([])
} else {
message.error('获取用户列表失败:' + e.message)
}
}
}
// 只有当 superAdminId 有值时才发请求
if (superAdminId) {
load()
}
}, [superAdminId])
// 处理角色变更
const handleRoleChange = async (userId, newRole) => {
try {
let result
if (newRole === '用户') {
result = await giveUser(userId)
} else if (newRole === '管理员') {
result = await giveAdmin(userId)
} else if (newRole === '超级管理员') {
result = await giveSuperAdmin(userId)
}
// 检查返回结果是否有权限错误
if (result && result.status === 'error' && result.message === 'Unauthorized') {
setUnauthorized(true)
message.error('权限不足,无法执行此操作')
return
}
// 本地更新状态
setUsers(us =>
us.map(u => (u.id === userId ? { ...u, role: newRole } : u))
)
message.success('修改成功')
} catch (e) {
console.error(e)
if (e.message === 'Unauthorized') {
setUnauthorized(true)
message.error('权限不足,无法执行此操作')
} else {
message.error('修改失败:' + e.message)
}
}
}
// 表格列定义
const columns = [
{ title: '用户名', dataIndex: 'username', key: 'username' },
{ title: '角色', dataIndex: 'role', key: 'role' },
{
title: '操作',
key: 'action',
render: (_, record) => {
// 当前角色排第一
const orderedRoles = [
record.role,
...ROLE_LIST.filter(r => r !== record.role)
]
return (
<Select
value={record.role}
style={{ width: 120 }}
onChange={value => handleRoleChange(record.id, value)}
>
{orderedRoles.map(r => (
<Option key={r} value={r}>
{r}
</Option>
))}
</Select>
)
}
}
]
return (
<div className="admin-container">
{unauthorized ? (
<div style={{
textAlign: 'center',
padding: '50px',
fontSize: '18px',
color: '#ff4d4f'
}}>
权限不足,无法访问用户管理功能
</div>
) : (
<Table
dataSource={users}
columns={columns}
rowKey="id"
pagination={false}
/>
)}
</div>
)
}