diff --git a/src/App.jsx b/src/App.jsx index 6e32783..9b1b245 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -60,6 +60,7 @@ const SCREEN_OPTIONS = [ { id: 'appt:a1', lb: 'Детали приёма' }, { id: 'results', lb: 'Результаты' }, { id: 'result-audio', lb: 'Аудиограмма' }, + { id: 'result:r2', lb: 'Эндоскопия носоглотки' }, { id: 'recovery', lb: 'Восстановление' }, { id: 'audiotest', lb: 'Тест слуха' }, { id: 'chat', lb: 'Чат' }, diff --git a/src/PhoneApp.jsx b/src/PhoneApp.jsx index 26d418e..2c7495f 100644 --- a/src/PhoneApp.jsx +++ b/src/PhoneApp.jsx @@ -8,7 +8,7 @@ import { } from './screens/screens-booking.jsx'; import { ApptsTabScreen, ApptDetailScreen, - ResultsScreen, ResultAudioScreen, + ResultsScreen, ResultAudioScreen, ResultEndoscopyScreen, RecoveryScreen, AudioTestScreen, ChatTabScreen, ProfileTabScreen, QRScreen, TelemedScreen, MedcardScreen, NotificationsScreen, @@ -31,6 +31,7 @@ function renderScreen(screenId, nav, ctx) { case 'appt': return ; case 'results': return ; case 'result-audio': return ; + case 'result': return ; case 'recovery': return ; case 'audiotest': return ; case 'chat': return ; diff --git a/src/screens/screens-misc.jsx b/src/screens/screens-misc.jsx index 702f06a..042a50a 100644 --- a/src/screens/screens-misc.jsx +++ b/src/screens/screens-misc.jsx @@ -115,6 +115,182 @@ export function ApptDetailScreen({ nav, apptId }) { ); } +function EndoscopyTile({ label, time, seed = 0, big = false }) { + const variants = [ + 'radial-gradient(circle at 45% 40%, #FCE1DD 0%, #E9A29B 35%, #B36962 65%, #5A2624 100%)', + 'radial-gradient(circle at 55% 50%, #FBD5D0 0%, #DC8981 40%, #9B4640 75%, #3F1B19 100%)', + 'radial-gradient(circle at 40% 35%, #FFE4DE 0%, #E7988F 40%, #A55651 70%, #4A1E1B 100%)', + 'radial-gradient(circle at 50% 55%, #FCDAD4 0%, #E5968C 35%, #A8544E 75%, #442220 100%)', + ]; + const insetPad = big ? 14 : 8; + return ( +
+
+
+ {/* subtle highlight spot (specular) */} +
+
+ {label} + {time} +
+
+ ); +} + +export function ResultEndoscopyScreen({ nav, resultId = 'r2' }) { + const r = CLINIC_DATA.results.find(x => x.id === resultId) || CLINIC_DATA.results.find(x => x.kind === 'image'); + const doctor = CLINIC_DATA.doctors.find(d => d.id === r.doctor); + const [selected, setSelected] = useState(null); + + const images = [ + { label: 'Носоглотка', time: '10:32' }, + { label: 'Аденоиды', time: '10:33' }, + { label: 'Хоана лев.', time: '10:34' }, + { label: 'Хоана прав.', time: '10:35' }, + ]; + const diagnoses = ['Гипертрофия аденоидов III ст.']; + const conclusion = 'Слизистая носоглотки умеренно гиперемирована, отёчна. Глоточная миндалина (аденоиды) III степени, заполняет просвет хоан на 2/3 с обеих сторон. Отделяемое слизистое. Устья слуховых труб обозримы, без особенностей.'; + const recommendations = [ + 'Консультация ЛОР-хирурга в течение 2 недель', + 'Курс промываний «Кукушка» (5 процедур)', + 'Контрольная эндоскопия через 1 месяц', + 'Обсудить показания к аденотомии', + ]; + + return ( +
+ nav.pop()} rightIcon={I.doc} /> + +
+
+ +
+
Исследование провёл
+
{doctor.name.split(' ').slice(0,2).join(' ')}
+
+ Готово +
+ +
+ {images.map((img, i) => ( + + ))} +
+ +
+
Диагноз
+
+ {diagnoses.map(d => {d})} +
+
+ +
+
Заключение
+

{conclusion}

+
+ +
+
Рекомендации
+ {recommendations.map((rec, i, a) => ( +
+
+
{i + 1}
+
{rec}
+
+ {i < a.length - 1 &&
} +
+ ))} +
+ +
+ +
+ + +
+
+
+ + {selected !== null && ( +
setSelected(null)} + style={{ + position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.95)', zIndex: 200, + display: 'flex', flexDirection: 'column', + }} + > +
+ +
{images[selected].label}
+ +
+
e.stopPropagation()} + style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: '0 20px' }} + > +
+ +
+
+
+ {images.map((_, i) => ( +
+
+ )} +
+ ); +} + export function ResultsScreen({ nav }) { const { results, doctors } = CLINIC_DATA; return (