diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 841dc61..660859e 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -1,21 +1,69 @@ -import React from "react"; +import React, { useState } from "react"; import { createRoot } from "react-dom/client"; +import { getMe, login, register } from "./api"; import "./styles.css"; function App() { + const [mode, setMode] = useState("login"); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [message, setMessage] = useState(""); + const [user, setUser] = useState(null); + + async function handleSubmit(event) { + event.preventDefault(); + setMessage(""); + try { + if (mode === "register") { + await register(email, password); + setMessage("Регистрация завершена. Теперь войдите."); + setMode("login"); + return; + } + const tokenData = await login(email, password); + const currentUser = await getMe(tokenData.access_token); + setUser(currentUser); + setMessage(`Вы вошли как ${currentUser.role}.`); + } catch (error) { + setMessage(error.message); + } + } + return (

Proxmox VPS Panel

-

Защищённая версия панели готова к подключению API.

-

Следующий этап — перенос экранов авторизации, шаблонов и инстансов.

+ {user ? ( + <> +

Добро пожаловать, {user.email}

+

Роль: {user.role}

+ + + ) : ( + <> +

{mode === "login" ? "Вход" : "Регистрация"}

+
+ + + +
+ + + )} + {message &&

{message}

}
); } createRoot(document.getElementById("root")).render( - - - , + , );