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

@@ -702,6 +702,13 @@ const loadMainDiagnosis = async () => {
// 点击表格行
const handleRowClick = async (row) => {
console.log('点击行,当前 selectedRow:', selectedRow.value, '新 row:', row);
// 先清空表单验证状态
if (formRef.value) {
formRef.value.clearValidate();
}
selectedRow.value = row;
if (row) {
console.log('点击的行数据:', row);
@@ -760,10 +767,19 @@ const handleRowClick = async (row) => {
participatingPhysicians.value = [];
}
}
console.log('行点击处理完成selectedRow:', selectedRow.value);
};
// 新增
const handleNew = () => {
console.log('点击新增按钮');
// 先清空表单验证状态
if (formRef.value) {
formRef.value.clearValidate();
}
selectedRow.value = null;
// 获取当前登录用户信息
@@ -809,6 +825,8 @@ const handleNew = () => {
selectedPhysiciansList.value = [];
participatingPhysicians.value = [];
console.log('新增模式初始化完成selectedRow:', selectedRow.value);
// 加载主诊断
loadMainDiagnosis();
};

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变化

View File

@@ -1048,29 +1048,37 @@ function submitForm() {
if (form.value.id == undefined) {
// 新增手术
addSurgery(form.value).then((res) => {
proxy.$modal.msgSuccess('新增成功')
//保存麻醉方式
seesionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum)
open.value = false
getList()
if (res.code === 200) {
proxy.$modal.msgSuccess('新增成功')
//保存麻醉方式
sessionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum)
open.value = false
getList()
} else {
proxy.$modal.msgError(res.msg || '新增手术失败')
}
}).catch(error => {
console.error('新增手术失败:', error)
proxy.$message.error('新增手术失败,请检查表单信息')
proxy.$modal.msgError('新增手术失败,请稍后重试')
})
} else {
// 修改手术
updateSurgery(form.value).then((res) => {
proxy.$modal.msgSuccess('修改成功')
seesionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum)
open.value = false
getList()
if (res.code === 200) {
proxy.$modal.msgSuccess('修改成功')
sessionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum)
open.value = false
getList()
} else {
proxy.$modal.msgError(res.msg || '修改手术失败')
}
}).catch(error => {
console.error('更新手术失败:', error)
proxy.$message.error('更新手术失败,请检查表单信息')
proxy.$modal.msgError('更新手术失败,请稍后重试')
})
}
} else {
proxy.$message.error('请检查表单信息,标红字段为必填项')
proxy.$modal.msgError('请检查表单信息,标红字段为必填项')
}
})
}