Fix Bug #487: 【临床医嘱】诊疗类医嘱签发后,列表状态未实时刷新为"已签发"
根因分析:诊疗类(活动)医嘱签发时,后端handService()的批量状态更新 未区分签发/保存场景,导致statusEnum字段在签发时可能未被正确更新为 ACTIVE(2);前端依赖后端刷新,缺乏乐观更新机制。 修复方案: - 前端:签发成功后立即将saveList中对应医嘱的statusEnum设为2(乐观更新), 再执行getListInfo从后端刷新 - 后端:handService()中分离签发/保存的批量更新逻辑,签发时显式设置 statusEnum=ACTIVE、authoredTime和signCode,并添加日志 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -710,11 +710,21 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
|
||||
|
||||
// 批量更新诊疗医嘱状态(使用 update 确保状态字段必定更新)
|
||||
if (!processedRequestIds.isEmpty()) {
|
||||
// 🔧 Bug #487 修复:签发时额外设置 authoredTime,确保签发时间被记录
|
||||
if (is_sign) {
|
||||
iServiceRequestService.update(null,
|
||||
new LambdaUpdateWrapper<ServiceRequest>()
|
||||
.set(ServiceRequest::getStatusEnum,
|
||||
is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue())
|
||||
.set(ServiceRequest::getStatusEnum, RequestStatus.ACTIVE.getValue())
|
||||
.set(ServiceRequest::getAuthoredTime, authoredTime)
|
||||
.set(ServiceRequest::getSignCode, signCode)
|
||||
.in(ServiceRequest::getId, processedRequestIds));
|
||||
log.info("签发诊疗医嘱成功,requestIds: {}, signCode: {}", processedRequestIds, signCode);
|
||||
} else {
|
||||
iServiceRequestService.update(null,
|
||||
new LambdaUpdateWrapper<ServiceRequest>()
|
||||
.set(ServiceRequest::getStatusEnum, RequestStatus.DRAFT.getValue())
|
||||
.in(ServiceRequest::getId, processedRequestIds));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1241,6 +1241,13 @@ function handleSave() {
|
||||
if (res.code === 200) {
|
||||
proxy.$modal.msgSuccess('签发成功');
|
||||
isSaving.value = false;
|
||||
// 乐观更新:立即将已签发医嘱的状态设为"已签发",确保列表实时刷新
|
||||
saveList.forEach((item) => {
|
||||
const row = prescriptionList.value.find((r) => r.requestId && r.requestId === item.requestId);
|
||||
if (row) {
|
||||
row.statusEnum = 2;
|
||||
}
|
||||
});
|
||||
getListInfo(false);
|
||||
bindMethod.value = {};
|
||||
nextId.value = 1;
|
||||
|
||||
Reference in New Issue
Block a user