diff --git a/frontend/src/components/AdminStaff.jsx b/frontend/src/components/AdminStaff.jsx new file mode 100644 index 0000000..d7158f2 --- /dev/null +++ b/frontend/src/components/AdminStaff.jsx @@ -0,0 +1,138 @@ +import { useState } from "react"; +import { registerAdmin } from "../api/index"; + +const ROLES = [ + { value: "Рабочий", label: "Рабочий" }, + { value: "Админ", label: "Администратор" }, +]; + +export default function AdminStaff() { + const [form, setForm] = useState({ + username: "", + password: "", + first_name: "", + last_name: "", + phone: "", + role: "Рабочий", + }); + const [busy, setBusy] = useState(false); + const [message, setMessage] = useState(null); + + const handleChange = (field) => (e) => + setForm({ ...form, [field]: e.target.value }); + + const handleSubmit = async () => { + // валидация + if (!form.username.trim()) { + setMessage({ type: "error", text: "Введите логин" }); + return; + } + if (form.password.length < 8) { + setMessage({ type: "error", text: "Пароль минимум 8 символов" }); + return; + } + if (!form.first_name.trim() || !form.last_name.trim()) { + setMessage({ type: "error", text: "Введите имя и фамилию" }); + return; + } + + setBusy(true); + setMessage(null); + try { + await registerAdmin(form); + setMessage({ type: "success", text: "Сотрудник зарегистрирован" }); + // очистить форму + setForm({ + username: "", + password: "", + first_name: "", + last_name: "", + phone: "", + role: "Рабочий", + }); + } catch (err) { + setMessage({ + type: "error", + text: err.response?.data?.error || "Не удалось зарегистрировать", + }); + } finally { + setBusy(false); + } + }; + + const inputClass = + "bg-white/5 border border-white/10 rounded px-3 py-2 text-white placeholder-white/40 focus:border-gold focus:outline-none"; + + return ( +
+ {message.text} +
+ )} + + +Раздел сотрудников — в разработке
- )} + {tab === "staff" &&