import React, { useState, useCallback } from 'react'; import { View, Text } from '@tarojs/components'; import Taro, { useReachBottom } from '@tarojs/taro'; import { safeNavigateTo } from '@/utils/navigate'; import { usePageData } from '@/hooks/usePageData'; import { getCachedPatientId } from '@/services/request'; import { listReports, LabReport } from '../../../services/report'; import EmptyState from '../../../components/EmptyState'; import Loading from '../../../components/Loading'; import { useElderClass } from '../../../hooks/useElderClass'; import PageShell from '@/components/ui/PageShell'; import './index.scss'; export default function MyReports() { const modeClass = useElderClass(); const [reports, setReports] = useState([]); const [page, setPage] = useState(1); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(false); const [hasPatient, setHasPatient] = useState(true); const fetchData = useCallback(async (p: number, append = false) => { const patientId = getCachedPatientId(); if (!patientId) { setReports([]); setHasPatient(false); return; } setHasPatient(true); setLoading(true); try { const res = await listReports(patientId, p); const list = res.data || []; setReports(append ? (prev) => [...prev, ...list] : list); setTotal(res.total); setPage(p); } catch (err) { console.warn('[reports] 加载报告列表失败:', err); Taro.showToast({ title: '加载失败', icon: 'none' }); } finally { setLoading(false); } }, []); usePageData(async () => { await fetchData(1); }, { throttleMs: 10000, enablePullDown: true }); useReachBottom(() => { if (!loading && reports.length < total) { fetchData(page + 1, true); } }); const goToDetail = (id: string) => { safeNavigateTo(`/pages/pkg-profile/reports/detail/index?id=${id}`); }; const formatStatus = (report: LabReport) => { const items = report.items; if (!items || !Array.isArray(items)) return 'unknown'; const vals = items as Array<{ is_abnormal?: boolean }>; const hasAbnormal = vals.some((v) => v.is_abnormal); return hasAbnormal ? 'abnormal' : 'normal'; }; const typeInitial = (type: string) => { return type ? type.charAt(0) : '报'; }; return ( 检查报告 {reports.map((r) => { const status = formatStatus(r); return ( goToDetail(r.id)} > {typeInitial(r.report_type)} {r.report_type} {status === 'normal' ? '正常' : status === 'abnormal' ? '异常' : '未知'} {r.report_date} ); })} {reports.length === 0 && !loading && ( )} {loading && ( )} ); }