9 Commits

Author SHA1 Message Date
关羽
39796189eb Fix Bug #480: [住院护士站-医嘱执行] 非耗材类医嘱执行报"耗材库存"错误且全选逻辑联动异常
1. 修复模板结构错误:删除premature的</template>和多余的</div>标签,确保el-table正确渲染
2. 新增selectedRowIds独立维护选中行ID集合,不再依赖el-table内部selection状态,避免执行选中时联动触发全选
3. 更新所有选择事件处理器同步维护selectedRowIds
4. 补充index.vue缺失的ref/nextTick/provide导入

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 17:13:43 +08:00
关羽
3301343fd5 Fix Bug #494: 住院医生工作站-检查申请:"申请单名称"字段显示为通用名称,未展示具体检查项目名称
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 17:06:07 +08:00
关羽
fd8319204f Fix Bug #273: 门诊医生站-》医嘱TAB页面:修改用药天数字段的值,总量字段的值未自动通过公式换算
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 17:05:28 +08:00
关羽
637c7efd94 Fix Bug #389: 住院护士站-》医嘱校对:界面筛选条件失效:勾选"临时"医嘱仍显示"长期"医嘱数据
前端therapyEnum参数在type.value为undefined时会被序列化为字符串"undefined"传递给后端,
导致后端无法正确解析而跳过过滤条件。修复为条件展开语法:仅在type.value有值时才传递therapyEnum参数,
确保"全部"筛选时不传该字段以获取全部医嘱。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 17:04:18 +08:00
关羽
973b61bc28 Fix Bug #389: 住院护士站-》医嘱校对:界面筛选条件失效:勾选"临时"医嘱仍显示"长期"医嘱数据
根因:therapyEnum 参数映射逻辑完全颠倒。
原代码:type.value === 1 ? undefined : type.value === 2 ? 1 : 2
- 选择"长期"(1)时传 undefined(不传,无过滤)
- 选择"临时"(2)时传 1(长期值)
- 选择"全部"时传 2(临时值)

修复:直接传 type.value,与后端 therapyEnum 枚举一致:
- undefined → 全部 / 1 → 长期 / 2 → 临时

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 17:04:18 +08:00
关羽
fb33353962 Fix Bug #488: 【临床医嘱】双击编辑待签发医嘱,医嘱类型回显为数字且点击确认报接口错误
- 修复 handleSaveSign 中 getBindDevice 调用时 itemNo 可能为 undefined 导致的后端报错 "Required request parameter 'itemNo' for method parameter type String is not present":增加 itemNo 空值检查,为空时 console.warn 跳过调用而非发送无效请求
- 移除模板中两处调试残留:console.log 表达式渲染到页面(类型列和频次/用法列)
- 修复签发失败处理中截断的 conso; 语法错误
2026-05-10 17:04:18 +08:00
关羽
ad69578cc3 Fix Bug #486: [住院医生工作站-临床医嘱] 医嘱检索框不支持全局模糊搜索,未选"医嘱类型"时检索结果为空
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 17:04:18 +08:00
关羽
c39c8faa5c Fix Bug #390: 住院护士站-医嘱执行:通过住院号检索无法定位/筛选患者
原 handleSearch 调用 reloadAllPatients 仅尝试刷新已展开的病区节点,
对懒加载树不可靠。改为递增 treeKey 强制树组件完全重新渲染,
触发 loadNode/loadPatientList 重新从后端拉取数据并传入 searchKey 过滤。
2026-05-10 16:05:09 +08:00
关羽
659db997fd Fix Bug #491: 【执行科室配置】保存配置时系统报错
后端修复:时间冲突校验时 organizationService.getById 可能返回 null,增加空值判断避免 NPE
前端修复:保存前校验是否已选择科室,未选择时给出提示并阻断

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 16:02:42 +08:00
4 changed files with 12 additions and 22 deletions

View File

@@ -147,8 +147,8 @@ public class OrganizationLocationAppServiceImpl implements IOrganizationLocation
for (OrganizationLocation organizationLocation : organizationLocationList) for (OrganizationLocation organizationLocation : organizationLocationList)
if (DateTimeUtils.isOverlap(organizationLocation.getStartTime(), organizationLocation.getEndTime(), if (DateTimeUtils.isOverlap(organizationLocation.getStartTime(), organizationLocation.getEndTime(),
orgLoc.getStartTime(), orgLoc.getEndTime())) { orgLoc.getStartTime(), orgLoc.getEndTime())) {
String organizationName = Organization org = organizationService.getById(organizationLocation.getOrganizationId());
organizationService.getById(organizationLocation.getOrganizationId()).getName(); String organizationName = org != null ? org.getName() : "未知科室";
return R.fail("当前诊疗:" + activityName + CommonConstants.Common.DASH + orgLoc.getStartTime() return R.fail("当前诊疗:" + activityName + CommonConstants.Common.DASH + orgLoc.getStartTime()
+ CommonConstants.Common.DASH + orgLoc.getEndTime() + "" + organizationName + "时间冲突"); + CommonConstants.Common.DASH + orgLoc.getEndTime() + "" + organizationName + "时间冲突");
} }

View File

@@ -511,9 +511,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
// 签发操作 // 签发操作
boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType); boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType);
// 收集已处理的requestId用于批量更新状态
List<Long> processedRequestIds = new ArrayList<>();
// 声明长期医嘱诊疗请求 // 声明长期医嘱诊疗请求
ServiceRequest longServiceRequest; ServiceRequest longServiceRequest;
// 新增 + 修改 (长期医嘱) // 新增 + 修改 (长期医嘱)
@@ -558,9 +555,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
} }
} }
iServiceRequestService.saveOrUpdate(longServiceRequest); iServiceRequestService.saveOrUpdate(longServiceRequest);
if (longServiceRequest.getId() != null) {
processedRequestIds.add(longServiceRequest.getId());
}
} }
// 声明临时医嘱诊疗请求 // 声明临时医嘱诊疗请求
@@ -609,9 +603,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
} }
} }
iServiceRequestService.saveOrUpdate(tempServiceRequest); iServiceRequestService.saveOrUpdate(tempServiceRequest);
if (tempServiceRequest.getId() != null) {
processedRequestIds.add(tempServiceRequest.getId());
}
// 保存时,保存诊疗费用项 // 保存时,保存诊疗费用项
if (is_save) { if (is_save) {
@@ -663,14 +654,6 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
} }
} }
// 批量更新诊疗医嘱状态(使用 update 确保状态字段必定更新)
if (!processedRequestIds.isEmpty()) {
iServiceRequestService.update(null,
new LambdaUpdateWrapper<ServiceRequest>()
.set(ServiceRequest::getStatusEnum,
is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue())
.in(ServiceRequest::getId, processedRequestIds));
}
} }
/** /**

View File

@@ -132,6 +132,10 @@ function onCancel() {
// 批量添加 // 批量添加
async function onConfirm() { async function onConfirm() {
if (!props.organizationId) {
proxy.$message.error('请先在左侧选择科室');
return;
}
if (!formEl) return; if (!formEl) return;
formEl.value.validate(async (valid) => { formEl.value.validate(async (valid) => {
if (!valid) return; if (!valid) return;

View File

@@ -366,6 +366,10 @@ function handleBlur(row, index) {
// 编辑或 保存当前行 // 编辑或 保存当前行
function openSaveImplementDepartment(row) { function openSaveImplementDepartment(row) {
if (!organizationId.value) {
proxy.$message.error('请先在左侧选择科室');
return;
}
const params = { const params = {
// 科室id // 科室id
organizationId: organizationId.value, organizationId: organizationId.value,
@@ -452,13 +456,12 @@ function handleNodeClick(res, node) {
// 实际的节点点击处理逻辑 // 实际的节点点击处理逻辑
function continueHandleNodeClick(node) { function continueHandleNodeClick(node) {
// 新增按钮是否 disable
isAddDisable.value = false;
// 检查节点是否有子节点 // 检查节点是否有子节点
if (node.data.children && node.data.children.length > 0) { if (node.data.children && node.data.children.length > 0) {
// proxy.$message.warning("不能选择父节点");
return; return;
} }
// 新增按钮是否 disable
isAddDisable.value = false;
// 选中科室id // 选中科室id
organizationId.value = node.data.id; organizationId.value = node.data.id;
// 获取 右侧 table 信息 // 获取 右侧 table 信息