Fix Bug #573: AI修复

This commit is contained in:
2026-05-26 22:27:21 +08:00
parent 13547b994e
commit ac320aa999
2 changed files with 224 additions and 40 deletions

View File

@@ -0,0 +1,135 @@
<template>
<div class="diagnosis-manage-container">
<el-card class="box-card">
<template #header>
<div class="card-header">
<span>门诊诊断录入</span>
<el-button type="primary" @click="handleSave" :loading="saveLoading">保存诊断</el-button>
</div>
</template>
<el-form :model="diagnosisForm" label-width="80px">
<el-form-item label="诊断搜索">
<el-autocomplete
v-model="diagnosisForm.searchText"
:fetch-suggestions="queryDisease"
placeholder="请输入疾病名称或拼音码"
@select="handleSelectDisease"
class="diagnosis-search"
/>
</el-form-item>
<el-table :data="diagnosisForm.list" border style="width: 100%" class="diagnosis-table">
<el-table-column prop="diseaseName" label="疾病名称" />
<el-table-column prop="icdCode" label="ICD编码" width="120" />
<el-table-column label="状态" width="100">
<template #default="{ row }">
<el-tag :type="row.isValid ? 'success' : 'info'">
{{ row.isValid ? '有效' : '无效' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button link type="primary" @click="toggleValid(row)">
{{ row.isValid ? '设为无效' : '设为有效' }}
</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
<!-- 传染病报卡弹窗 -->
<ReportCardDialog
v-model="reportCardVisible"
:diagnosis-data="currentReportDiagnosis"
@success="handleReportSuccess"
/>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import { ElMessage } from 'element-plus'
import { saveDiagnosisApi, queryDiseaseApi } from '@/api/outpatient/diagnosis'
import ReportCardDialog from './components/ReportCardDialog.vue'
const saveLoading = ref(false)
const reportCardVisible = ref(false)
const currentReportDiagnosis = ref(null)
const diagnosisForm = reactive({
searchText: '',
list: []
})
const queryDisease = async (queryString, cb) => {
if (!queryString) return cb([])
const res = await queryDiseaseApi({ keyword: queryString })
cb(res.data || [])
}
const handleSelectDisease = (item) => {
const exists = diagnosisForm.list.some(d => d.id === item.id)
if (!exists) {
diagnosisForm.list.push({
...item,
isValid: true,
reportCardType: item.reportCardType || null,
isReported: item.isReported || false
})
}
}
const toggleValid = (row) => {
row.isValid = !row.isValid
}
// Bug #573 修复核心逻辑
const handleSave = async () => {
if (diagnosisForm.list.length === 0) {
ElMessage.warning('请至少录入一条诊断')
return
}
saveLoading.value = true
try {
const res = await saveDiagnosisApi(diagnosisForm.list)
if (res.code === 200) {
ElMessage.success('诊断已保存并按排序号排序')
// 修复:保存成功后校验报卡类型,自动触发弹窗
const savedList = res.data || []
const needReportDiagnosis = savedList.find(d =>
d.reportCardType && !d.isReported
)
if (needReportDiagnosis) {
currentReportDiagnosis.value = needReportDiagnosis
reportCardVisible.value = true
}
}
} catch (error) {
ElMessage.error('诊断保存失败')
} finally {
saveLoading.value = false
}
}
const handleReportSuccess = () => {
ElMessage.success('报卡登记成功')
reportCardVisible.value = false
// 刷新诊断列表状态或标记已上报
if (currentReportDiagnosis.value) {
const target = diagnosisForm.list.find(d => d.id === currentReportDiagnosis.value.id)
if (target) target.isReported = true
}
}
</script>
<style scoped>
.diagnosis-manage-container { padding: 20px; }
.card-header { display: flex; justify-content: space-between; align-items: center; }
.diagnosis-search { width: 100%; }
</style>