From 5af86494ddc94df89da5c2fcb5b3e0505e7a00ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Mon, 11 May 2026 13:49:08 +0800 Subject: [PATCH 01/44] =?UTF-8?q?Fix=20Bug=20#500:=20=E3=80=90=E9=97=A8?= =?UTF-8?q?=E8=AF=8A=E5=8C=BB=E7=94=9F=E7=AB=99=E3=80=91=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E5=8F=B3=E4=BE=A7"=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=86=E7=B1=BB"=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E7=95=8C=E9=9D=A2=E5=87=BA=E7=8E=B0=E6=98=8E?= =?UTF-8?q?=E6=98=BE=E6=8A=96=E5=8A=A8/=E9=97=AA=E7=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因分析: 1. el-collapse accordion 模式下快速切换分类时,连续的折叠/展开动画重叠, Element Plus 在动画过程中重新计算面板高度,导致高度跳变和白屏闪烁 2. 折叠容器缺少 overflow:hidden,动画过渡期间内容溢出造成闪烁 修复方案: 1. 添加 isAnimating 防抖标志,handleCollapseChange 中 300ms 内忽略后续点击 (与 CSS 过渡时长一致),让当前动画完整执行后再响应下一次切换 2. .collapse-scroll 添加 overflow-x:hidden,防止水平方向溢出 3. :deep(.el-collapse-item__wrap) 添加 overflow:hidden 替代 will-change:height, 避免强制 GPU 合成层带来的性能开销 Co-Authored-By: Claude Opus 4.7 --- .../examination/examinationApplication.vue | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue b/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue index 7c763f07..1ee2188d 100755 --- a/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/examination/examinationApplication.vue @@ -522,6 +522,7 @@ const categoryList = ref([]); // 原始分类+项目数据 const dictSearchKey = ref(''); const activeNames = ref(''); // 当前展开的折叠项 const categoryLoadingSet = ref(new Set()); // Bug #500: 正在加载方法的分类集合 +const isAnimating = ref(false); // Bug #500: 防止快速切换时折叠动画重叠导致抖动 const allMethods = ref([]); @@ -669,8 +670,13 @@ async function handleCategoryExpand(cat) { categoryLoadingSet.value.delete(cat.typeId); } } -// Bug #500: 改为非 async 函数,避免 el-collapse 的 @change 等待异步完成导致抖动 +// Bug #500: 添加防抖逻辑,快速切换时跳过中间状态的动画,避免高度跳变和白屏闪烁 function handleCollapseChange(activeName) { + if (isAnimating.value) return; // 动画进行中,忽略后续点击 + + isAnimating.value = true; + setTimeout(() => { isAnimating.value = false; }, 300); // 与 CSS 过渡时长一致 + if (activeName) { const cat = filteredCategoryList.value.find(c => c.typeId == activeName); if (cat && (!cat.methods || cat.methods.length === 0)) { @@ -1307,6 +1313,7 @@ defineExpose({ getList }); .collapse-scroll { flex: 1; overflow-y: auto; + overflow-x: hidden; /* Bug #500: 防止切换时水平方向溢出导致抖动 */ } .empty-hint { color: #909399; @@ -1479,10 +1486,10 @@ defineExpose({ getList }); padding-bottom: 4px; transition: all 0.3s ease; } -/* Bug #500: 折叠面板展开/收起动画使用 will-change 优化性能 */ +/* Bug #500: 折叠面板动画容器,添加 overflow:hidden 防止展开时内容溢出导致闪烁 */ :deep(.el-collapse-item__wrap) { border: none; - will-change: height; + overflow: hidden; } :deep(.el-collapse-item) { transition: margin 0.2s ease; From 8fae6fe3d598e06e204888f335f573f24de53fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Mon, 11 May 2026 14:01:15 +0800 Subject: [PATCH 02/44] =?UTF-8?q?Fix=20Bug=20#491:=20=E3=80=90=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E7=A7=91=E5=AE=A4=E9=85=8D=E7=BD=AE=E3=80=91=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E9=85=8D=E7=BD=AE=E6=97=B6=E7=B3=BB=E7=BB=9F=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: addOrEditOrgLoc 方法中 organizationService.getById() 返回 null 时 直接调用 .getName() 导致 NullPointerException。当数据库中某条执行科室配置 关联的 organizationId 对应的科室记录已被删除时触发此问题。 修复: 在调用 getName() 前增加 null 检查,返回"未知科室"作为降级提示。 Co-Authored-By: Claude Opus 4.7 --- .../impl/OrganizationLocationAppServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java index 7c76d027..c84f11c9 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java @@ -135,7 +135,8 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation BeanUtils.copyProperties(orgLocQueryDto, orgLoc); Long activityDefinitionId = orgLoc.getActivityDefinitionId(); - String activityName = activityDefinitionId != null ? activityDefinitionMapper.selectById(activityDefinitionId).getName() : ""; + String activityName = activityDefinitionId != null + ? activityDefinitionMapper.selectById(activityDefinitionId).getName() : ""; List organizationLocationList = organizationLocationService.getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getActivityDefinitionId()); @@ -147,8 +148,8 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation for (OrganizationLocation organizationLocation : organizationLocationList) if (DateTimeUtils.isOverlap(organizationLocation.getStartTime(), organizationLocation.getEndTime(), orgLoc.getStartTime(), orgLoc.getEndTime())) { - String organizationName = - organizationService.getById(organizationLocation.getOrganizationId()).getName(); + Organization org = organizationService.getById(organizationLocation.getOrganizationId()); + String organizationName = org != null ? org.getName() : "未知科室"; return R.fail("当前诊疗:" + activityName + CommonConstants.Common.DASH + orgLoc.getStartTime() + CommonConstants.Common.DASH + orgLoc.getEndTime() + "与" + organizationName + "时间冲突"); } From 8093f8acdae5974744659b831bf2dc5cf20f0219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=BE=BD?= <关羽@gentronhealth.com> Date: Mon, 11 May 2026 14:03:40 +0800 Subject: [PATCH 03/44] =?UTF-8?q?Fix=20Bug=20#477:=20=E4=BD=8F=E9=99=A2?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=B7=A5=E4=BD=9C=E7=AB=99-=E4=BD=8F?= =?UTF-8?q?=E9=99=A2=E6=A3=80=E6=9F=A5=E7=94=B3=E8=AF=B7=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E4=B8=AD"=E5=8F=91=E5=BE=80=E7=A7=91?= =?UTF-8?q?=E5=AE=A4"=E5=AD=97=E6=AE=B5=E6=98=BE=E7=A4=BA=E4=B8=BA?= =?UTF-8?q?=E7=9F=AD=E6=A8=AA=E7=BA=BF=EF=BC=88-=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E6=9C=AA=E6=AD=A3=E5=B8=B8=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:handleViewDetail 为同步方法,点击详情时 getLocationInfo 尚未返回, orgOptions 为空导致 recursionFun 无法将 targetDepartment ID 解析为科室名称。 修复: 1. 前端(4个申请组件):handleViewDetail 改为 async,解析 descJson 前确保 orgOptions 已加载 2. 前端:watch encounterId 改为 Promise.all 并行加载数据和科室列表 3. 后端:新增 keyword 关键字筛选参数(申请单号/检查项目模糊匹配) Co-Authored-By: Claude Opus 4.7 --- .../IRequestFormManageAppService.java | 15 ++++++- .../impl/RequestFormManageAppServiceImpl.java | 7 +-- .../RequestFormManageController.java | 6 ++- .../mapper/RequestFormManageAppMapper.java | 4 +- .../RequestFormManageAppMapper.xml | 10 +++++ .../bloodTtransfusionAapplication.vue | 19 ++++---- .../applicationShow/examineApplication.vue | 19 ++++---- .../applicationShow/surgeryApplication.vue | 19 ++++---- .../applicationShow/testApplication.vue | 44 ++++++++++++++----- 9 files changed, 100 insertions(+), 43 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java index c972faa0..f67aeeee 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/IRequestFormManageAppService.java @@ -33,7 +33,7 @@ public interface IRequestFormManageAppService { List getRequestForm(Long encounterId, String typeCode); /** - * 查询申请单(支持筛选) + * 查询申请单(支持日期和状态筛选) * * @param encounterId 就诊id * @param typeCode 申请单类型 @@ -44,6 +44,19 @@ public interface IRequestFormManageAppService { */ List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate, String status); + /** + * 查询申请单(支持日期、状态和关键字筛选) + * + * @param encounterId 就诊id + * @param typeCode 申请单类型 + * @param startDate 开始日期(可选,格式:yyyy-MM-dd) + * @param endDate 结束日期(可选,格式:yyyy-MM-dd) + * @param status 单据状态(可选) + * @param keyword 关键字(可选,申请单号/检查项目名称模糊匹配) + * @return 申请单列表 + */ + List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate, String status, String keyword); + /** * 分页查询申请单 * diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java index d07df036..eb61dd26 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java @@ -415,7 +415,7 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer @Override public List getRequestForm(Long encounterId, String typeCode) { // 调用重载方法,不传筛选参数 - return getRequestForm(encounterId, typeCode, null, null, null); + return getRequestForm(encounterId, typeCode, null, null, null, null); } /** @@ -426,16 +426,17 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer * @param startDate 开始日期(可选,格式:yyyy-MM-dd) * @param endDate 结束日期(可选,格式:yyyy-MM-dd) * @param status 单据状态(可选) + * @param keyword 关键字(可选,申请单号/检查项目名称模糊匹配) * @return 申请单列表 */ @Override - public List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate, String status) { + public List getRequestForm(Long encounterId, String typeCode, String startDate, String endDate, String status, String keyword) { // 检查参数 if (encounterId == null) { return new java.util.ArrayList<>(); // 返回空列表而不是查询数据库 } - List requestFormList = requestFormManageAppMapper.getRequestForm(encounterId, typeCode, startDate, endDate, status); + List requestFormList = requestFormManageAppMapper.getRequestForm(encounterId, typeCode, startDate, endDate, status, keyword); for (RequestFormQueryDto requestFormQueryDto : requestFormList) { // 查询处方详情 List requestFormDetail = diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java index 0ff63615..f135ff44 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java @@ -84,6 +84,7 @@ public class RequestFormManageController { * @param startDate 开始日期(可选,格式:yyyy-MM-dd) * @param endDate 结束日期(可选,格式:yyyy-MM-dd) * @param status 单据状态(可选) + * @param keyword 关键字(可选,申请单号/检查项目名称模糊匹配) * @return 检查申请单 */ @GetMapping(value = "/get-check") @@ -91,11 +92,12 @@ public class RequestFormManageController { @RequestParam(required = false) Long encounterId, @RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate, - @RequestParam(required = false) String status) { + @RequestParam(required = false) String status, + @RequestParam(required = false) String keyword) { if (encounterId == null) { return R.fail("就诊ID不能为空"); } - return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.TEST.getCode(), startDate, endDate, status)); + return R.ok(iRequestFormManageAppService.getRequestForm(encounterId, ActivityDefCategory.TEST.getCode(), startDate, endDate, status, keyword)); } /** 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 540689d1..fd0b8da5 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 @@ -37,13 +37,15 @@ public interface RequestFormManageAppMapper { * @param startDate 开始日期(可选,格式:yyyy-MM-dd) * @param endDate 结束日期(可选,格式:yyyy-MM-dd) * @param status 单据状态(可选) + * @param keyword 关键字(可选,申请单号/检查项目名称模糊匹配) * @return 申请单列表 */ List getRequestForm(@Param("encounterId") Long encounterId, @Param("typeCode") String typeCode, @Param("startDate") String startDate, @Param("endDate") String endDate, - @Param("status") String status); + @Param("status") String status, + @Param("keyword") String keyword); /** * 查询申请单详情 diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml index a32de713..fa786303 100755 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml @@ -31,6 +31,16 @@ AND drf.status = #{status}::integer + + AND (drf.prescription_no LIKE CONCAT('%', #{keyword}, '%') + OR EXISTS ( + SELECT 1 FROM wor_service_request wsr_kw + LEFT JOIN wor_activity_definition wad_kw ON wad_kw.id = wsr_kw.activity_id + WHERE wsr_kw.prescription_no = drf.prescription_no + AND wsr_kw.delete_flag = '0' + AND wad_kw.name LIKE CONCAT('%', #{keyword}, '%') + )) + + + @@ -248,8 +250,9 @@ update order_main set status = #{status} where id = #{id} + - update order_main set status = 3, cancel_time = #{cancelTime}, cancel_reason = #{cancelReason} where id = #{id} + update order_main set status = 0, cancel_time = #{cancelTime}, cancel_reason = #{cancelReason} where id = #{id} diff --git a/openhis-ui-vue3/src/views/triageandqueuemanage/cardiology/index.vue b/openhis-ui-vue3/src/views/triageandqueuemanage/cardiology/index.vue index d9ead769..36810119 100755 --- a/openhis-ui-vue3/src/views/triageandqueuemanage/cardiology/index.vue +++ b/openhis-ui-vue3/src/views/triageandqueuemanage/cardiology/index.vue @@ -198,53 +198,52 @@ ↓ -
- - 只显示等待 - - - 显示全部状态 - -