From 7764f7f8a671fd43e1e2bdc9fbfde86469fc81ab Mon Sep 17 00:00:00 2001 From: iven Date: Fri, 1 May 2026 18:23:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E6=82=A3=E8=80=85=E8=AF=A6?= =?UTF-8?q?=E6=83=85=20AI=20=E6=A0=87=E7=AD=BE=E9=A1=B5=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=B6=8B=E5=8A=BF=E5=88=86=E6=9E=90+=E4=BD=93=E6=A3=80?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E8=A7=A6=E5=8F=91=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/src/pages/health/PatientDetail.tsx | 35 ++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/apps/web/src/pages/health/PatientDetail.tsx b/apps/web/src/pages/health/PatientDetail.tsx index 5bb31ac..317ba69 100644 --- a/apps/web/src/pages/health/PatientDetail.tsx +++ b/apps/web/src/pages/health/PatientDetail.tsx @@ -1,5 +1,6 @@ import { useEffect, useState, useCallback } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; +import { startAnalysis, type AnalysisType } from '../../api/ai/analysisSse'; import { Card, Descriptions, @@ -44,6 +45,19 @@ export default function PatientDetail() { const navigate = useNavigate(); const [patient, setPatient] = useState(null); const [loading, setLoading] = useState(false); + const [analysisResult, setAnalysisResult] = useState(''); + const [analyzing, setAnalyzing] = useState(false); + + const triggerAnalysis = async (type: AnalysisType) => { + if (!id) return; + setAnalyzing(true); + setAnalysisResult(''); + await startAnalysis(type, { patient_id: id }, { + onChunk: (content) => setAnalysisResult(prev => prev + content), + onError: (msg) => { message.error(msg); setAnalyzing(false); }, + onDone: () => { message.success('分析完成'); setAnalyzing(false); }, + }); + }; const [editModalOpen, setEditModalOpen] = useState(false); const [form] = Form.useForm(); const isDark = useThemeMode(); @@ -313,7 +327,26 @@ export default function PatientDetail() { { key: 'ai', label: 'AI 建议', - children: id ? : null, + children: id ? ( + + + + + + + + + {analysisResult && ( + +
{analysisResult}
+
+ )} +
+ ) : null, }, ]} />