Files
vueapp/api/diagnosis.ts
T
2026-06-09 17:00:23 +08:00

60 lines
1.8 KiB
TypeScript

import type { ClinicalCase } from './cases'
import { FASTAPI_BASE_URL, authHeaders, readError, type ApiEnvelope } from './session'
export type DiagnosisDraft = {
primaryDiagnosis: string
differentialDiagnosis: string[]
evidence: string
}
export type DiagnosisPayload = {
primary_diagnosis: string
differential_diagnoses: string[]
diagnosis_basis: string
}
export type DiagnosisContext = {
mentorAdvice: string
defaultDraft: DiagnosisDraft
}
export function fetchDiagnosisContext(caseItem?: ClinicalCase | null): Promise<DiagnosisContext> {
const isChestPain = caseItem?.title.includes('胸痛') || caseItem?.department === '心血管内科'
return Promise.resolve({
mentorAdvice: isChestPain
? '王主任建议:请结合患者既往高血压史及突发性胸痛的性质,进行准确诊断。注意鉴别心梗与主动脉夹层。'
: '王主任建议:请基于主诉、阳性症状和危险信号提出主要诊断,并列出需要排除的鉴别诊断。',
defaultDraft: {
primaryDiagnosis: '',
differentialDiagnosis: ['', ''],
evidence: ''
}
})
}
export async function submitDiagnosis(sessionId: number, draft: DiagnosisDraft) {
const payload: DiagnosisPayload = {
primary_diagnosis: draft.primaryDiagnosis.trim(),
differential_diagnoses: draft.differentialDiagnosis.map(item => item.trim()).filter(Boolean),
diagnosis_basis: draft.evidence.trim()
}
const response = await fetch(`${FASTAPI_BASE_URL}/sessions/${sessionId}/diagnosis`, {
method: 'POST',
headers: authHeaders(),
body: JSON.stringify(payload)
})
if (!response.ok) {
throw new Error(await readError(response))
}
const result = (await response.json()) as ApiEnvelope<unknown>
if (result.code !== 'OK') {
throw new Error(result.message || '诊断提交失败')
}
return result.data || payload
}