import React, { useState, useEffect } from 'react'; import { View, Text } from '@tarojs/components'; import Taro, { useRouter } from '@tarojs/taro'; import { getReportDetail, LabReport } from '../../../services/report'; import './index.scss'; interface IndicatorItem { name: string; value: number; unit?: string; reference_min?: number; reference_max?: number; status?: string; } export default function ReportDetail() { const router = useRouter(); const id = router.params.id || ''; const patientId = Taro.getStorageSync('current_patient_id') || ''; const [report, setReport] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { if (!id || !patientId) return; setLoading(true); getReportDetail(patientId, id) .then((data) => setReport(data)) .catch(() => Taro.showToast({ title: '加载失败', icon: 'none' })) .finally(() => setLoading(false)); }, [id, patientId]); const indicators: IndicatorItem[] = React.useMemo(() => { if (!report?.indicators || typeof report.indicators !== 'object') return []; return Object.entries(report.indicators).map(([name, val]: [string, any]) => ({ name, value: val.value, unit: val.unit, reference_min: val.reference_min, reference_max: val.reference_max, status: val.status, })); }, [report]); const getStatusInfo = (status?: string) => { if (status === 'high') return { text: '偏高', icon: '', className: 'high' }; if (status === 'low') return { text: '偏低', icon: '', className: 'low' }; return { text: '正常', icon: '', className: 'normal' }; }; if (loading) { return ( 加载中... ); } if (!report) { return ( 报告不存在 ); } return ( {/* 基本信息 */} {report.report_type} 报告日期 {report.report_date} {report.doctor_interpretation && ( 医生解读 {report.doctor_interpretation} )} {/* 指标列表 */} 检查指标 {indicators.map((item) => { const statusInfo = getStatusInfo(item.status); return ( {item.name} {item.value} {item.unit ? ` ${item.unit}` : ''} {item.reference_min != null && item.reference_max != null && ( {item.reference_min}~{item.reference_max} )} {statusInfo.icon} {statusInfo.text} ); })} ); }