From 48189a075f8c522701f506a51b0c06675a913585 Mon Sep 17 00:00:00 2001 From: wangjian963 <15215920+aprilry@user.noreply.gitee.com> Date: Tue, 16 Jun 2026 16:35:20 +0800 Subject: [PATCH] =?UTF-8?q?=20fix(=E6=99=BA=E8=83=BD=E5=88=86=E8=AF=8A?= =?UTF-8?q?=E6=8E=92=E9=98=9F=E7=AE=A1=E7=90=86):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E4=BA=8B=E4=BB=B6=E5=8F=82=E6=95=B0Bug?= =?UTF-8?q?=E5=8F=8A=E6=B8=85=E7=90=86=E7=A1=AC=E7=BC=96=E7=A0=81=E5=81=87?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=92=8C=E6=AD=BB=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 cell-click 事件参数Bug:vxe-table 的 cell-click 回调为 { row, ... } 对象, 未解构导致 selectedQueueRow 被赋值为事件对象,row.id 始终为 undefined, 造成移出队列、选呼、上移/下移等所有操作报"缺少ID" - 修复 checkbox-change 事件参数Bug:同样需解构 { records } 才能获取选中数组, 否则 selectedCandidates 为事件对象,"加入队列"按钮永久禁用 - 移除候选池/队列硬编码假数据,ref 初始化为空数组,消除页面加载时的数据闪 - 移除死代码:formatMinutesToMmSs、mapStatusToFrontend、 getNextQueueOrder、recalculateQueueOrders - 修复 getRowClassName/canMoveUp/canMoveDown 使用 id 替代 queueOrder 匹配, 避免不同诊室同序号误高亮/误判 - 修复 filterTodayData:registerTime 缺失时保留数据而非全部丢弃 - 移除候选池表格无用的 :row-config --- .../triageandqueuemanage/cardiology/index.vue | 61 ++++--------------- 1 file changed, 11 insertions(+), 50 deletions(-) diff --git a/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue b/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue index 5d54ed1f7..c76426127 100755 --- a/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue +++ b/healthlink-his-ui/src/views/triageandqueuemanage/cardiology/index.vue @@ -31,7 +31,7 @@
{ } // ============ 与后端接口联动 ============ -// 注意:后端未实现或出错时会自动退回本地假数据 -// 将分钟数转换为 MM:SS 格式 -const formatMinutesToMmSs = (minutes) => { - if (minutes == null || minutes < 0) return '00:00' - const hours = Math.floor(minutes / 60) - const mins = minutes % 60 - const hoursStr = String(hours).padStart(2, '0') - const minsStr = String(mins).padStart(2, '0') - return `${hoursStr}:${minsStr}` -} - // 将年龄字符串转换为数字(处理 "20岁"、"1小时" 等格式) const parseAge = (ageStr) => { if (!ageStr) return 0 @@ -944,20 +933,6 @@ const loadQueueFromDb = async (dateStr) => { } } -// 根据状态枚举文本转换为前端状态 -const mapStatusToFrontend = (statusEnumText) => { - if (!statusEnumText) return '等待' - // 状态映射:就诊中 -> 叫号中,其他 -> 等待 - if (statusEnumText.includes('就诊中') || statusEnumText.includes('在诊')) { - return '叫号中' - } else if (statusEnumText.includes('已完成') || statusEnumText.includes('已出院')) { - return '已完成' - } else if (statusEnumText.includes('已取消') || statusEnumText.includes('退号')) { - return '已取消' - } - return '等待' -} - // 判断日期是否是今天 const isToday = (date) => { if (!date) return false @@ -977,7 +952,7 @@ const filterTodayData = (data) => { tomorrow.setDate(tomorrow.getDate() + 1) return data.filter(item => { - if (!item.registerTime) return false + if (!item.registerTime) return true // 无挂号时间的保留(如当天挂号未设置时间) const registerDate = new Date(item.registerTime) return registerDate >= today && registerDate < tomorrow }) @@ -1150,27 +1125,13 @@ const filteredQueueList = computed(() => { return filtered }) -const handleQueueRowClick = (row) => { +const handleQueueRowClick = ({ row }) => { selectedQueueRow.value = row } // 候选池选择变化 -const handleCandidateSelectionChange = (selection) => { - selectedCandidates.value = selection -} - -// 获取下一个队序号 -const getNextQueueOrder = () => { - if (originalQueueList.value.length === 0) return 1 - const maxOrder = Math.max(...originalQueueList.value.map(item => item.queueOrder)) - return maxOrder + 1 -} - -// 重新计算队序号(保持连续) -const recalculateQueueOrders = () => { - originalQueueList.value.forEach((item, index) => { - item.queueOrder = index + 1 - }) +const handleCandidateSelectionChange = ({ records }) => { + selectedCandidates.value = records } // 加入队列(选中的候选池患者)——落库 @@ -1442,18 +1403,18 @@ const handleRemoveFromQueue = async () => { // 是否可以上移 const canMoveUp = computed(() => { - if (!selectedQueueRow.value) return false + if (!selectedQueueRow.value || selectedQueueRow.value.id == null) return false const index = originalQueueList.value.findIndex( - item => item.queueOrder === selectedQueueRow.value.queueOrder + item => item.id === selectedQueueRow.value.id ) return index > 0 }) // 是否可以下移 const canMoveDown = computed(() => { - if (!selectedQueueRow.value) return false + if (!selectedQueueRow.value || selectedQueueRow.value.id == null) return false const index = originalQueueList.value.findIndex( - item => item.queueOrder === selectedQueueRow.value.queueOrder + item => item.id === selectedQueueRow.value.id ) return index >= 0 && index < originalQueueList.value.length - 1 }) @@ -1533,7 +1494,7 @@ const stopWaitingTimer = () => { const getRowClassName = ({ row }) => { const classes = [] if (row.status === '叫号中') classes.push('calling-row') - if (selectedQueueRow.value && row.queueOrder === selectedQueueRow.value.queueOrder) { + if (selectedQueueRow.value && row.id != null && row.id === selectedQueueRow.value.id) { classes.push('selected-row') } return classes.join(' ') @@ -2029,7 +1990,7 @@ const handleTestRule = () => { // 组件挂载 onMounted(() => { - // 初始化:优先从后端加载,失败则回退本地假数据 + // 初始化:从后端加载数据 loadDataFromApi() startWaitingTimer() })