Files
zyt/admin/src/views/tcm/diagnosis/detail.vue
T
2026-03-04 15:32:30 +08:00

166 lines
6.7 KiB
Vue

<template>
<div class="detail-popup">
<popup
ref="popupRef"
title="诊单详情"
width="800px"
:show-confirm="false"
:z-index="1500"
>
<el-descriptions :column="2" border>
<el-descriptions-item label="患者ID">
{{ detail.patient_id }}
</el-descriptions-item>
<el-descriptions-item label="患者姓名">
{{ detail.patient_name }}
</el-descriptions-item>
<el-descriptions-item label="性别">
{{ detail.gender_desc }}
</el-descriptions-item>
<el-descriptions-item label="年龄">
{{ detail.age }}
</el-descriptions-item>
<el-descriptions-item label="诊断日期">
{{ detail.diagnosis_date_text }}
</el-descriptions-item>
<el-descriptions-item label="诊断类型">
{{ detail.diagnosis_type }}
</el-descriptions-item>
<el-descriptions-item label="证型" :span="2">
{{ detail.syndrome_type }}
</el-descriptions-item>
<el-descriptions-item label="既往史" :span="2">
<el-tag
v-for="item in pastHistoryList"
:key="item"
class="mr-2"
type="info"
>
{{ item }}
</el-tag>
<span v-if="!pastHistoryList.length"></span>
</el-descriptions-item>
<!-- 其他病史 -->
<el-descriptions-item label="外伤史">
{{ detail.trauma_history ? '有' : '无' }}
</el-descriptions-item>
<el-descriptions-item label="手术史">
{{ detail.surgery_history ? '有' : '无' }}
</el-descriptions-item>
<el-descriptions-item label="过敏史">
{{ detail.allergy_history ? '有' : '无' }}
</el-descriptions-item>
<el-descriptions-item label="家族病史">
{{ detail.family_history ? '有' : '无' }}
</el-descriptions-item>
<el-descriptions-item label="妊娠哺乳史" :span="2">
{{ detail.pregnancy_history ? '有' : '无' }}
</el-descriptions-item>
<!-- 舌苔照片 -->
<el-descriptions-item label="舌苔照片" :span="2">
<div v-if="detail.tongue_images && detail.tongue_images.length" class="flex gap-2">
<el-image
v-for="(img, index) in detail.tongue_images"
:key="index"
:src="img"
:preview-src-list="detail.tongue_images"
style="width: 100px; height: 100px"
fit="cover"
/>
</div>
<span v-else>暂无</span>
</el-descriptions-item>
<!-- 检查报告 -->
<el-descriptions-item label="检查报告" :span="2">
<div v-if="detail.report_files && detail.report_files.length" class="flex flex-wrap gap-2">
<el-image
v-for="(file, index) in detail.report_files"
:key="index"
:src="file"
:preview-src-list="detail.report_files"
style="width: 100px; height: 100px"
fit="cover"
/>
</div>
<span v-else>暂无</span>
</el-descriptions-item>
<el-descriptions-item label="症状" :span="2">
{{ detail.symptoms || '无' }}
</el-descriptions-item>
<el-descriptions-item label="舌苔">
{{ detail.tongue_coating || '无' }}
</el-descriptions-item>
<el-descriptions-item label="脉象">
{{ detail.pulse || '无' }}
</el-descriptions-item>
<el-descriptions-item label="治则" :span="2">
{{ detail.treatment_principle || '无' }}
</el-descriptions-item>
<el-descriptions-item label="处方" :span="2">
<div style="white-space: pre-wrap">{{ detail.prescription || '无' }}</div>
</el-descriptions-item>
<el-descriptions-item label="医嘱" :span="2">
<div style="white-space: pre-wrap">{{ detail.doctor_advice || '无' }}</div>
</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">
{{ detail.remark || '无' }}
</el-descriptions-item>
<el-descriptions-item label="状态">
<el-tag v-if="detail.status == 1" type="success">启用</el-tag>
<el-tag v-else type="danger">禁用</el-tag>
</el-descriptions-item>
<el-descriptions-item label="创建时间">
{{ detail.create_time }}
</el-descriptions-item>
</el-descriptions>
</popup>
</div>
</template>
<script setup lang="ts">
import { tcmDiagnosisDetail } from '@/api/tcm'
import { getDictData } from '@/api/app'
const popupRef = ref()
const detail = ref<any>({})
// 获取字典选项
const pastHistoryOptions = ref<any[]>([])
const getDictOptions = async () => {
try {
const pastHistory = await getDictData({ type: 'past_history' })
pastHistoryOptions.value = pastHistory?.past_history || []
} catch (error) {
console.error('获取字典数据失败:', error)
}
}
// 既往史显示列表
const pastHistoryList = computed(() => {
if (!detail.value.past_history || !detail.value.past_history.length) {
return []
}
return detail.value.past_history.map((value: string) => {
const option = pastHistoryOptions.value.find((item: any) => item.value === value)
return option ? option.name : value
})
})
const open = async (id: number) => {
popupRef.value.open()
await getDictOptions()
detail.value = await tcmDiagnosisDetail({ id })
}
defineExpose({
open
})
</script>
<style lang="scss" scoped></style>