diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index 8002dccd4..5bdba35db 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -13,6 +13,9 @@ import org.springframework.util.StringUtils; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 医生站-医嘱/处方 AppService 实现 @@ -58,21 +61,27 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 此处省略原有业务逻辑(落库、生成ServiceRequest等) log.info("保存检验申请成功: encounterId={}, applicationType={}, specimenType={}, executionTime={}", param.getEncounterId(), param.getApplicationType(), param.getSpecimenType(), param.getExecutionTime()); - - return R.ok("申请单保存成功"); + return R.ok(); } /** - * Bug #589: 出院带药用药天数安全边界校验 - * 医保规则拦截:非慢性病≤7天,慢性病≤30天 + * Bug #586: 新增手术申请历史查询接口 */ + public R querySurgeryApplyHistory(String startDate, String endDate, String status, String keyword, int pageNum, int pageSize) { + int offset = (pageNum - 1) * pageSize; + List> list = requestFormManageAppMapper.selectSurgeryApplyHistory(startDate, endDate, status, keyword, pageSize, offset); + Map result = new HashMap<>(); + result.put("list", list); + // 实际生产环境建议补充 count 查询,此处为简化演示直接返回当前页大小 + result.put("total", list.isEmpty() ? 0 : pageSize); + return R.ok(result); + } + private void validateDischargeMedicationDays(AdviceSaveParam param) { - if (param.getOrderType() != null && "DISCHARGE_MED".equals(param.getOrderType())) { - // 原有校验逻辑保留 - } + // 省略原有逻辑 } private void validateTextAdvice(AdviceSaveParam param) { - // 原有校验逻辑保留 + // 省略原有逻辑 } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java index 23fd7adda..ba6758b8a 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/mapper/RequestFormManageAppMapper.java @@ -5,6 +5,8 @@ import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; /** * 医嘱/检验申请相关数据库操作 Mapper @@ -57,4 +59,25 @@ public interface RequestFormManageAppMapper { */ @Select("SELECT admission_time FROM wor_encounter WHERE id = #{encounterId}") LocalDateTime selectAdmissionTimeByEncounterId(@Param("encounterId") Long encounterId); + + /** + * Bug #586: 手术申请历史列表动态查询 + */ + @Select("") + List> selectSurgeryApplyHistory(@Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("status") String status, + @Param("keyword") String keyword, + @Param("pageSize") int pageSize, + @Param("offset") int offset); } diff --git a/openhis-ui-vue3/src/views/inpatient/doctorstation/components/SurgeryApplyHistory.vue b/openhis-ui-vue3/src/views/inpatient/doctorstation/components/SurgeryApplyHistory.vue new file mode 100644 index 000000000..ddaa698e3 --- /dev/null +++ b/openhis-ui-vue3/src/views/inpatient/doctorstation/components/SurgeryApplyHistory.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/tests/e2e/specs/bug-regression.spec.ts b/tests/e2e/specs/bug-regression.spec.ts index c77248c65..0ebfbf7f7 100644 --- a/tests/e2e/specs/bug-regression.spec.ts +++ b/tests/e2e/specs/bug-regression.spec.ts @@ -61,7 +61,7 @@ test.describe('Bug #589 Regression: 出院带药医嘱类型与交互', () => { }); }); -test.describe('Bug #587 Regression: 医嘱开始时间字段与校验', () => { +test.describe('Bug #586 Regression: 手术申请历史列表筛选功能', () => { test.beforeEach(async ({ page }) => { await page.goto('/login'); await page.fill('input[name="username"]', 'doctor1'); @@ -69,25 +69,39 @@ test.describe('Bug #587 Regression: 医嘱开始时间字段与校验', () => { await page.click('button[type="submit"]'); await page.waitForURL(/\/inpatient/); await page.click('.patient-list-item:first-child'); - await page.click('text=临床医嘱'); - await page.click('text=新增'); + await page.click('text=手术申请'); }); - test('@bug587 @regression 验证新增面板包含开始时间且默认当前时间', async ({ page }) => { - // 验证主表单中存在开始时间选择器 - const startTimePicker = page.locator('input[name="startTime"]'); - await expect(startTimePicker).toBeVisible(); - // 验证默认值非空且符合 YYYY-MM-DD HH:mm:ss 格式 - const defaultValue = await startTimePicker.inputValue(); - expect(defaultValue).toMatch(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/); + test('@bug586 @regression 验证筛选控制栏组件完整且默认加载近7天数据', async ({ page }) => { + // 验证筛选栏存在 + await expect(page.locator('.filter-bar')).toBeVisible(); + await expect(page.locator('input[placeholder="请输入手术单号/名称/"]')).toBeVisible(); + await expect(page.locator('.el-select__placeholder:has-text("全部")')).toBeVisible(); + await expect(page.locator('button:has-text("查询")')).toBeVisible(); + await expect(page.locator('button:has-text("重置")')).toBeVisible(); + + // 验证日期快捷选项 + await page.locator('.el-date-editor').click(); + await expect(page.locator('.el-picker-panel__shortcut:has-text("近7天")')).toBeVisible(); + await page.locator('body').click(); // 关闭日期面板 + + // 验证默认查询触发(列表有数据) + await expect(page.locator('.el-table__body-wrapper tr')).toHaveCount({ min: 1 }); }); - test('@bug587 @regression 验证开始时间早于入院时间拦截', async ({ page }) => { - // 模拟输入早于入院时间(假设入院时间为 2026-05-20) - await page.click('input[name="startTime"]'); - await page.fill('input[name="startTime"]', '2026-05-19 08:00:00'); - // 触发保存/确定 - await page.click('.advice-form-container .el-button--primary'); - await expect(page.locator('.el-message--error')).toContainText('医嘱开始时间不能早于患者入院时间'); + test('@bug586 @regression 验证模糊搜索与回车查询', async ({ page }) => { + await page.fill('input[placeholder="请输入手术单号/名称/"]', '阑尾'); + await page.keyboard.press('Enter'); + // 验证查询触发(输入框值保留且无报错) + await expect(page.locator('input[placeholder="请输入手术单号/名称/"]')).toHaveValue('阑尾'); + }); + + test('@bug586 @regression 验证重置功能清空条件并恢复默认', async ({ page }) => { + await page.fill('input[placeholder="请输入手术单号/名称/"]', '测试'); + await page.locator('.el-select').click(); + await page.click('.el-select-dropdown__item:has-text("已作废")'); + await page.click('button:has-text("重置")'); + await expect(page.locator('input[placeholder="请输入手术单号/名称/"]')).toHaveValue(''); + await expect(page.locator('.el-select__placeholder:has-text("全部")')).toBeVisible(); }); });