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 = () => {