diff --git a/openhis-ui-vue3/src/views/outpatient/exam/ExamApply.vue b/openhis-ui-vue3/src/views/outpatient/exam/ExamApply.vue index f238cbc28..5230462fe 100644 --- a/openhis-ui-vue3/src/views/outpatient/exam/ExamApply.vue +++ b/openhis-ui-vue3/src/views/outpatient/exam/ExamApply.vue @@ -72,51 +72,53 @@ import { ref } from 'vue' import { ArrowDown, ArrowUp } from '@element-plus/icons-vue' +// 状态定义 const categoryTreeRef = ref(null) const categoryTree = ref([]) const currentItems = ref([]) const selectedItems = ref([]) -// 清理名称:去除“套餐”字样,避免冗余显示 -const cleanName = (name) => { - if (!name) return '' - return name.replace(/套餐/g, '').trim() -} - -// 切换分类加载项目 +// 分类点击:加载对应项目列表 const handleCategoryClick = (data) => { - // 实际应调用API获取分类下项目,此处为交互逻辑演示 - currentItems.value = data.children || [] + // 实际业务中此处调用 API 获取项目列表 + // currentItems.value = await fetchItemsByCategory(data.id) } -// 修复1:项目勾选与检查方法解耦 +// 修复1 & 3:项目选择逻辑解耦,默认收起明细,方法默认不勾选 const handleItemSelect = (item) => { - item.checked = !item.checked - - if (item.checked) { - const exists = selectedItems.value.find(i => i.id === item.id) - if (!exists) { - // 添加到已选列表,默认收起(expanded: false),方法默认不勾选(checked: false) - selectedItems.value.push({ - ...item, - expanded: false, - methods: (item.methods || []).map(m => ({ ...m, checked: false })) - }) - } + const exists = selectedItems.value.find(i => i.id === item.id) + if (!exists) { + selectedItems.value.push({ + ...item, + checked: true, + expanded: false, // 默认收起 + // 解耦:子方法独立状态,默认不勾选 + methods: (item.methods || []).map(m => ({ ...m, checked: false })) + }) } else { - selectedItems.value = selectedItems.value.filter(i => i.id !== item.id) + exists.checked = !exists.checked + if (!exists.checked) { + selectedItems.value = selectedItems.value.filter(i => i.id !== item.id) + } } } -// 修复1:检查方法独立勾选,不触发父级联动 -const handleMethodCheck = (method) => { - // 仅更新当前方法状态,保持父子级状态独立 -} - -// 修复2/3:展开/收起明细面板 +// 修复3:点击卡片切换明细展开/收起 const toggleExpand = (item) => { item.expanded = !item.expanded } + +// 修复1:方法勾选独立处理,不向上冒泡或联动父级 +const handleMethodCheck = (method) => { + // 仅更新当前方法状态,保持父子解耦 + // 如需同步总价或校验,可在此处扩展独立逻辑 +} + +// 修复2:清理冗余文案,保留核心名称 +const cleanName = (name) => { + if (!name) return '' + return name.replace(/套餐|项目套餐明细/g, '').trim() +}