import React, { useState, useEffect } from 'react' export default function Users() { const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState('') const [showAddModal, setShowAddModal] = useState(false) const [editingUser, setEditingUser] = useState(null) const [newUser, setNewUser] = useState({ username: '', password: '', email: '', role: 'user' }) const API_BASE = localStorage.getItem('API_BASE') || '' useEffect(() => { fetchUsers() }, []) const fetchUsers = async () => { try { const token = localStorage.getItem('adminToken') const res = await fetch(`${API_BASE}/api/admin/users?page=1&limit=100`, { headers: { 'Authorization': `Bearer ${token}` } }) if (!res.ok) throw new Error('获取用户列表失败') const data = await res.json() setUsers(data) } catch (err) { setError(err.message) } finally { setLoading(false) } } const handleDeleteUser = async (userId, username) => { if (!confirm(`确定要删除用户 "${username}" 吗?`)) return try { const token = localStorage.getItem('adminToken') const res = await fetch(`${API_BASE}/api/admin/users/${userId}`, { method: 'DELETE', headers: { 'Authorization': `Bearer ${token}` } }) if (!res.ok) throw new Error('删除失败') fetchUsers() } catch (err) { alert(err.message) } } const handleAddUser = async () => { if (!newUser.username || !newUser.password) { alert('用户名和密码为必填项'); return } const payload = { ...newUser } if (!payload.email) delete payload.email try { const token = localStorage.getItem('adminToken') const res = await fetch(`${API_BASE}/api/auth/register`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(payload) }) if (!res.ok) throw new Error('添加失败') alert('添加成功!') setShowAddModal(false) setNewUser({ username: '', password: '', email: '', role: 'user' }) fetchUsers() } catch (err) { alert(err.message) } } const handleEditUser = async () => { if (!editingUser.username) { alert('用户名不能为空'); return } if (editingUser.newPassword || editingUser.confirmPassword) { if (!editingUser.newPassword || !editingUser.confirmPassword) { alert('请填写完整密码信息'); return } if (editingUser.newPassword !== editingUser.confirmPassword) { alert('两次输入的密码不一致'); return } if (editingUser.newPassword.length < 6) { alert('密码至少 6 个字符'); return } } try { const token = localStorage.getItem('adminToken') const updateData = { username: editingUser.username, email: editingUser.email, role: editingUser.role } if (editingUser.newPassword && editingUser.newPassword.trim()) updateData.password = editingUser.newPassword const res = await fetch(`${API_BASE}/api/admin/users/${editingUser.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(updateData) }) if (!res.ok) throw new Error('更新失败') alert('更新成功!') setEditingUser(null) fetchUsers() } catch (err) { alert(err.message) } } if (loading) return