diff --git a/web-app/index.html b/web-app/index.html
index 48b1d32..f71f934 100644
--- a/web-app/index.html
+++ b/web-app/index.html
@@ -3,7 +3,27 @@
- Линза+
+ Линза ➕
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web-app/public/favicons/browserconfig.xml b/web-app/public/favicons/browserconfig.xml
new file mode 100644
index 0000000..e1ae694
--- /dev/null
+++ b/web-app/public/favicons/browserconfig.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ #ffffff
+
+
+
diff --git a/web-app/public/favicons/favicon-114x114.png b/web-app/public/favicons/favicon-114x114.png
new file mode 100644
index 0000000..5ddcfe5
Binary files /dev/null and b/web-app/public/favicons/favicon-114x114.png differ
diff --git a/web-app/public/favicons/favicon-120x120.png b/web-app/public/favicons/favicon-120x120.png
new file mode 100644
index 0000000..543722b
Binary files /dev/null and b/web-app/public/favicons/favicon-120x120.png differ
diff --git a/web-app/public/favicons/favicon-144x144.png b/web-app/public/favicons/favicon-144x144.png
new file mode 100644
index 0000000..0860eb3
Binary files /dev/null and b/web-app/public/favicons/favicon-144x144.png differ
diff --git a/web-app/public/favicons/favicon-150x150.png b/web-app/public/favicons/favicon-150x150.png
new file mode 100644
index 0000000..4d4fbbe
Binary files /dev/null and b/web-app/public/favicons/favicon-150x150.png differ
diff --git a/web-app/public/favicons/favicon-152x152.png b/web-app/public/favicons/favicon-152x152.png
new file mode 100644
index 0000000..54fe15a
Binary files /dev/null and b/web-app/public/favicons/favicon-152x152.png differ
diff --git a/web-app/public/favicons/favicon-16x16.png b/web-app/public/favicons/favicon-16x16.png
new file mode 100644
index 0000000..56960f8
Binary files /dev/null and b/web-app/public/favicons/favicon-16x16.png differ
diff --git a/web-app/public/favicons/favicon-180x180.png b/web-app/public/favicons/favicon-180x180.png
new file mode 100644
index 0000000..a776c64
Binary files /dev/null and b/web-app/public/favicons/favicon-180x180.png differ
diff --git a/web-app/public/favicons/favicon-192x192.png b/web-app/public/favicons/favicon-192x192.png
new file mode 100644
index 0000000..3d51a9c
Binary files /dev/null and b/web-app/public/favicons/favicon-192x192.png differ
diff --git a/web-app/public/favicons/favicon-310x310.png b/web-app/public/favicons/favicon-310x310.png
new file mode 100644
index 0000000..4e0423d
Binary files /dev/null and b/web-app/public/favicons/favicon-310x310.png differ
diff --git a/web-app/public/favicons/favicon-32x32.png b/web-app/public/favicons/favicon-32x32.png
new file mode 100644
index 0000000..53bfdef
Binary files /dev/null and b/web-app/public/favicons/favicon-32x32.png differ
diff --git a/web-app/public/favicons/favicon-57x57.png b/web-app/public/favicons/favicon-57x57.png
new file mode 100644
index 0000000..bbcc59a
Binary files /dev/null and b/web-app/public/favicons/favicon-57x57.png differ
diff --git a/web-app/public/favicons/favicon-60x60.png b/web-app/public/favicons/favicon-60x60.png
new file mode 100644
index 0000000..baea034
Binary files /dev/null and b/web-app/public/favicons/favicon-60x60.png differ
diff --git a/web-app/public/favicons/favicon-70x70.png b/web-app/public/favicons/favicon-70x70.png
new file mode 100644
index 0000000..1c0a1cd
Binary files /dev/null and b/web-app/public/favicons/favicon-70x70.png differ
diff --git a/web-app/public/favicons/favicon-72x72.png b/web-app/public/favicons/favicon-72x72.png
new file mode 100644
index 0000000..71a024d
Binary files /dev/null and b/web-app/public/favicons/favicon-72x72.png differ
diff --git a/web-app/public/favicons/favicon-76x76.png b/web-app/public/favicons/favicon-76x76.png
new file mode 100644
index 0000000..6c978ea
Binary files /dev/null and b/web-app/public/favicons/favicon-76x76.png differ
diff --git a/web-app/public/favicons/favicon-96x96.png b/web-app/public/favicons/favicon-96x96.png
new file mode 100644
index 0000000..776239a
Binary files /dev/null and b/web-app/public/favicons/favicon-96x96.png differ
diff --git a/web-app/public/favicons/favicon.ico b/web-app/public/favicons/favicon.ico
new file mode 100644
index 0000000..0b35c5b
Binary files /dev/null and b/web-app/public/favicons/favicon.ico differ
diff --git a/web-app/public/logo_rounded.png b/web-app/public/logo_rounded.png
new file mode 100644
index 0000000..9e8403c
Binary files /dev/null and b/web-app/public/logo_rounded.png differ
diff --git a/web-app/public/logo_with_back.png b/web-app/public/logo_with_back.png
new file mode 100644
index 0000000..168945a
Binary files /dev/null and b/web-app/public/logo_with_back.png differ
diff --git a/web-app/src/AppRouter.jsx b/web-app/src/AppRouter.jsx
index 7b6487d..6d85598 100644
--- a/web-app/src/AppRouter.jsx
+++ b/web-app/src/AppRouter.jsx
@@ -1,13 +1,14 @@
import {Routes, Route} from "react-router-dom";
import PrivateRoute from "./components/PrivateRoute.jsx";
+import LoginPage from "./pages/LoginPage.jsx";
const AppRouter = () => (
-
+ }/>
}>
-
+ 1234}/>
)
diff --git a/web-app/src/AuthContext.jsx b/web-app/src/AuthContext.jsx
index c7ea3c7..5a86161 100644
--- a/web-app/src/AuthContext.jsx
+++ b/web-app/src/AuthContext.jsx
@@ -18,9 +18,10 @@ export const AuthProvider = ({children}) => {
try {
const token = await loginUser(loginData);
localStorage.setItem("access_token", token);
- setUser({ token });
+ setUser({token});
} catch (error) {
console.error("Login failed", error);
+ throw error;
}
};
diff --git a/web-app/src/api/LoginRequest.jsx b/web-app/src/api/LoginRequest.jsx
index 15a6bd5..c4993ea 100644
--- a/web-app/src/api/LoginRequest.jsx
+++ b/web-app/src/api/LoginRequest.jsx
@@ -2,12 +2,17 @@ import axios from "axios";
import CONFIG from "../core/Config.jsx";
export const loginUser = async (loginData) => {
+ console.log(loginData)
try {
const response = await axios.post(`${CONFIG.BASE_URL}/login/`, loginData, {
withCredentials: true,
});
return response.data.access_token;
} catch (error) {
- throw new Error("Login failed: " + error.message);
+ if (error.status === 401) {
+ throw new Error("Неверное имя пользователя или пароль")
+ }
+
+ throw new Error(error.message);
}
};
diff --git a/web-app/src/core/Config.jsx b/web-app/src/core/Config.jsx
index 78ec13c..76f01b4 100644
--- a/web-app/src/core/Config.jsx
+++ b/web-app/src/core/Config.jsx
@@ -1,5 +1,5 @@
const CONFIG = {
- BASE_URL: 'http://localhost:8080/api/v1/',
+ BASE_URL: 'http://localhost:8000/api/v1',
};
export default CONFIG;
\ No newline at end of file
diff --git a/web-app/src/pages/LoginPage.jsx b/web-app/src/pages/LoginPage.jsx
new file mode 100644
index 0000000..0b60e27
--- /dev/null
+++ b/web-app/src/pages/LoginPage.jsx
@@ -0,0 +1,69 @@
+import {Form, Input, Button, Row, Col, Typography} from 'antd';
+import {useState} from 'react';
+import {useAuth} from "../AuthContext.jsx";
+
+const {Title} = Typography;
+
+const LoginPage = () => {
+ const {login} = useAuth();
+ const [loading, setLoading] = useState(false);
+ const [error, setError] = useState(null);
+
+ const onFinish = async (values) => {
+ setLoading(true);
+ setError(null);
+
+ try {
+ await login(values);
+ } catch (error) {
+ setError(`Ошибка при входе: ${error.message}`);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ return (
+
+
+
+
Авторизация
+
+ {error &&
{error}
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default LoginPage;