diff --git a/src/api/liswork/work/LisWork.ts b/src/api/liswork/work/LisWork.ts index 30fe9a3..7b74aa1 100644 --- a/src/api/liswork/work/LisWork.ts +++ b/src/api/liswork/work/LisWork.ts @@ -338,5 +338,21 @@ export function setredoSample(query?: Object) { params: query }) } +// 锁定报告 +export function lockSample(query?: Object) { + return request({ + url: '/lisworkoper/locksample', + method: 'get', + params: query + }) +} +// 解锁报告 +export function unLockSample(query?: Object) { + return request({ + url: '/lisworkoper/unlocksample', + method: 'get', + params: query + }) +} diff --git a/src/components/contextMenu/index.vue b/src/components/contextMenu/index.vue index 148f141..ebf3478 100644 --- a/src/components/contextMenu/index.vue +++ b/src/components/contextMenu/index.vue @@ -31,9 +31,9 @@ import emitter from '@/utils/mitt'; // 组件Props const props = withDefaults(defineProps<{ - items: ContextMenuItem[]; - autoClose?: boolean; - menuWidth?: number | string; + items: ContextMenuItem[]; // 菜单项 + autoClose?: boolean; // 是否自动关闭菜单 + menuWidth?: number | string; // 菜单宽度 }>(), { autoClose: true, menuWidth: 180, @@ -51,14 +51,29 @@ const visible = ref(false); const top = ref(0); const left = ref(0); -const handleContextMenu = (e: MouseEvent) => { - // 打开当前菜单关闭其他菜单 + +const handleContextMenu = async (e: MouseEvent) => { emitter.emit('closeAllContextMenus'); - top.value = Math.min(e.clientY, window.innerHeight - 200); - left.value = Math.min(e.clientX, window.innerWidth - 200); + // 先计算初始位置 + left.value = Math.min(e.clientX, window.innerWidth - (typeof props.menuWidth === 'number' ? props.menuWidth : 180)); + top.value = e.clientY; visible.value = true; emit('open'); + + // 等待菜单渲染完成后获取实际高度 + await nextTick(); + const menuEl = document.querySelector('.hospital-menu') as HTMLElement; + if (menuEl) { + const menuHeight = menuEl.offsetHeight; + const maxTop = window.innerHeight - menuHeight; + // 确保菜单不会超出底部可视区域 + if (top.value > maxTop) { + top.value = maxTop; + // 如果向上调整后仍超出顶部,则取最小0值 + if (top.value < 0) top.value = 0; + } + } }; // 处理菜单项点击 @@ -86,12 +101,14 @@ const handleClickOutside = (e: MouseEvent) => { // 键盘事件处理 const handleKeyDown = (e: KeyboardEvent) => { if (!visible.value) return; - // console.log('e==>', e); if (e.key === 'Escape') { hideMenu(); } - if (e.key === 'e') { - console.log('e==>', e); + // 统一转换小写 + const row: ContextMenuItem | undefined = props.items.find(item => item.shortcut?.toLowerCase() === e.key?.toLowerCase()); + + if (row && !row.disabled) { + handleItemClick(row) } }; diff --git a/src/components/elTable/index.vue b/src/components/elTable/index.vue index bcf7a01..cdffaa4 100644 --- a/src/components/elTable/index.vue +++ b/src/components/elTable/index.vue @@ -331,8 +331,8 @@ const setCurrentRow = (row: Object) => { tableRef.value?.setCurrentRow(row); }; -const setScrollTop = (top: number) => { - tableRef.value?.setScrollTop(top); +const setScrollTo = (top: number) => { + tableRef.value?.scrollTo(top); }; const clearSort = () => { @@ -353,7 +353,7 @@ defineExpose({ toggleRowSelection, toggleAllSelection, setCurrentRow, - setScrollTop, + setScrollTo, clearSort, doLayout, sort, diff --git a/src/views/liswork/work/components/labpat.vue b/src/views/liswork/work/components/labpat.vue index 7bfda9b..dacba20 100644 --- a/src/views/liswork/work/components/labpat.vue +++ b/src/views/liswork/work/components/labpat.vue @@ -62,49 +62,8 @@ - - - - - - - - - - - - - - - - - - - - - 仅修改当前标本 - 修改当天所有未审核并且无核对医生的标本 - 修改当天所有未审核标本(将覆盖原有的核对医生) - - - 指定样本号区间 - - - - - - - - - + @@ -112,11 +71,12 @@ import { ref, reactive, watch, toRaw, computed, onMounted, nextTick } from 'vue'; import { changepatcolumn, updateLabPat, checkYsUser } from "@/api/liswork/work/LisWork"; import SelectTable from '@/components/SelectTable/index.vue'; -// @ts-ignore -import { listUser } from '@/api/system/user.js' +import YhVerification from './yhVerification.vue'; + import { PropType } from 'vue'; import emitter from '@/utils/mitt'; import { classCom } from '@/utils/classCom'; +import { use } from 'vxe-pc-ui'; const aotuSize = classCom.useAutoSize(); interface LabSysItem { kj: string; @@ -142,6 +102,10 @@ const props = defineProps({ type: Object, default: () => { } }, + userList: { + type: Array as PropType, + default: () => [] + } }); const lastJgbz = ref(); @@ -170,8 +134,6 @@ const ysFields = ref([ { prop: 'nickName', label: '用户姓名', width: 150, enablePinyinSearch: true }, ]) -const visible = ref(false); -// 表单数据 const form = ref({ yhdh: '', userName: '', @@ -194,25 +156,12 @@ const formRef = ref(); // 处理确定按钮点击 const handleConfirm = async () => { - if (!formRef.value) return; - - // 表单验证 - const valid = await formRef.value.validate(); - if (valid) { - checkYsUser({ ...form.value, ...props.labPatKey }).then((res: any) => { - if (res.code == 0) { - visible.value = false - form.value.mm = '' - handleFieldChange() - } - }) - } + form.value.mm = '' + handleFieldChange() }; // 处理取消按钮点击 const handleCancel = () => { - formRef.value?.resetFields(); - visible.value = false if (form.value.zdmc = 'yhdh') { props.labPat.yhdh = JSON.parse(lastValue.value).yhdh } @@ -222,13 +171,6 @@ const handleCancel = () => { }; -const handleRadioChange = () => { - if (form.value.type == 4) { - form.value.ybh1 = '' - form.value.ybh2 = '' - } -} - // 医生校验 const getJyysData = (data: any) => { if (data.userName == JSON.parse(lastValue.value).yhdh) return @@ -236,7 +178,7 @@ const getJyysData = (data: any) => { form.value.userName = data.nickName; form.value.zdmc = 'yhdh'; nextTick(() => { - visible.value = true + formRef.value?.open() }) } const getHdysData = (data: any) => { @@ -245,7 +187,7 @@ const getHdysData = (data: any) => { form.value.userName = data.nickName; form.value.zdmc = 'hdys'; nextTick(() => { - visible.value = true + formRef.value?.open() }) } @@ -378,13 +320,7 @@ const getColor = (type: string) => { return 'default'; } } -const userList = ref([]); onMounted(() => { - const data = { status: 0, del_flag: 0, pageSize: 1000, pageNum: 1 } - listUser(data).then((res: any) => { - userList.value = res.rows; - }); - // 监听保存病人结果 emitter.on('saveResult', () => { saveLabPat(null) diff --git a/src/views/liswork/work/components/labresult.vue b/src/views/liswork/work/components/labresult.vue index f352ef9..f5ee85c 100644 --- a/src/views/liswork/work/components/labresult.vue +++ b/src/views/liswork/work/components/labresult.vue @@ -153,14 +153,53 @@ + + + + + + + 5天内 + 10天内 + 20天内 + 30天内 + + + + + 复制 + 移动 + + + + + 覆盖 + 不覆盖 + + + +
只显示同一申请单号
+
+ 确定 + 取消 +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/src/views/liswork/work/index.vue b/src/views/liswork/work/index.vue index b5c3beb..b933fdf 100644 --- a/src/views/liswork/work/index.vue +++ b/src/views/liswork/work/index.vue @@ -48,12 +48,12 @@ + :userList="userList" @changeStatus="changeStatus" /> + :userList="userList" :resultSysList="resultConfig" @fetchLabResults="fetchLabResults" + @changeStatus="changeStatus" @previewHandle="previewHandle" /> @@ -159,7 +159,8 @@ import { getNextNumber, getPreviousNumber } from "@/utils/getNextNumber"; import { useCommonStore } from '@/store/modules/commonStore'; import { classCom } from '@/utils/classCom'; import PatientQueryForm from '@/components/selectSearch/index.vue' - +// @ts-ignore +import { listUser } from '@/api/system/user.js' const aotuSize = classCom.useAutoSize(); @@ -611,7 +612,12 @@ const getSysList = () => { } getSysList() +const userList = ref([]); onMounted(async () => { + const data = { status: 0, del_flag: 0, pageSize: 1000, pageNum: 1 } + listUser(data).then((res: any) => { + userList.value = res.rows; + }); // 加载病人来源字典 const dictRefs = await comDict('PT', 'AU', 'SX', 'DP', 'BT', 'SRD', 'HOS', 'ST'); // 从 ref 中获取实际数据 diff --git a/src/views/liswork/work/reexamination/index.vue b/src/views/liswork/work/reexamination/index.vue index 071ad7a..5e9c0ea 100644 --- a/src/views/liswork/work/reexamination/index.vue +++ b/src/views/liswork/work/reexamination/index.vue @@ -101,7 +101,7 @@ const addRowFromDict = async (rowData: any) => { // 5. 自动聚焦 nextTick(() => { tableRef.value.setCurrentRow(newRow); - tableRef.value.setScrollTop(23 * tableData.value.length) + tableRef.value.setScrollTo(tableData.value.length - 1) // 聚焦到新行的输入框 const inputs = document.querySelectorAll('.full-width-input .el-input__inner') as NodeListOf; if (inputs.length > 0) {