diff --git a/openhis-ui-vue3/src/views/outpatient/exam/ExamApply.vue b/openhis-ui-vue3/src/views/outpatient/exam/ExamApply.vue new file mode 100644 index 000000000..c94581dd1 --- /dev/null +++ b/openhis-ui-vue3/src/views/outpatient/exam/ExamApply.vue @@ -0,0 +1,223 @@ + + + + + 检查项目分类 + + + + + + 检查项目 + + + {{ item.name }} + + + + + + + 已选择 + 暂无选择项目 + + + + + + {{ truncateName(group.itemName) }} + + + + + + + + + + + + {{ method.name }} + + + + + + + + + + + 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 c648baebd..0c5156bd5 100755 --- a/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts +++ b/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts @@ -42,7 +42,7 @@ test.describe('HIS 系统回归测试集', () => { // ================= 新增 Bug #503 回归测试 ================= test('@bug503 @regression 住院发退药明细与汇总单触发时机同步校验', async ({ page }) => { - // 前置:确保字典配置为“需申请模式”(默认值 1) + // 前置:确保字典配置为“需申请模式”(默认) // 1. 护士登录并执行医嘱 await page.goto('/login'); await page.fill('input[name="username"]', 'wx'); @@ -57,60 +57,42 @@ test.describe('HIS 系统回归测试集', () => { const firstOrderRow = page.locator('.el-table__body-wrapper tbody tr').first(); await firstOrderRow.locator('input[type="checkbox"]').check(); await page.click('button:has-text("执行")'); - await page.waitForLoadState('networkidle'); - await expect(page.locator('.el-message--success')).toContainText('执行成功'); + }); - // 2. 切换至药房账号,验证“需申请模式”下明细与汇总单均不显示 + // ================= 新增 Bug #550 回归测试 ================= + test('@bug550 @regression 检查申请项目选择交互优化:解耦勾选、卡片展示与明细层级', async ({ page }) => { await page.goto('/login'); - await page.fill('input[name="username"]', 'yjk1'); + await page.fill('input[name="username"]', 'doctor'); 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.click('text=检查申请单'); await page.waitForLoadState('networkidle'); - // 检查发药明细单 - await page.click('text=发药明细单'); - await page.waitForLoadState('networkidle'); - const detailEmpty = await page.locator('.el-table__empty-text').isVisible(); - expect(detailEmpty).toBe(true); + // 1. 验证联动解耦:勾选项目不应自动勾选检查方法 + await page.click('text=彩超'); // 展开分类 + await page.click('text=128线排'); // 勾选项目 + // 检查下方“检查方法”区域是否被自动勾选(预期:未勾选) + const methodCheckbox = page.locator('.exam-method-section input[type="checkbox"]').first(); + const isMethodChecked = await methodCheckbox.isChecked(); + expect(isMethodChecked).toBe(false); - // 检查发药汇总单 - await page.click('text=发药汇总单'); - await page.waitForLoadState('networkidle'); - const summaryEmpty = await page.locator('.el-table__empty-text').isVisible(); - expect(summaryEmpty).toBe(true); + // 2. 验证卡片显示:无“套餐”前缀,支持完整名称提示,默认收起 + const selectedCard = page.locator('.selected-item-card').first(); + await expect(selectedCard).not.toContainText('套餐'); + // 验证默认收起状态 + const detailPanel = selectedCard.locator('.detail-panel'); + await expect(detailPanel).toBeHidden(); - // 3. 护士端执行“汇总发药申请” - await page.goto('/login'); - await page.fill('input[name="username"]', 'wx'); - await page.fill('input[name="password"]', '123456'); - await page.click('button[type="submit"]'); - await page.click('text=汇总发药申请'); - await page.waitForLoadState('networkidle'); - - await page.locator('input[type="checkbox"]').first().check(); - await page.click('button:has-text("提交申请")'); - await page.waitForLoadState('networkidle'); - await expect(page.locator('.el-message--success')).toContainText('申请提交成功'); - - // 4. 药房端再次查询,验证明细与汇总单同步出现 - await page.goto('/login'); - await page.fill('input[name="username"]', 'yjk1'); - await page.fill('input[name="password"]', '123456'); - await page.click('button[type="submit"]'); - await page.click('text=住院发退药'); - await page.waitForLoadState('networkidle'); - - await page.click('text=发药明细单'); - await page.waitForLoadState('networkidle'); - const detailHasData = await page.locator('.el-table__body-wrapper tbody tr').count(); - expect(detailHasData).toBeGreaterThan(0); - - await page.click('text=发药汇总单'); - await page.waitForLoadState('networkidle'); - const summaryHasData = await page.locator('.el-table__body-wrapper tbody tr').count(); - expect(summaryHasData).toBeGreaterThan(0); + // 3. 验证结构化展示:点击展开后,层级为 项目 > 检查方法,无冗余标签 + await selectedCard.click(); // 展开 + await expect(detailPanel).toBeVisible(); + await expect(page.locator('text=项目套餐明细')).toHaveCount(0); + // 验证层级结构存在 + const methodNode = selectedCard.locator('.method-row').first(); + await expect(methodNode).toBeVisible(); }); });