From 7def8eb8387cb2e731fca5d225a3f755132cd3bc Mon Sep 17 00:00:00 2001 From: andrei Date: Tue, 4 Mar 2025 23:05:14 +0500 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D0=BC=D0=BE=D1=82=D1=80=20=D0=B2=D1=8B=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B8=20=D0=BB=D0=B8=D0=BD=D0=B7=D1=8B=20=D1=81=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=80=D0=BE=D0=B1=D0=BD=D0=BE=D0=B9=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=86=D0=B8=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lens_issues/LensIssueViewModal.jsx | 107 ++++++++++++++++++ .../src/components/lenses/LensViewModal.jsx | 2 - web-app/src/pages/IssuesPage.jsx | 71 ++++++++---- web-app/src/pages/LensesPage.jsx | 18 ++- web-app/src/pages/PatientsPage.jsx | 17 ++- 5 files changed, 185 insertions(+), 30 deletions(-) create mode 100644 web-app/src/components/lens_issues/LensIssueViewModal.jsx diff --git a/web-app/src/components/lens_issues/LensIssueViewModal.jsx b/web-app/src/components/lens_issues/LensIssueViewModal.jsx new file mode 100644 index 0000000..85f7362 --- /dev/null +++ b/web-app/src/components/lens_issues/LensIssueViewModal.jsx @@ -0,0 +1,107 @@ +import {Collapse, Modal} from "antd"; +import PropTypes from "prop-types"; + + +const LensIssueViewModal = ({visible, onCancel, lensIssue}) => { + let items = []; + + if (lensIssue) { + items = [ + { + key: '1', + label: 'Подробная информация о линзе', + children: +
+

id: {lensIssue.lens.id}

+

Линза: {lensIssue.lens.side}

+

Диаметр: {lensIssue.lens.diameter}

+

Тор: {lensIssue.lens.tor}

+

Пресетная рефракция: {lensIssue.lens.preset_refraction}

+

Периферийная торичность: {lensIssue.lens.periphery_toricity}

+

FVC: {lensIssue.lens.fvc}

+

ESP: {lensIssue.lens.esa}

+
, + }, + { + key: '2', + label: 'Подробная информация о пациенте', + children: +
+

Пациент: {lensIssue.patient.last_name} {lensIssue.patient.first_name}

+

Дата рождения: {new Date(lensIssue.patient.birthday).toLocaleDateString("ru-RU")}

+

Адрес: {lensIssue.patient.address}

+

Email: {lensIssue.patient.email}

+

Телефон: {lensIssue.patient.phone}

+

Диагноз: {lensIssue.patient.diagnosis}

+

Коррекция: {lensIssue.patient.correction}

+
, + }, + { + key: '3', + label: 'Подробная информация о выдавшем сотруднике', + children: +
+

Сотрудник: {lensIssue.doctor.last_name} {lensIssue.doctor.first_name}

+

Логин: {lensIssue.doctor.login}

+
, + } + ] + } + + return ( + + {lensIssue && ( +
+

Дата выдачи: {new Date(lensIssue.issue_date).toLocaleDateString("ru-RU")}

+

Пациент: {lensIssue.patient.last_name} {lensIssue.patient.first_name}

+

Выдал: {lensIssue.doctor.last_name} {lensIssue.doctor.first_name}

+ + +
+ )} +
+ ) +}; + +LensIssueViewModal.propTypes = { + visible: PropTypes.bool, + onCancel: PropTypes.func, + lensIssue: PropTypes.shape({ + issue_date: PropTypes.string, + patient: PropTypes.shape({ + first_name: PropTypes.string, + last_name: PropTypes.string, + patronymic: PropTypes.string, + birthday: PropTypes.string, + address: PropTypes.string, + email: PropTypes.string, + phone: PropTypes.string, + diagnosis: PropTypes.string, + correction: PropTypes.string, + }), + doctor: PropTypes.shape({ + last_name: PropTypes.string, + first_name: PropTypes.string, + login: PropTypes.string, + }), + lens: PropTypes.shape({ + id: PropTypes.number.isRequired, + tor: PropTypes.number.isRequired, + diameter: PropTypes.number.isRequired, + esa: PropTypes.number.isRequired, + fvc: PropTypes.number.isRequired, + preset_refraction: PropTypes.number.isRequired, + periphery_toricity: PropTypes.number.isRequired, + side: PropTypes.string.isRequired, + issued: PropTypes.bool.isRequired, + trial: PropTypes.number.isRequired, + }), + }), +}; + +export default LensIssueViewModal; \ No newline at end of file diff --git a/web-app/src/components/lenses/LensViewModal.jsx b/web-app/src/components/lenses/LensViewModal.jsx index e29d719..394c9c1 100644 --- a/web-app/src/components/lenses/LensViewModal.jsx +++ b/web-app/src/components/lenses/LensViewModal.jsx @@ -4,8 +4,6 @@ import PropTypes from "prop-types"; const {Text, Title} = Typography; const LensViewModal = ({visible, onCancel, lens}) => { - if (!lens) return null; - return ( { const {user} = useAuth(); @@ -39,6 +41,15 @@ const IssuesPage = () => { } }; + const handleAddIssue = () => { + setSelectedIssue(null); + + }; + + const handleCloseViewModal = () => { + setSelectedIssue(null); + }; + const fetchLensIssues = async () => { try { const data = await getAllLensIssues(user.token); @@ -59,10 +70,26 @@ const IssuesPage = () => { setSearchTerm(e.target.value.toLowerCase()); }; - const filteredIssues = lensIssues.filter(issue => - issue.patient.first_name.toLowerCase().includes(searchTerm) || - issue.patient.last_name.toLowerCase().includes(searchTerm) || - new Date(issue.issue_date).toLocaleDateString().includes(searchTerm) + + const filteredIssues = lensIssues.filter(issue => { + let dateFilter = true; + + if (startFilterDate && endFilterDate) { + const issueDate = dayjs(issue.issue_date); + + dateFilter = issueDate.isAfter(startFilterDate) && issueDate.isBefore(endFilterDate); + } + + return ( + ( + issue.patient.last_name.toLowerCase().includes(searchTerm) || + issue.patient.first_name.toLowerCase().includes(searchTerm) || + issue.doctor.last_name.toLowerCase().includes(searchTerm) || + issue.doctor.first_name.toLowerCase().includes(searchTerm) + ) && + dateFilter + ) + } ); const columns = [ @@ -71,7 +98,7 @@ const IssuesPage = () => { dataIndex: "issue_date", key: "issue_date", render: (text) => new Date(text).toLocaleDateString(), - sorter: (a, b) => new Date(a.issue_date) - new Date(b.issue_date), + sorter: (a, b) => new Date(b.issue_date) - new Date(a.issue_date), }, { title: "Пациент", @@ -95,7 +122,7 @@ const IssuesPage = () => { title: "Действия", key: "actions", render: (_, issue) => ( - setSelectedIssue(issue)}>Подробнее + ), }, ]; @@ -178,21 +205,19 @@ const IssuesPage = () => { /> )} - setSelectedIssue(null)} - footer={null} - > - {selectedIssue && ( -
-

Дата выдачи: {new Date(selectedIssue.issue_date).toLocaleDateString()}

-

Пациент: {selectedIssue.patient.last_name} {selectedIssue.patient.first_name}

-

Выдал: {selectedIssue.doctor.last_name} {selectedIssue.doctor.first_name}

-

Линза: {selectedIssue.lens.side}, Диаметр: {selectedIssue.lens.diameter}

-
- )} -
+ } + type={"primary"} + style={{position: "fixed", bottom: 40, right: 40}} + onClick={handleAddIssue} + tooltip={"Добавить выдачу линзы"} + /> + + ); }; diff --git a/web-app/src/pages/LensesPage.jsx b/web-app/src/pages/LensesPage.jsx index 38d10d6..3080039 100644 --- a/web-app/src/pages/LensesPage.jsx +++ b/web-app/src/pages/LensesPage.jsx @@ -52,6 +52,7 @@ const LensesPage = () => { useEffect(() => { fetchLensWithCache(); + fetchViewModeFromCache(); }, []); useEffect(() => { @@ -90,6 +91,18 @@ const LensesPage = () => { } }; + const fetchViewModeFromCache = () => { + const cachedViewMode = localStorage.getItem("viewModeLenses"); + if (cachedViewMode) { + setViewMode(cachedViewMode); + } + }; + + const handleChangeViewMode = (mode) => { + setViewMode(mode); + localStorage.setItem("viewModeLenses", mode); + }; + const filteredLenses = lenses.filter((lens) => { const textMatch = Object.values(lens).some((value) => value?.toString().toLowerCase().includes(searchText.toLowerCase()) @@ -112,7 +125,6 @@ const LensesPage = () => { return a.preset_refraction - b.preset_refraction; }); - const handleAddLens = () => { setSelectedLens(null); setIsModalVisible(true); @@ -332,11 +344,11 @@ const LensesPage = () => { setViewMode(value)} + onChange={handleChangeViewMode} style={{width: "100%"}} >