diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/INursingRecordAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/INursingRecordAppService.java index 1fb00ba35..670a371c3 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/INursingRecordAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/INursingRecordAppService.java @@ -1,10 +1,12 @@ package com.healthlink.his.web.inpatientmanage.appservice; import com.core.common.core.domain.R; +import com.healthlink.his.web.inpatientmanage.dto.BatchNursingRecordDto; import com.healthlink.his.web.inpatientmanage.dto.NursingEmrTemplateDto; import com.healthlink.his.web.inpatientmanage.dto.NursingRecordDto; import com.healthlink.his.web.inpatientmanage.dto.NursingSearchParam; + import jakarta.servlet.http.HttpServletRequest; import java.util.List; @@ -100,4 +102,13 @@ public interface INursingRecordAppService { */ R updateEmrTemplate(NursingEmrTemplateDto emrTemplateDto); + /** + * 批量保存护理记录单 + * + * @param batchDto 批量入参 + * @return 结果 + */ + R batchSaveRecord(BatchNursingRecordDto batchDto); + } + diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java index 3e869ac39..a983ea8a6 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/appservice/impl/NursingRecordAppServiceImpl.java @@ -399,4 +399,77 @@ public class NursingRecordAppServiceImpl implements INursingRecordAppService { return emrTemplateService.updateById(emrTemplate) ? R.ok() : R.fail(); } + /** + * 批量保存/更新/删除护理记录 + * + * @param batchDto 批量提交数据包 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R batchSaveRecord(BatchNursingRecordDto batchDto) { + Long recorderId = SecurityUtils.getLoginUser().getPractitionerId(); + java.util.Map tempIdToRealIdMap = new java.util.HashMap<>(); + + // 1. 处理待删除记录 (物理删除记录及体征表对应数据) + if (batchDto.getDeleted() != null && !batchDto.getDeleted().isEmpty()) { + this.delRecord(batchDto.getDeleted()); + } + + // 2. 处理待插入新建记录 + if (batchDto.getInserted() != null && !batchDto.getInserted().isEmpty()) { + for (NursingRecordDto dto : batchDto.getInserted()) { + Emr emr = new Emr(); + emr.setEncounterId(dto.getEncounterId()) + .setPatientId(dto.getPatientId()) + .setRecordId(recorderId) + .setRecordTime(dto.getRecordingTime()) + .setClassEnum(1) + .setContextJson(dto.getContextJson()); + + emrService.save(emr); + + // 保存生成的真实主键,用于返回给前端重置 + if (dto.getTempId() != null && !dto.getTempId().isEmpty()) { + tempIdToRealIdMap.put(dto.getTempId(), emr.getId()); + } + + // 判断是否联动更新体征表 + if (Boolean.TRUE.equals(dto.getVitalSignsSyncFlag())) { + this.vitalSigns(dto, recorderId); + } + } + } + + // 3. 处理待更新已有记录 + if (batchDto.getUpdated() != null && !batchDto.getUpdated().isEmpty()) { + for (NursingRecordDto dto : batchDto.getUpdated()) { + Emr emr = new Emr(); + emr.setId(dto.getRecordId()) + .setEncounterId(dto.getEncounterId()) + .setPatientId(dto.getPatientId()) + .setRecordId(recorderId) + .setRecordTime(dto.getRecordingTime()) + .setClassEnum(1) + .setContextJson(dto.getContextJson()); + + emrService.updateById(emr); + + // 联动体征处理 + if (Boolean.TRUE.equals(dto.getVitalSignsSyncFlag())) { + this.vitalSigns(dto, recorderId); + } else { + this.deleteVitalSigns(dto); + } + } + } + + // 组装返回映射表 + java.util.Map resultMap = new java.util.HashMap<>(); + resultMap.put("tempIdToRealIdMap", tempIdToRealIdMap); + + return R.ok(resultMap, "批量护理记录保存成功!"); + } + } + diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/controller/NursingRecordController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/controller/NursingRecordController.java index 37f3617e7..e59588dba 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/controller/NursingRecordController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/controller/NursingRecordController.java @@ -2,9 +2,11 @@ package com.healthlink.his.web.inpatientmanage.controller; import com.core.common.core.domain.R; import com.healthlink.his.web.inpatientmanage.appservice.INursingRecordAppService; +import com.healthlink.his.web.inpatientmanage.dto.BatchNursingRecordDto; import com.healthlink.his.web.inpatientmanage.dto.NursingEmrTemplateDto; import com.healthlink.his.web.inpatientmanage.dto.NursingRecordDto; import com.healthlink.his.web.inpatientmanage.dto.NursingSearchParam; + import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -144,4 +146,16 @@ public class NursingRecordController { return nursingRecordAppService.updateEmrTemplate(emrTemplateDto); } + /** + * 批量保存/更新/删除护理记录 + * + * @param batchDto 批量提交数据包 + * @return 结果 + */ + @PostMapping("/batch-save") + public R batchSaveRecord(@Validated @RequestBody BatchNursingRecordDto batchDto) { + return nursingRecordAppService.batchSaveRecord(batchDto); + } + } + diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/dto/BatchNursingRecordDto.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/dto/BatchNursingRecordDto.java new file mode 100644 index 000000000..7d5a643f9 --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/dto/BatchNursingRecordDto.java @@ -0,0 +1,29 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.healthlink.his.web.inpatientmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import java.util.List; + +/** + * 护理记录批量提交包装 DTO + * + * @author Antigravity AI + * @date 2026-06-16 + */ +@Data +@Accessors(chain = true) +public class BatchNursingRecordDto { + + /** 待保存/新建的护理记录列表 */ + private List inserted; + + /** 待更新的护理记录列表 */ + private List updated; + + /** 待删除的护理记录列表 */ + private List deleted; + +} diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/dto/NursingRecordDto.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/dto/NursingRecordDto.java index 4ba8038ad..c452e68c1 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/dto/NursingRecordDto.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inpatientmanage/dto/NursingRecordDto.java @@ -50,4 +50,8 @@ public class NursingRecordDto { /** 是否同步到体温单 */ private Boolean vitalSignsSyncFlag; + /** 前端临时ID映射标识 */ + private String tempId; + } + diff --git a/healthlink-his-ui/package.json b/healthlink-his-ui/package.json index 9917217c1..3a2ac93ba 100755 --- a/healthlink-his-ui/package.json +++ b/healthlink-his-ui/package.json @@ -32,6 +32,7 @@ "@vue/shared": "^3.5.25", "@vueup/vue-quill": "^1.5.1", "@vueuse/core": "^14.3.0", + "@vxe-ui/plugin-render-element": "^4.4.0", "axios": "^1.16.1", "china-division": "^2.7.0", "cornerstone-core": "^2.6.1", diff --git a/healthlink-his-ui/src/components/TableLayout/EditableTable.vue b/healthlink-his-ui/src/components/TableLayout/EditableTable.vue index 7f28b7f43..d0f513186 100755 --- a/healthlink-his-ui/src/components/TableLayout/EditableTable.vue +++ b/healthlink-his-ui/src/components/TableLayout/EditableTable.vue @@ -44,7 +44,7 @@ :row-config="{ keyField: '_etKey' }" :scroll-x="{ enabled: true }" :scroll-y="{ enabled: true }" - :show-overflow="true" + show-overflow="title" v-bind="$attrs" @checkbox-change="handleSelectionChange" @checkbox-all="handleSelectionChange" diff --git a/healthlink-his-ui/src/main.js b/healthlink-his-ui/src/main.js index 3533eb4c3..2fdbfbf3d 100755 --- a/healthlink-his-ui/src/main.js +++ b/healthlink-his-ui/src/main.js @@ -2,6 +2,7 @@ import {createApp, nextTick} from 'vue'; import VxeUIAll from 'vxe-table'; import 'vxe-table/lib/style.css'; +import { VxeTooltip } from 'vxe-pc-ui'; import Cookies from 'js-cookie'; // 导入 hiprint 并挂载到全局 window 对象 @@ -121,6 +122,11 @@ app.use(ElementPlus, { // 支持 large、default、small size: Cookies.get('size') || 'default', }); +// Register vxe-tooltip component required by vxe-table v4 for show-overflow="title" +VxeUIAll.VxeUI.component(VxeTooltip); +// Register element-plus render plugin for declarative editRender (ElSelect, ElInput etc.) +import VXETablePluginRenderElement from '@vxe-ui/plugin-render-element'; +VxeUIAll.VxeUI.use(VXETablePluginRenderElement); app.use(VxeUIAll); // 导入公告帮助工具 diff --git a/healthlink-his-ui/src/views/appoinmentmanage/clinicRoom/index.vue b/healthlink-his-ui/src/views/appoinmentmanage/clinicRoom/index.vue index 5022784a0..8f2ff887b 100755 --- a/healthlink-his-ui/src/views/appoinmentmanage/clinicRoom/index.vue +++ b/healthlink-his-ui/src/views/appoinmentmanage/clinicRoom/index.vue @@ -84,7 +84,7 @@ title="卫生机构" width="200" align="center" - show-overflow + show-overflow="title" >