diff --git a/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/components/PackageSettings.vue b/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/components/PackageSettings.vue index 6b3dcb4e..c21353f8 100644 --- a/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/components/PackageSettings.vue +++ b/openhis-ui-vue3/src/views/maintainSystem/checkprojectSettings/components/PackageSettings.vue @@ -623,19 +623,104 @@ function handleDeleteRow(index) { }).catch(() => {}) } +// 获取拼音首字母 +function getPinYinFirstLetter(str) { + if (!str) return '' + + // 简单的拼音首字母映射表(常用汉字) + const pinyinMap = { + '啊': 'A', '阿': 'A', '癌': 'A', '按': 'A', '暗': 'A', + '八': 'B', '白': 'B', '百': 'B', '班': 'B', '帮': 'B', '保': 'B', '报': 'B', '杯': 'B', '本': 'B', '鼻': 'B', '比': 'B', '变': 'B', '标': 'B', '表': 'B', '病': 'B', '部': 'B', '不': 'B', + '彩': 'C', '超': 'C', '查': 'C', '常': 'C', '肠': 'C', '成': 'C', '穿': 'C', '床': 'C', '次': 'C', + '大': 'D', '带': 'D', '单': 'D', '胆': 'D', '蛋': 'D', '导': 'D', '道': 'D', '的': 'D', '低': 'D', '地': 'D', '电': 'D', '点': 'D', '定': 'D', '动': 'D', '度': 'D', '多': 'D', + '二': 'E', '耳': 'E', + '发': 'F', '法': 'F', '反': 'F', '防': 'F', '房': 'F', '肺': 'F', '分': 'F', '风': 'F', '腹': 'F', '妇': 'F', '复': 'F', + '肝': 'G', '感': 'G', '高': 'G', '骨': 'G', '功': 'G', '宫': 'G', '管': 'G', '光': 'G', '广': 'G', '过': 'G', + '核': 'H', '黑': 'H', '红': 'H', '后': 'H', '化': 'H', '换': 'H', '患': 'H', '黄': 'H', '回': 'H', '会': 'H', + '基': 'J', '及': 'J', '急': 'J', '疾': 'J', '甲': 'J', '检': 'J', '简': 'J', '见': 'J', '降': 'J', '交': 'J', '结': 'J', '介': 'J', '金': 'J', '进': 'J', '经': 'J', '精': 'J', '颈': 'J', '静': 'J', + '开': 'K', '抗': 'K', '康': 'K', '科': 'K', '可': 'K', '口': 'K', + '来': 'L', '类': 'L', '理': 'L', '力': 'L', '例': 'L', '粒': 'L', '连': 'L', '量': 'L', '疗': 'L', '淋': 'L', '临': 'L', '流': 'L', '瘤': 'L', '路': 'L', '卵': 'L', + '慢': 'M', '门': 'M', '免': 'M', '面': 'M', '敏': 'M', '明': 'M', '模': 'M', '目': 'M', + '内': 'N', '脑': 'N', '尿': 'N', '凝': 'N', '女': 'N', + '排': 'P', '培': 'P', '皮': 'P', '片': 'P', '平': 'P', '普': 'P', + '期': 'Q', '其': 'Q', '前': 'Q', '强': 'Q', '切': 'Q', '清': 'Q', '球': 'Q', '全': 'Q', + '染': 'R', '热': 'R', '人': 'R', '容': 'R', '溶': 'R', '肉': 'R', '入': 'R', '乳': 'R', + '三': 'S', '色': 'S', '扫': 'S', '伤': 'S', '上': 'S', '少': 'S', '肾': 'S', '生': 'S', '声': 'S', '时': 'S', '实': 'S', '室': 'S', '试': 'S', '视': 'S', '手': 'S', '术': 'S', '双': 'S', '水': 'S', '速': 'S', '酸': 'S', + '胎': 'T', '糖': 'T', '套': 'T', '特': 'T', '体': 'T', '铁': 'T', '听': 'T', '通': 'T', '痛': 'T', '头': 'T', '图': 'T', + '外': 'W', '胃': 'W', '卫': 'W', '温': 'W', '五': 'W', '无': 'W', + '西': 'X', '洗': 'X', '系': 'X', '细': 'X', '下': 'X', '显': 'X', '线': 'X', '腺': 'X', '相': 'X', '消': 'X', '小': 'X', '心': 'X', '新': 'X', '型': 'X', '性': 'X', '胸': 'X', '血': 'X', + '压': 'Y', '炎': 'Y', '眼': 'Y', '验': 'Y', '腰': 'Y', '药': 'Y', '液': 'Y', '一': 'Y', '医': 'Y', '疫': 'Y', '阴': 'Y', '引': 'Y', '应': 'Y', '影': 'Y', '用': 'Y', '右': 'Y', '于': 'Y', '预': 'Y', '原': 'Y', '月': 'Y', '孕': 'Y', '运': 'Y', + '早': 'Z', '增': 'Z', '诊': 'Z', '正': 'Z', '症': 'Z', '支': 'Z', '脂': 'Z', '指': 'Z', '质': 'Z', '治': 'Z', '中': 'Z', '肿': 'Z', '重': 'Z', '注': 'Z', '主': 'Z', '状': 'Z', '子': 'Z', '自': 'Z', '总': 'Z', '组': 'Z', '左': 'Z', '做': 'Z' + } + + let result = '' + for (let i = 0; i < str.length; i++) { + const char = str[i] + if (pinyinMap[char]) { + result += pinyinMap[char] + } else if (/[a-zA-Z]/.test(char)) { + result += char.toUpperCase() + } else if (/[0-9]/.test(char)) { + result += char + } + } + return result +} + +// 初始化搜索列表 +function initializeSearchList(row) { + if (!row.filteredList) { + row.filteredList = diagnosisTreatmentList.value + } +} + +// 项目搜索处理(支持首字母和模糊搜索) +function handleProjectSearch(query, row) { + console.log('搜索关键字:', query) + + if (!query || query.trim() === '') { + row.filteredList = diagnosisTreatmentList.value + return + } + + const searchText = query.trim().toUpperCase() + + row.filteredList = diagnosisTreatmentList.value.filter(item => { + const name = (item.name || item.itemName || '').toUpperCase() + const code = (item.busNo || item.code || '').toUpperCase() + + // 1. 名称模糊匹配 + if (name.includes(searchText)) { + return true + } + + // 2. 编号模糊匹配 + if (code.includes(searchText)) { + return true + } + + // 3. 拼音首字母匹配 + const pinyin = getPinYinFirstLetter(item.name || item.itemName || '') + if (pinyin.includes(searchText)) { + return true + } + + return false + }) + + console.log(`搜索"${query}"找到 ${row.filteredList.length} 个结果`) +} + // 项目选择处理 function handleItemSelect(row) { console.log('选择项目ID:', row.itemId) - console.log('诊疗项目列表:', diagnosisTreatmentList.value) - const item = diagnosisTreatmentList.value.find(i => i.id === row.itemId) console.log('找到的项目:', item) if (item) { row.itemName = item.name || item.itemName || '' row.code = item.busNo || item.code || item.itemCode || '' - // 获取单价,尝试多个可能的字段名 - row.unitPrice = item.retailPrice || item.unitPrice || item.price || 0 + row.unitPrice = parseFloat(item.retailPrice || item.unitPrice || item.price || 0) console.log('设置单价:', row.unitPrice) calculateAmount(row) } else {