From 699bf958a90c773f3a1efdbc668774b562800b37 Mon Sep 17 00:00:00 2001 From: Andrei Duvakin Date: Tue, 18 Feb 2025 16:37:34 +0500 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B1=D0=B5=D0=B7=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BA=D1=8D=D1=88=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/lenses/LensListCard.jsx | 2 +- .../src/components/lenses/LensViewModal.jsx | 6 +-- web-app/src/pages/LensPage.jsx | 49 +++++++++++++++++-- web-app/src/pages/PatientsPage.jsx | 5 +- 4 files changed, 51 insertions(+), 11 deletions(-) diff --git a/web-app/src/components/lenses/LensListCard.jsx b/web-app/src/components/lenses/LensListCard.jsx index 499c0e9..eef0ab4 100644 --- a/web-app/src/components/lenses/LensListCard.jsx +++ b/web-app/src/components/lenses/LensListCard.jsx @@ -46,7 +46,7 @@ const LensListCard = ({ lens, handleEditLens, handleDeleteLens }) => {

🔬 Тор: {lens.tor} D

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

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

-

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

+

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

{lens.issued &&

✅ Линза выдана

} diff --git a/web-app/src/components/lenses/LensViewModal.jsx b/web-app/src/components/lenses/LensViewModal.jsx index 6a3aad9..5c40833 100644 --- a/web-app/src/components/lenses/LensViewModal.jsx +++ b/web-app/src/components/lenses/LensViewModal.jsx @@ -37,7 +37,7 @@ const LensViewModal = ({visible, onCancel, lens}) => {
- ⚙️ Перефирийная торичность + ⚙️ Периферийная торичность {lens.periphery_toricity} D
@@ -47,7 +47,7 @@ const LensViewModal = ({visible, onCancel, lens}) => {
- ✅ Статус выдачи + {lens.issued ? '✅' : '❌'} Статус выдачи {lens.issued ? 'Выдана' : 'Не выдана'}
@@ -56,7 +56,7 @@ const LensViewModal = ({visible, onCancel, lens}) => {
- ⚖️ Пробная линза (Trial) + 👀 Острота зрения (Trial) {lens.trial.toFixed(2)} D
diff --git a/web-app/src/pages/LensPage.jsx b/web-app/src/pages/LensPage.jsx index 97c9798..14d7b22 100644 --- a/web-app/src/pages/LensPage.jsx +++ b/web-app/src/pages/LensPage.jsx @@ -1,5 +1,5 @@ import {useState, useEffect} from "react"; -import {Input, Select, List, FloatButton, Row, Col, Spin} from "antd"; +import {Input, Select, List, FloatButton, Row, Col, Spin, Checkbox} from "antd"; import {LoadingOutlined, PlusOutlined} from "@ant-design/icons"; import LensCard from "../components/lenses/LensListCard.jsx"; import getAllLenses from "../api/lenses/GetAllLenses.jsx"; @@ -21,12 +21,34 @@ const LensesPage = () => { const [lenses, setLenses] = useState([]); const [loading, setLoading] = useState(true); const [isModalVisible, setIsModalVisible] = useState(false); + const [showIssuedLenses, setShowIssuedLenses] = useState(false); const [selectedLens, setSelectedLens] = useState(null); + useEffect(() => { - fetchLenses(); + fetchLensWithCache(); }, []); + useEffect(() => { + if (!isModalVisible) { + const intervalId = setInterval(fetchLenses, 5000); + return () => clearInterval(intervalId); + } + }, [user, isModalVisible]); + + const fetchLensWithCache = async () => { + const cachedData = localStorage.getItem("lensData"); + const cacheTimestamp = localStorage.getItem("lensTimestamp"); + + if (cachedData && cacheTimestamp && (Date.now() - parseInt(cacheTimestamp)) < 60 * 1000) { + setLenses(JSON.parse(cachedData)); + setLoading(false); + return; + } + + await fetchLenses(); + }; + const fetchLenses = async () => { if (!user || !user.token) return; @@ -43,7 +65,8 @@ const LensesPage = () => { const filteredLenses = lenses.filter((lens) => Object.values(lens).some((value) => value?.toString().toLowerCase().includes(searchText.toLowerCase()) - ) + ) && + (showIssuedLenses || lens.issued === false) ).sort((a, b) => { return sortOrder === "asc" ? a.preset_refraction - b.preset_refraction @@ -88,7 +111,7 @@ const LensesPage = () => { return (
- + { + + { + setShowIssuedLenses(e.target.checked); + }} + > + Показать выданные + + {loading ? ( - }/> +
+ }/> +
) : ( { useEffect(() => { if (!isModalVisible) { - const intervalId = setInterval(fetchPatientsWithCache, 5000); + const intervalId = setInterval(fetchPatients, 5000); return () => clearInterval(intervalId); } }, [user, isModalVisible]); @@ -181,7 +181,8 @@ const PatientsPage = () => { height: "100vh", }}> }/> -
) : ( + + ) : (