修复122 门诊医生站-》医嘱TAB:点击选中项目后查询框自动关闭

This commit is contained in:
HuangShun
2026-01-27 10:56:25 +08:00
parent 497af01f9b
commit 4de4d9099e

View File

@@ -1432,6 +1432,14 @@ function handleSkinTestChange(row, index) {
row.skinTestFlag_enumText = row.skinTestFlag == 1 ? '是' : '否'; row.skinTestFlag_enumText = row.skinTestFlag == 1 ? '是' : '否';
} }
/**
* 选择药品回调
*/
/**
* 延迟函数
*/
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
/** /**
* 选择药品回调 * 选择药品回调
*/ */
@@ -1457,30 +1465,72 @@ function selectAdviceBase(key, row) {
setNewRow(key, row); setNewRow(key, row);
} }
function setNewRow(key, row) { async function setNewRow(key, row) {
// 每次选择药品时,将当前行数据完全重置,清空所有旧数据 // 每次选择药品时,将当前行数据完全重置,清空所有旧数据
const preservedData = { const preservedData = {
uniqueKey: prescriptionList.value[rowIndex.value].uniqueKey, uniqueKey: prescriptionList.value[rowIndex.value].uniqueKey,
isEdit: true, isEdit: true,
statusEnum: 1, statusEnum: 1,
showPopover: false, // 确保popover关闭
}; };
// 完全替换整个对象,只保留必要的初始字段 // 完全替换整个对象,只保留必要的初始字段
prescriptionList.value[rowIndex.value] = preservedData; prescriptionList.value[rowIndex.value] = preservedData;
setValue(row); setValue(row);
// 确保在setValue之后再次设置showPopover为false防止被覆盖
prescriptionList.value[rowIndex.value].showPopover = false;
expandOrder.value = [key]; expandOrder.value = [key];
nextTick(() => {
if (row.adviceType == 1) { // 自动聚焦到单次用量字段 - 使用 async/await 多次尝试
if (row.injectFlag == 1) { await nextTick();
inputRefs.value['executeNum']?.focus();
} else { // 第一次尝试 - 快速定位
inputRefs.value['doseQuantity']?.focus(); await sleep(300);
} focusDoseQuantityInput(row);
} else {
inputRefs.value['quantity']?.focus(); }
// 聚焦到单次用量输入框的函数
function focusDoseQuantityInput(row) {
// 找到展开行对应的输入框并聚焦
const expandedRows = document.querySelectorAll('.el-table__expanded-cell');
if (expandedRows.length > 0) {
// 在最后一个展开行中查找输入框
const lastExpandedRow = expandedRows[expandedRows.length - 1];
// 查找doseQuantity输入框优先
let targetInput = lastExpandedRow.querySelector('[data-prop="doseQuantity"] .el-input-number__inner');
// 如果没找到,尝试其他方式
if (!targetInput && row.adviceType == 1) {
// 西药的情况找第一个el-input-number
targetInput = lastExpandedRow.querySelector('.el-input-number__inner');
} else if (!targetInput) {
// 诊疗/耗材的情况找quantity输入框
targetInput = lastExpandedRow.querySelector('[data-prop="quantity"] .el-input-number__inner');
} }
});
// 最后的备用方案
if (!targetInput) {
targetInput = lastExpandedRow.querySelector('input:not([disabled]):not([readonly])');
}
// 聚焦到输入框
if (targetInput) {
targetInput.focus();
// 选中文本,便于用户直接输入
if (targetInput.select) {
targetInput.select();
}
return true;
}
}
return false;
} }
} }
@@ -2277,6 +2327,7 @@ function setValue(row) {
uniqueKey: prescriptionList.value[rowIndex.value].uniqueKey, uniqueKey: prescriptionList.value[rowIndex.value].uniqueKey,
isEdit: prescriptionList.value[rowIndex.value].isEdit, isEdit: prescriptionList.value[rowIndex.value].isEdit,
statusEnum: prescriptionList.value[rowIndex.value].statusEnum, statusEnum: prescriptionList.value[rowIndex.value].statusEnum,
showPopover: false, // 确保查询框关闭
}; };
prescriptionList.value[rowIndex.value].orgId = undefined; prescriptionList.value[rowIndex.value].orgId = undefined;
prescriptionList.value[rowIndex.value].dose = undefined; prescriptionList.value[rowIndex.value].dose = undefined;