From f6f8a33304fedb40223cc4ddec28e284bc220568 Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Wed, 27 May 2026 02:07:13 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#550:=20AI=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CheckRequestServiceImpl.java | 4 +- .../views/outpatient/doctor/CheckRequest.vue | 230 ++++++++---------- .../tests/e2e/specs/bug-regression.spec.ts | 53 ++-- 3 files changed, 140 insertions(+), 147 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/service/impl/CheckRequestServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/service/impl/CheckRequestServiceImpl.java index f5602a5e2..102ac7cde 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/service/impl/CheckRequestServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/outpatient/service/impl/CheckRequestServiceImpl.java @@ -59,10 +59,10 @@ public class CheckRequestServiceImpl implements CheckRequestService { List existing = checkRequestMapper.selectExistingItemCodes(itemCodes); if (!existing.isEmpty()) { - throw new IllegalArgumentException("以下项目已存在待处理申请,请勿重复提交:" + existing); + throw new IllegalArgumentException("以下项目已存在未完成的申请,请勿重复提交:" + existing); } - // 3. 批量插入(项目与方法解耦,仅保存主项,方法明细按需扩展) + // 3. 保存申请(项目与方法解耦存储) checkRequestMapper.batchInsertRequests(selected); } } diff --git a/openhis-ui-vue3/src/views/outpatient/doctor/CheckRequest.vue b/openhis-ui-vue3/src/views/outpatient/doctor/CheckRequest.vue index b62b67db2..f0d6d3d05 100644 --- a/openhis-ui-vue3/src/views/outpatient/doctor/CheckRequest.vue +++ b/openhis-ui-vue3/src/views/outpatient/doctor/CheckRequest.vue @@ -41,8 +41,8 @@ @change="handleItemCheckChange(item)" @click.stop /> - - {{ item.name }} + + {{ cleanName(item.name) }} @@ -63,210 +63,192 @@ -
暂无选择项目
+ - -
- 提交申请 - 清空 -
- 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 8259dd852..6caab99a8 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -60,35 +60,46 @@ test.describe('HIS 系统回归测试集', () => { await page.click('text=住院发退药'); }); - // ================= 修复 Bug #561 回归测试 ================= - test('@bug561 @regression 门诊医生站医嘱总量单位显示正常', async ({ page }) => { + // ================= 新增 Bug #550 回归测试 ================= + test('@bug550 @regression 检查申请项目选择交互优化:解耦勾选、名称完整显示及明细折叠', async ({ page }) => { await page.goto('/login'); - await page.fill('input[name="username"]', 'doctor1'); + await page.fill('input[name="username"]', 'doctor01'); await page.fill('input[name="password"]', '123456'); await page.click('button[type="submit"]'); await expect(page).toHaveURL(/.*dashboard.*/); - // 进入门诊医生工作站 - await page.click('text=门诊医生工作站'); + await page.click('text=检查申请单'); await page.waitForLoadState('networkidle'); - // 选择患者并进入医嘱界面 - const firstPatient = page.locator('.el-table__body-wrapper tbody tr').first(); - await firstPatient.click(); - await page.click('text=医嘱'); - await page.waitForLoadState('networkidle'); + // 1. 展开彩超分类并勾选项目 + await page.click('text=彩超'); + const itemCheckbox = page.locator('.middle-panel .el-table__body-wrapper tbody tr').first().locator('input[type="checkbox"]'); + await itemCheckbox.check(); - // 验证总量单位列不显示 null - const nullUnitCells = page.locator('.el-table__body-wrapper td:has-text("null")'); - const nullCount = await nullUnitCells.count(); - expect(nullCount).toBe(0); + // 2. 验证:检查方法未被自动勾选(解耦) + const methodCheckbox = page.locator('.right-panel .method-item input[type="checkbox"]').first(); + const isMethodChecked = await methodCheckbox.isChecked(); + expect(isMethodChecked).toBe(false); - // 验证总量单位包含有效文本(如“次”、“盒”等) - const unitCells = page.locator('[class*="total-unit"], [class*="unit"]'); - if (await unitCells.count() > 0) { - const firstUnitText = await unitCells.first().innerText(); - expect(firstUnitText).not.toContain('null'); - expect(firstUnitText.trim().length).toBeGreaterThan(0); - } + // 3. 验证:卡片名称无“套餐”前缀,且支持 Tooltip 完整显示 + const cardName = page.locator('.right-panel .item-name').first(); + const nameText = await cardName.textContent(); + expect(nameText).not.toContain('套餐'); + + // 悬停触发 Tooltip + await cardName.hover(); + const tooltip = page.locator('.el-tooltip__trigger'); + await expect(tooltip).toBeVisible(); + + // 4. 验证:默认收起状态,点击可展开 + const expandIcon = page.locator('.right-panel .expand-icon').first(); + await expect(expandIcon).toHaveClass(/ArrowRight/); // 默认收起图标 + await expandIcon.click(); + await expect(expandIcon).toHaveClass(/ArrowDown/); // 展开后图标 + + // 5. 验证:手动勾选方法不影响项目勾选状态 + await methodCheckbox.check(); + const isItemChecked = await itemCheckbox.isChecked(); + expect(isItemChecked).toBe(true); }); });