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",
}}>
}/>
-
) : (
+
+ ) : (