// static/js/admin.Employees.jsx function AdminEmployees({ token }) { const [users, setUsers] = useState([]); const [formData, setFormData] = useState({ email: "", first_name: "", last_name: "", password: "", role: "specialist", }); const [editingId, setEditingId] = useState(null); const [loading, setLoading] = useState(false); // Загрузка списка при старте const fetchUsers = async () => { try { setLoading(true); const data = await API.adminGetUsers(token); setUsers(data); } catch (e) { console.error(e); alert(e.message || "Ошибка загрузки списка сотрудников"); } finally { setLoading(false); } }; useEffect(() => { fetchUsers(); }, []); // Логика кнопки "Добавить" / "Сохранить" const handleSubmit = async () => { const payload = { ...formData }; if (editingId && !payload.password) { delete payload.password; } try { setLoading(true); if (editingId) { await API.adminUpdateUser(token, editingId, payload); } else { await API.adminCreateUser(token, payload); } await fetchUsers(); resetForm(); } catch (e) { console.error(e); alert(e.message || "Ошибка сохранения сотрудника"); } finally { setLoading(false); } }; // Логика кнопки "Удалить" const handleDelete = async (id) => { if (!confirm("Вы уверены, что хотите удалить сотрудника?")) return; try { setLoading(true); await API.adminDeleteUser(token, id); await fetchUsers(); if (editingId === id) { resetForm(); } } catch (e) { console.error(e); alert(e.message || "Ошибка удаления (возможно, нельзя удалить себя)"); } finally { setLoading(false); } }; // Загрузка данных в форму для редактирования const startEdit = (user) => { setEditingId(user.id); setFormData({ email: user.email, first_name: user.first_name, last_name: user.last_name, role: user.role, password: "", }); }; const resetForm = () => { setEditingId(null); setFormData({ email: "", first_name: "", last_name: "", password: "", role: "specialist", }); }; const roleBadges = { admin: { text: "Администратор", color: "bg-purple-100 text-purple-800" }, manager: { text: "Руководитель", color: "bg-orange-100 text-orange-800" }, specialist: { text: "Специалист", color: "bg-gray-200 text-gray-800" }, }; return (
| ФИО | Роль | Действия | |
|---|---|---|---|
| {u.first_name} {u.last_name} | {u.email} | {(roleBadges[u.role] || roleBadges.specialist).text} |
|