From 0f573cbf9cf68a447d644df9991a2fe2bd8dfffb Mon Sep 17 00:00:00 2001 From: LeonG11 Date: Wed, 1 Jul 2026 15:05:52 +0300 Subject: [PATCH] fix: change bg select admin page --- frontend/src/components/AdminStaff.jsx | 138 +++++++++++++++++++++++++ frontend/src/components/AdminStock.jsx | 2 +- frontend/src/pages/AdminPage.jsx | 6 +- 3 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 frontend/src/components/AdminStaff.jsx 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 && ( +

+ {message.text} +

+ )} + + +
+
+ ); +} diff --git a/frontend/src/components/AdminStock.jsx b/frontend/src/components/AdminStock.jsx index 57594d9..16b61ec 100644 --- a/frontend/src/components/AdminStock.jsx +++ b/frontend/src/components/AdminStock.jsx @@ -98,7 +98,7 @@ export default function AdminStock() { // общий класс инпутов 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"; + "bg-slate-800 border border-white/10 rounded px-3 py-2 text-white placeholder-white/40 focus:border-gold focus:outline-none"; return (
diff --git a/frontend/src/pages/AdminPage.jsx b/frontend/src/pages/AdminPage.jsx index 99e0162..f3a7ff1 100644 --- a/frontend/src/pages/AdminPage.jsx +++ b/frontend/src/pages/AdminPage.jsx @@ -3,7 +3,7 @@ import PageLayout from "../components/PageLayout"; import AdminItems from "../components/AdminItems"; import AdminOrders from "../components/AdminOrders"; import AdminStock from "../components/AdminStock"; -// import AdminStaff from "../components/AdminStaff"; // добавим позже +import AdminStaff from "../components/AdminStaff"; export default function AdminPage() { const [tab, setTab] = useState("items"); @@ -42,9 +42,7 @@ export default function AdminPage() { {tab === "items" && } {tab === "orders" && } {tab === "stock" && } - {tab === "staff" && ( -

Раздел сотрудников — в разработке

- )} + {tab === "staff" && } );