diff --git a/web-app/src/AppRouter.jsx b/web-app/src/AppRouter.jsx index 61d4beb..c9ab41f 100644 --- a/web-app/src/AppRouter.jsx +++ b/web-app/src/AppRouter.jsx @@ -6,6 +6,7 @@ import PatientsPage from "./pages/PatientsPage.jsx"; import HomePage from "./pages/HomePage.jsx"; import LensesLayout from "./layouts/LensesLayout.jsx"; import IssuesPage from "./pages/IssuesPage.jsx"; +import AppointmentsPage from "./pages/AppointmentsPage.jsx"; const AppRouter = () => ( @@ -17,6 +18,7 @@ const AppRouter = () => ( }/> }/> }/> + }/> }/> diff --git a/web-app/src/api/auth/LoginRequest.jsx b/web-app/src/api/auth/LoginRequest.jsx index 77b1464..19f88fa 100644 --- a/web-app/src/api/auth/LoginRequest.jsx +++ b/web-app/src/api/auth/LoginRequest.jsx @@ -8,7 +8,7 @@ const loginUser = async (loginData) => { }); return response.data.access_token; } catch (error) { - if (error.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Неверное имя пользователя или пароль") } diff --git a/web-app/src/api/lens_issues/AddLensIssue.jsx b/web-app/src/api/lens_issues/AddLensIssue.jsx index eb318f0..4517eea 100644 --- a/web-app/src/api/lens_issues/AddLensIssue.jsx +++ b/web-app/src/api/lens_issues/AddLensIssue.jsx @@ -11,7 +11,7 @@ const AddLensIssue = async (token, lens_issue) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь неайден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/lens_issues/GetAllLensIssues.jsx b/web-app/src/api/lens_issues/GetAllLensIssues.jsx index 28671f8..ea08802 100644 --- a/web-app/src/api/lens_issues/GetAllLensIssues.jsx +++ b/web-app/src/api/lens_issues/GetAllLensIssues.jsx @@ -11,7 +11,7 @@ const GetAllLensIssues = async (token) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/lens_types/GetAllLensTypes.jsx b/web-app/src/api/lens_types/GetAllLensTypes.jsx index e992e9b..289a27d 100644 --- a/web-app/src/api/lens_types/GetAllLensTypes.jsx +++ b/web-app/src/api/lens_types/GetAllLensTypes.jsx @@ -11,7 +11,7 @@ const getAllLensTypes = async (token) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/lenses/AddLens.jsx b/web-app/src/api/lenses/AddLens.jsx index 29e6635..f9cf3c5 100644 --- a/web-app/src/api/lenses/AddLens.jsx +++ b/web-app/src/api/lenses/AddLens.jsx @@ -11,7 +11,7 @@ const addLens = async (token, lens) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/lenses/DeleteLens.jsx b/web-app/src/api/lenses/DeleteLens.jsx index 9f10bf7..b33b2e6 100644 --- a/web-app/src/api/lenses/DeleteLens.jsx +++ b/web-app/src/api/lenses/DeleteLens.jsx @@ -11,7 +11,7 @@ const deleteLens = async (token, lens_id) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/lenses/GetAllLenses.jsx b/web-app/src/api/lenses/GetAllLenses.jsx index e6b2296..6421132 100644 --- a/web-app/src/api/lenses/GetAllLenses.jsx +++ b/web-app/src/api/lenses/GetAllLenses.jsx @@ -10,7 +10,7 @@ const getAllLenses = async (token) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw Error("Ошибка авторизации: пользователь неяден или токен недействителен"); } throw Error(error.message); diff --git a/web-app/src/api/lenses/GetNotIssuedLenses.jsx b/web-app/src/api/lenses/GetNotIssuedLenses.jsx index 2f67da2..1ff5835 100644 --- a/web-app/src/api/lenses/GetNotIssuedLenses.jsx +++ b/web-app/src/api/lenses/GetNotIssuedLenses.jsx @@ -10,7 +10,7 @@ const getNotIssuedLenses = async (token) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw Error("Ошибка авторизации: пользователь неяден или токен недействителен"); } throw Error(error.message); diff --git a/web-app/src/api/lenses/UpdateLens.jsx b/web-app/src/api/lenses/UpdateLens.jsx index 2980ee6..ad44ec2 100644 --- a/web-app/src/api/lenses/UpdateLens.jsx +++ b/web-app/src/api/lenses/UpdateLens.jsx @@ -11,7 +11,7 @@ const updateLens = async (token, lensId, lensData) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/patients/AddPatient.jsx b/web-app/src/api/patients/AddPatient.jsx index d194460..ac84f39 100644 --- a/web-app/src/api/patients/AddPatient.jsx +++ b/web-app/src/api/patients/AddPatient.jsx @@ -11,7 +11,7 @@ const addPatient = async (token, patient) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/patients/DeletePatient.jsx b/web-app/src/api/patients/DeletePatient.jsx index 34486db..b27db48 100644 --- a/web-app/src/api/patients/DeletePatient.jsx +++ b/web-app/src/api/patients/DeletePatient.jsx @@ -11,7 +11,7 @@ const deletePatient = async (token, patient_id) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/patients/GetAllPatients.jsx b/web-app/src/api/patients/GetAllPatients.jsx index bc3be60..07df8d4 100644 --- a/web-app/src/api/patients/GetAllPatients.jsx +++ b/web-app/src/api/patients/GetAllPatients.jsx @@ -11,7 +11,7 @@ const getAllPatients = async (token) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/patients/UpdatePatient.jsx b/web-app/src/api/patients/UpdatePatient.jsx index 8e83a10..c344c48 100644 --- a/web-app/src/api/patients/UpdatePatient.jsx +++ b/web-app/src/api/patients/UpdatePatient.jsx @@ -11,7 +11,7 @@ const updatePatient = async (token, patientId, patientData) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/set_content/AddSetContent.jsx b/web-app/src/api/set_content/AddSetContent.jsx index 1ee3677..4120cca 100644 --- a/web-app/src/api/set_content/AddSetContent.jsx +++ b/web-app/src/api/set_content/AddSetContent.jsx @@ -11,7 +11,7 @@ const addSetContent = async (token, set_content, set_id) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/set_content/GetSetContentBySetId.jsx b/web-app/src/api/set_content/GetSetContentBySetId.jsx index 52333bb..9640287 100644 --- a/web-app/src/api/set_content/GetSetContentBySetId.jsx +++ b/web-app/src/api/set_content/GetSetContentBySetId.jsx @@ -11,7 +11,7 @@ const getSetContentBySetId = async (token, set_id) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/set_content/UpdateSetContent.jsx b/web-app/src/api/set_content/UpdateSetContent.jsx index 27eceed..08b5dec 100644 --- a/web-app/src/api/set_content/UpdateSetContent.jsx +++ b/web-app/src/api/set_content/UpdateSetContent.jsx @@ -11,7 +11,7 @@ const updateSetContent = async (token, set_content, set_id) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/sets/AddSet.jsx b/web-app/src/api/sets/AddSet.jsx index e61b241..900bb75 100644 --- a/web-app/src/api/sets/AddSet.jsx +++ b/web-app/src/api/sets/AddSet.jsx @@ -11,7 +11,7 @@ const addSet = async (token, set) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/sets/AppendLensesFromSet.jsx b/web-app/src/api/sets/AppendLensesFromSet.jsx index f38dff3..13112cc 100644 --- a/web-app/src/api/sets/AppendLensesFromSet.jsx +++ b/web-app/src/api/sets/AppendLensesFromSet.jsx @@ -11,11 +11,10 @@ const appendLensesFromSet = async (token, set_id) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } else { - throw new Error(error.message); } + throw new Error(error.message); } }; diff --git a/web-app/src/api/sets/DeleteSet.jsx b/web-app/src/api/sets/DeleteSet.jsx index 4bd3806..acc5664 100644 --- a/web-app/src/api/sets/DeleteSet.jsx +++ b/web-app/src/api/sets/DeleteSet.jsx @@ -10,7 +10,7 @@ const deleteSet = async (token, set_id) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/sets/GetAllSets.jsx b/web-app/src/api/sets/GetAllSets.jsx index 9d99819..b22182e 100644 --- a/web-app/src/api/sets/GetAllSets.jsx +++ b/web-app/src/api/sets/GetAllSets.jsx @@ -10,7 +10,7 @@ const getAllSets = async (token) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/api/sets/UpdateSet.jsx b/web-app/src/api/sets/UpdateSet.jsx index 03db240..68e2cf4 100644 --- a/web-app/src/api/sets/UpdateSet.jsx +++ b/web-app/src/api/sets/UpdateSet.jsx @@ -11,7 +11,7 @@ const updateSet = async (token, set_id, set) => { }); return response.data; } catch (error) { - if (error.response?.status === 403) { + if (error.status === 403 || error.status === 401) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/layouts/MainLayout.jsx b/web-app/src/layouts/MainLayout.jsx index 2c5d39b..d3e09c9 100644 --- a/web-app/src/layouts/MainLayout.jsx +++ b/web-app/src/layouts/MainLayout.jsx @@ -1,5 +1,5 @@ import {useState} from "react"; -import {Layout, Menu} from "antd"; +import {Grid, Layout, Menu} from "antd"; import {Outlet, useLocation, useNavigate} from "react-router-dom"; import { HomeOutlined, @@ -16,8 +16,11 @@ import {useAuth} from "../AuthContext.jsx"; const {Content, Footer, Sider} = Layout; const getItem = (label, key, icon, children) => ({key, icon, children, label}); +const {useBreakpoint} = Grid; const MainLayout = () => { + const screens = useBreakpoint(); + const [collapsed, setCollapsed] = useState(true); const navigate = useNavigate(); const location = useLocation(); @@ -47,7 +50,12 @@ const MainLayout = () => { return ( - +
{ /> - - + +
Линза+ © {new Date().getFullYear()}
diff --git a/web-app/src/pages/AppointmentsPage.jsx b/web-app/src/pages/AppointmentsPage.jsx new file mode 100644 index 0000000..65ddf0c --- /dev/null +++ b/web-app/src/pages/AppointmentsPage.jsx @@ -0,0 +1,11 @@ + + + +const AppointmentsPage = () => { + return ( + <> + + ) +}; + +export default AppointmentsPage; \ No newline at end of file diff --git a/web-app/src/pages/IssuesPage.jsx b/web-app/src/pages/IssuesPage.jsx index d051c32..9c5e3ae 100644 --- a/web-app/src/pages/IssuesPage.jsx +++ b/web-app/src/pages/IssuesPage.jsx @@ -283,7 +283,7 @@ const IssuesPage = () => { { title="Фильтр по дате выдачи линзы" > { }, []); useEffect(() => { - if (!isModalVisible) { + if (!isModalVisible && !selectedLens) { const intervalId = setInterval(fetchLenses, 5000); return () => clearInterval(intervalId); } - }, [user, isModalVisible]); + }, [user, isModalVisible, selectedLens]); const fetchLensWithCache = async () => { const cachedData = localStorage.getItem("lensData"); @@ -107,7 +107,6 @@ const LensesPage = () => { } }; - const fetchViewModeFromCache = () => { const cachedViewMode = localStorage.getItem("viewModeLenses"); if (cachedViewMode) { @@ -351,7 +350,7 @@ const LensesPage = () => {
<FolderViewOutlined/> Линзы - + { allowClear /> - + - + { }, []); useEffect(() => { - if (!isModalVisible) { + if (!isModalVisible && !selectedPatient) { const intervalId = setInterval(fetchPatients, 5000); return () => clearInterval(intervalId); } - }, [user, isModalVisible]); + }, [user, isModalVisible, selectedPatient]); const fetchPatientsWithCache = async () => { const cachedData = localStorage.getItem("patientsData"); @@ -359,7 +359,7 @@ const PatientsPage = () => { } xl={ viewMode === "tile" ? 3 : 5 } xxl={ - viewMode === "tile" ? 3 : 4 + viewMode === "tile" ? 3 : 5 }>