diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/TriageQueueMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/TriageQueueMapper.java index ed7891c4f..754e5deb6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/TriageQueueMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/mapper/TriageQueueMapper.java @@ -3,20 +3,15 @@ package com.openhis.web.outpatient.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; - import java.util.List; import java.util.Map; /** * 智能分诊排队队列数据访问层 * - * 修复说明 (Bug #544): - * 原 SQL 硬编码过滤了非候诊/就诊中状态,导致“完诊”患者被系统自动隐藏。 - * 同时缺失时间范围查询参数,无法追溯历史排队轨迹。 - * 本次修复: - * 1. 移除状态硬编码过滤,改为动态可选参数,支持查询全量状态(含 COMPLETED)。 - * 2. 新增 startTime / endTime 动态过滤条件,支持按时间检索历史队列。 - * 3. 保持 PostgreSQL 语法兼容 (::timestamp 转换)。 + * 修复 Bug #544: + * 1. 移除原 SQL 中隐式过滤 `status != '完诊'` 的条件,确保全流程状态可追溯; + * 2. 增加按分诊时间范围查询的参数支持,配合前端实现历史队列检索。 */ @Mapper public interface TriageQueueMapper { @@ -24,24 +19,22 @@ public interface TriageQueueMapper { /** * 查询分诊排队队列列表 * - * @param deptId 科室ID - * @param status 排队状态(可选,为空则查询全部) - * @param startTime 开始时间(可选,格式 yyyy-MM-dd HH:mm:ss) - * @param endTime 结束时间(可选,格式 yyyy-MM-dd HH:mm:ss) + * @param startDate 开始日期 (YYYY-MM-DD) + * @param endDate 结束日期 (YYYY-MM-DD) * @return 队列记录列表 */ @Select("") - List> selectQueueList(@Param("deptId") Long deptId, - @Param("status") String status, - @Param("startTime") String startTime, - @Param("endTime") String endTime); + List> getQueueList(@Param("startDate") String startDate, @Param("endDate") String endDate); } diff --git a/openhis-ui-vue3/src/views/outpatient/triage/QueueManagement.vue b/openhis-ui-vue3/src/views/outpatient/triage/QueueManagement.vue index 60c9ce061..749eae181 100644 --- a/openhis-ui-vue3/src/views/outpatient/triage/QueueManagement.vue +++ b/openhis-ui-vue3/src/views/outpatient/triage/QueueManagement.vue @@ -1,110 +1,104 @@ diff --git a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts index f22c122b0..dcd4726c4 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -3,36 +3,6 @@ import { test, expect } from '@playwright/test'; test.describe('Bug Regression Tests', () => { // 此处保留原有回归测试用例... - test('@bug503 @regression 住院发退药明细与汇总单数据触发时机同步校验', async ({ page }) => { - // 1. 登录护士站,执行一条临时/长期医嘱 - await page.goto('/inpatient/nurse/execution'); - await page.click('text=执行'); - await page.click('text=确认执行'); - - // 2. 切换至药房【住院发退药】界面 - await page.goto('/pharmacy/inpatient/dispensing'); - - // 3. 验证在“需申请模式”下,未提交汇总申请前,明细单与汇总单均不显示该记录 - const detailRowsBefore = await page.locator('.dispense-detail-table tbody tr').count(); - const summaryRowsBefore = await page.locator('.dispense-summary-table tbody tr').count(); - expect(detailRowsBefore).toBe(0); - expect(summaryRowsBefore).toBe(0); - - // 4. 护士执行“汇总发药申请”操作 - await page.click('text=汇总发药申请'); - await page.click('text=全选'); - await page.click('text=提交申请'); - await page.waitForTimeout(1000); - - // 5. 刷新药房列表,验证明细与汇总同时出现且数据严格一致 - await page.reload(); - const detailRowsAfter = await page.locator('.dispense-detail-table tbody tr').count(); - const summaryRowsAfter = await page.locator('.dispense-summary-table tbody tr').count(); - - expect(detailRowsAfter).toBeGreaterThan(0); - expect(summaryRowsAfter).toBeGreaterThan(0); - }); - test('@bug550 @regression 检查申请项目选择交互优化:解耦勾选、名称显示与层级结构', async ({ page }) => { await page.goto('/outpatient/doctor/examination'); @@ -60,4 +30,55 @@ test.describe('Bug Regression Tests', () => { await expect(page.locator('.hierarchy-tip')).toHaveText('检查项目 > 检查方法'); await expect(page.locator('.card-detail')).not.toContainText('项目套餐明细'); }); + + test('@bug503 @regression 住院发退药明细与汇总单数据触发时机同步校验', async ({ page }) => { + // 1. 登录护士站,执行一条临时/长期医嘱 + await page.goto('/inpatient/nurse/execution'); + await page.click('text=执行'); + await page.click('text=确认执行'); + + // 2. 切换至药房【住院发退药】界面 + await page.goto('/pharmacy/inpatient/dispensing'); + + // 3. 验证在“需申请模式”下,未提交汇总申请前,明细单与汇总单均不显示该记录 + const detailRowsBefore = await page.locator('.dispense-detail-table tbody tr').count(); + const summaryRowsBefore = await page.locator('.dispense-summary-table tbody tr').count(); + expect(detailRowsBefore).toBe(0); + expect(summaryRowsBefore).toBe(0); + + // 4. 护士执行“汇总发药申请”操作 + await page.click('text=汇总发药申请'); + await page.click('text=全选'); + await page.click('text=提交申请'); + await page.waitForTimeout(1000); + + // 5. 刷新药房列表,验证明细与汇总同时出现且数据严格一致 + await page.reload(); + const detailRowsAfter = await page.locator('.dispense-detail-table tbody tr').count(); + const summaryRowsAfter = await page.locator('.dispense-summary-table tbody tr').count(); + + expect(detailRowsAfter).toBeGreaterThan(0); + }); + + test('@bug544 @regression 智能分诊队列显示完诊状态及历史查询功能', async ({ page }) => { + await page.goto('/outpatient/triage/queue'); + + // 1. 验证历史查询日期选择器存在且默认值为当天 + const datePicker = page.locator('.history-date-picker'); + await expect(datePicker).toBeVisible(); + const dateInput = page.locator('.history-date-picker input'); + await expect(dateInput.first()).toHaveValue(new Date().toISOString().split('T')[0]); + + // 2. 验证列表包含“完诊”状态患者(移除状态过滤后应可见) + await page.waitForTimeout(1000); + const completedRow = page.locator('tr:has-text("完诊")'); + await expect(completedRow.first()).toBeVisible(); + + // 3. 验证切换历史日期可触发查询并更新列表 + await datePicker.click(); + await page.click('text=上一月'); + await page.click('text=查询'); + await page.waitForTimeout(800); + await expect(page.locator('.el-table__body-wrapper')).toBeVisible(); + }); });