diff --git a/web-app/src/api/auth/LoginRequest.jsx b/web-app/src/api/auth/LoginRequest.jsx index 84409e5..77b1464 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 === 401) { + if (error.status === 403) { throw new Error("Неверное имя пользователя или пароль") } diff --git a/web-app/src/api/lens_types/GetAllLensTypes.jsx b/web-app/src/api/lens_types/GetAllLensTypes.jsx index 9fefd97..e992e9b 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 === 401) { + if (error.response?.status === 403) { 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 94d8fec..29e6635 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 === 401) { + if (error.response?.status === 403) { 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 f1c5e1d..9f10bf7 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 === 401) { + if (error.response?.status === 403) { 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 c5485fc..e6b2296 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 === 401) { + if (error.response?.status === 403) { 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 4e0acdb..ddf7cc7 100644 --- a/web-app/src/api/lenses/UpdateLens.jsx +++ b/web-app/src/api/lenses/UpdateLens.jsx @@ -12,7 +12,7 @@ const updateLens = async (token, lensId, lensData) => { }); return response.data; } catch (error) { - if (error.response?.status === 401) { + if (error.response?.status === 403) { 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 3b47afd..d194460 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 === 401) { + if (error.response?.status === 403) { 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 c2ddbff..34486db 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 === 401) { + if (error.response?.status === 403) { 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 3f05354..bc3be60 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 === 401) { + if (error.response?.status === 403) { 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 bd9003b..8e83a10 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 === 401) { + if (error.response?.status === 403) { 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 43fe181..1ee3677 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 === 401) { + if (error.response?.status === 403) { 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 f35a131..52333bb 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 === 401) { + if (error.response?.status === 403) { 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 56bbd20..27eceed 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 === 401) { + if (error.response?.status === 403) { 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 6de2d70..e61b241 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 === 401) { + if (error.response?.status === 403) { 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 new file mode 100644 index 0000000..f38dff3 --- /dev/null +++ b/web-app/src/api/sets/AppendLensesFromSet.jsx @@ -0,0 +1,22 @@ +import axios from "axios"; +import CONFIG from "../../core/Config.jsx"; + + +const appendLensesFromSet = async (token, set_id) => { + try { + const response = await axios.post(`${CONFIG.BASE_URL}/sets/append_lenses/${set_id}/`, {}, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + return response.data; + } catch (error) { + if (error.response?.status === 403) { + throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); + } else { + throw new Error(error.message); + } + } +}; + +export default appendLensesFromSet; \ No newline at end of file diff --git a/web-app/src/api/sets/DeleteSet.jsx b/web-app/src/api/sets/DeleteSet.jsx index 666ce50..4bd3806 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 === 401) { + if (error.response?.status === 403) { 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 fd52012..9d99819 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 === 401) { + if (error.response?.status === 403) { 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 d005b6c..03db240 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 === 401) { + if (error.response?.status === 403) { throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); } throw new Error(error.message); diff --git a/web-app/src/components/sets/SetFormModal.jsx b/web-app/src/components/sets/SetFormModal.jsx index c5eef8d..07bc8d4 100644 --- a/web-app/src/components/sets/SetFormModal.jsx +++ b/web-app/src/components/sets/SetFormModal.jsx @@ -71,7 +71,7 @@ const SetFormModal = ({visible, onCancel, setData, onSubmit}) => { periphery_toricity: 0, side: "левая", count: 1, - type_id: null + type_id: lensTypes ? lensTypes[0].id : null }]); }; diff --git a/web-app/src/components/sets/SetListCard.jsx b/web-app/src/components/sets/SetListCard.jsx index 1dde47f..cb014ab 100644 --- a/web-app/src/components/sets/SetListCard.jsx +++ b/web-app/src/components/sets/SetListCard.jsx @@ -2,7 +2,7 @@ import PropTypes from "prop-types"; import {Card, Modal, Tooltip} from "antd"; import {DeleteOutlined, EditOutlined, PlusOutlined} from "@ant-design/icons"; -const SetListCard = ({set, handleEditSet, handleAddSet, handleDeleteSet}) => { +const SetListCard = ({set, handleEditSet, handleDeleteSet, handleAppendSet}) => { const confirmSetDelete = () => { Modal.confirm({ @@ -14,10 +14,20 @@ const SetListCard = ({set, handleEditSet, handleAddSet, handleDeleteSet}) => { }); }; + const confirmAppendSet = () => { + Modal.confirm({ + title: "Добавление набора", + content: `Вы уверены, что хотите добавить набор ${set.title} в общий список линз?`, + okText: "Да, добавить", + cancelText: "Отмена", + onOk: () => handleAppendSet(set), + }); + }; + const actions = [ - + , @@ -54,7 +64,7 @@ SetListCard.propTypes = { title: PropTypes.string.isRequired, }).isRequired, handleEditSet: PropTypes.func.isRequired, - handleAddSet: PropTypes.func.isRequired, + handleAppendSet: PropTypes.func.isRequired, handleDeleteSet: PropTypes.func.isRequired, }; diff --git a/web-app/src/pages/SetLensesPage.jsx b/web-app/src/pages/SetLensesPage.jsx index 03f468d..7a01e25 100644 --- a/web-app/src/pages/SetLensesPage.jsx +++ b/web-app/src/pages/SetLensesPage.jsx @@ -1,6 +1,6 @@ import {useAuth} from "../AuthContext.jsx"; import {useEffect, useState} from "react"; -import {Col, FloatButton, Input, List, notification, Row, Select, Spin, Tooltip} from "antd"; +import {FloatButton, Input, List, notification, Row, Spin} from "antd"; import getAllSets from "../api/sets/GetAllSets.jsx"; import {LoadingOutlined, PlusOutlined} from "@ant-design/icons"; import SetListCard from "../components/sets/SetListCard.jsx"; @@ -10,6 +10,7 @@ import addSet from "../api/sets/AddSet.jsx"; import deleteSet from "../api/sets/DeleteSet.jsx"; import addSetContent from "../api/set_content/AddSetContent.jsx"; import updateSetContent from "../api/set_content/UpdateSetContent.jsx"; +import appendLensesFromSet from "../api/sets/AppendLensesFromSet.jsx"; const SetLensesPage = () => { @@ -105,6 +106,24 @@ const SetLensesPage = () => { setIsModalVisible(false); }; + const handleAppendSet = async (set) => { + try { + await appendLensesFromSet(user.token, set.id); + notification.success({ + message: "Линзы добавлены", + description: "Линзы успешно добавлены.", + placement: "topRight", + }); + } catch (error) { + console.error("Ошибка добавления линз:", error); + notification.error({ + message: "Ошибка добавления линз", + description: "Проверьте подключение к сети.", + placement: "topRight", + }); + } + }; + const handleModalSetSubmit = async (set, content = []) => { try { let refreshed_set; @@ -217,8 +236,8 @@ const SetLensesPage = () => { )}