fix(consultation): 解决会诊流程中的多个功能问题

- 在 deptappthoursManage.js 中添加 status 参数以仅获取已启动的机构
- 为 consultationapplication 组件添加已确认和已签名状态选项
- 扩展操作列宽度并添加打印功能按钮
- 优化 handlePrint 方法以支持行参数和性别枚举转换
- 为 consultationconfirmation 组件添加必填验证和编辑权限控制
- 修复会诊确认医师信息回显逻辑
- 在 inspectionApplication 组件中修复表格行点击事件和检验项目加载
- 禁用非紧急标记的编辑权限以解决Bug #268
- 为 surgeryApplication 组件添加响应码验证和错误处理
- 在 consultation 组件中添加表单验证清除功能
- 为 PackageManagement 组件实现动态机构选项加载
- 重构 PackageSettings 组件的套餐金额显示和只读模式
- 为检查项目设置组件添加套餐筛选和下级类型选择功能
- 实现检验套餐的编辑和查看模式切换功能
This commit is contained in:
2026-03-26 18:22:21 +08:00
parent c509a804ec
commit 91a0b48662
20 changed files with 631 additions and 266 deletions

View File

@@ -33,7 +33,9 @@
max-height="300px"
style="width: 100%; min-width: 100%"
class="inspection-table"
highlight-current-row
@selection-change="handleSelectionChange"
@current-change="handleRowClick"
@cell-click="handleCellClick"
>
<el-table-column type="selection" width="55" align="center" header-align="center" />
@@ -292,16 +294,20 @@
</template>
<el-row type="flex" :gutter="16" wrap>
<el-col :xs="12" :sm="6" :md="6" :lg="6">
<!-- 🔧 Bug #268 修复只有急标记能编辑 -->
<el-checkbox v-model="formData.priorityCode" :true-value="1" :false-value="0"></el-checkbox>
</el-col>
<el-col :xs="12" :sm="6" :md="6" :lg="6">
<el-checkbox v-model="formData.applyStatus" :true-value="1" :false-value="0">收费</el-checkbox>
<!-- 🔧 Bug #268 修复收费标记默认不勾选并不可编辑 -->
<el-checkbox v-model="formData.applyStatus" :true-value="1" :false-value="0" disabled>收费</el-checkbox>
</el-col>
<el-col :xs="12" :sm="6" :md="6" :lg="6">
<el-checkbox v-model="formData.needRefund" :true-value="true" :false-value="false">退费</el-checkbox>
<!-- 🔧 Bug #268 修复退费标记默认不勾选并不可编辑 -->
<el-checkbox v-model="formData.needRefund" :true-value="true" :false-value="false" disabled>退费</el-checkbox>
</el-col>
<el-col :xs="12" :sm="6" :md="6" :lg="6">
<el-checkbox v-model="formData.needExecute" :true-value="true" :false-value="false">执行</el-checkbox>
<!-- 🔧 Bug #268 修复执行标记默认不勾选并不可编辑 -->
<el-checkbox v-model="formData.needExecute" :true-value="true" :false-value="false" disabled>执行</el-checkbox>
</el-col>
</el-row>
</el-card>
@@ -1521,62 +1527,87 @@ function handleDelete(row) {
function handleCellClick(row, column) {
// 点击表格行时,将该申请单的数据加载到表单中
if (row && row.applicationId) {
// 切换到申请单 TAB
leftActiveTab.value = 'application'
// 加载表单数据
Object.assign(formData, {
applicationId: row.applicationId,
applyNo: row.applyNo,
patientName: row.patientName,
medicalrecordNumber: row.medicalrecordNumber,
natureofCost: row.natureofCost || 'self',
applyTime: row.applyTime,
applyDepartment: row.applyDepartment,
applyDocName: row.applyDocName,
executeDepartment: row.executeDepartment || 'medical_lab',
clinicDesc: row.clinicDesc,
contraindication: row.contraindication,
clinicDiag: row.clinicDiag,
medicalHistorySummary: row.medicalHistorySummary,
purposeofInspection: row.purposeofInspection,
physicalExam: row.physicalExam,
applyRemark: row.applyRemark,
priorityCode: row.priorityCode || 0,
applyStatus: row.applyStatus || 1,
needRefund: row.needRefund || false,
needExecute: row.needExecute || false,
inspectionDoctor: row.inspectionDoctor,
inspectionTime: row.inspectionTime,
auditDoctor: row.auditDoctor,
auditTime: row.auditTime,
visitNo: row.visitNo,
applyDocCode: row.applyDocCode,
applyDeptCode: row.applyDeptCode,
specimenName: row.specimenName,
encounterId: row.encounterId,
patientId: row.patientId,
applyOrganizationId: row.applyOrganizationId
})
// 根据检验项目名称解析已选项目
selectedInspectionItems.value = []
if (row.itemName || row.inspectionItem) {
const itemNames = (row.itemName || row.inspectionItem).split('、')
inspectionCategories.value.forEach(category => {
category.items.forEach(item => {
if (itemNames.includes(item.itemName)) {
selectedInspectionItems.value.push({ ...item })
}
})
loadApplicationToForm(row);
}
}
// 🔧 Bug #269 修复:行点击事件处理
function handleRowClick(currentRow, oldRow) {
// 点击表格行时,将该申请单的数据加载到表单中
if (currentRow && currentRow.applicationId) {
loadApplicationToForm(currentRow);
}
}
// 🔧 Bug #269 修复:提取公共方法加载申请单到表单
function loadApplicationToForm(row) {
// 切换到申请单 TAB
leftActiveTab.value = 'application'
// 加载表单数据
Object.assign(formData, {
applicationId: row.applicationId,
applyNo: row.applyNo,
patientName: row.patientName,
medicalrecordNumber: row.medicalrecordNumber,
natureofCost: row.natureofCost || 'self',
applyTime: row.applyTime,
applyDepartment: row.applyDepartment,
applyDocName: row.applyDocName,
executeDepartment: row.executeDepartment || 'medical_lab',
clinicDesc: row.clinicDesc,
contraindication: row.contraindication,
clinicDiag: row.clinicDiag,
medicalHistorySummary: row.medicalHistorySummary,
purposeofInspection: row.purposeofInspection,
physicalExam: row.physicalExam,
applyRemark: row.applyRemark,
priorityCode: row.priorityCode || 0,
applyStatus: row.applyStatus || 0, // 🔧 Bug #268: 默认为 0
needRefund: row.needRefund || false,
needExecute: row.needExecute || false,
inspectionDoctor: row.inspectionDoctor,
inspectionTime: row.inspectionTime,
auditDoctor: row.auditDoctor,
auditTime: row.auditTime,
visitNo: row.visitNo,
applyDocCode: row.applyDocCode,
applyDeptCode: row.applyDeptCode,
specimenName: row.specimenName,
encounterId: row.encounterId,
patientId: row.patientId,
applyOrganizationId: row.applyOrganizationId
})
// 🔧 Bug #269 修复:根据检验项目 ID 加载详细的检验项目数据
selectedInspectionItems.value = []
if (row.labApplyItemList && row.labApplyItemList.length > 0) {
// 如果后端返回了检验项目列表,直接使用
selectedInspectionItems.value = row.labApplyItemList.map(item => ({
...item,
itemId: item.itemId || item.id || Math.random().toString(36).substring(2, 11),
itemName: item.itemName || item.name || '',
itemPrice: item.itemPrice || item.price || 0,
itemAmount: item.itemAmount || item.price || 0,
}))
} else if (row.itemName || row.inspectionItem) {
// 如果只有项目名称,尝试从本地分类中查找匹配项
const itemNames = (row.itemName || row.inspectionItem).split(/[+,]/) // 支持多种分隔符
inspectionCategories.value.forEach(category => {
category.items.forEach(item => {
if (itemNames.includes(item.itemName)) {
selectedInspectionItems.value.push({ ...item })
}
})
}
// 重置验证错误状态
Object.keys(validationErrors).forEach(key => {
validationErrors[key] = false
})
}
// 重置验证错误状态
Object.keys(validationErrors).forEach(key => {
validationErrors[key] = false
})
console.log('已加载申请单到表单:', row.applyNo);
}
// 监听activeTab变化