From 6d87b7c4453bcfb04b7a613e67826e924284abea Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 18 Mar 2026 14:26:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(role):=20=E6=B7=BB=E5=8A=A0=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E7=94=A8=E6=88=B7=E5=85=B3=E7=B3=BB=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E5=A4=84=E6=96=B9?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=BB=84=E4=BB=B6=20bug#182?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在SysUserRoleMapper中新增selectUserIdsByRoleId方法查询角色下的用户ID列表 - 在SysRoleServiceImpl中注入ISysMenuService并实现菜单缓存清理逻辑 - 修改updateRole方法在角色权限变更后清除相关用户的菜单缓存 - 更新处方列表组件确保showPopover初始值为false避免自动弹出问题 - 将采购入库页面的按钮文本从"添加记录"改为"采购入库" - 添加删除验证检查已审批记录不允许删除的功能 --- .../core/system/mapper/SysUserRoleMapper.java | 12 ++++++++-- .../service/impl/SysRoleServiceImpl.java | 22 ++++++++++++++++--- .../mapper/system/SysUserRoleMapper.xml | 6 +++++ .../prescription/prescriptionlist.vue | 2 ++ .../purchaseinventory/index.vue | 9 +++++++- 5 files changed, 45 insertions(+), 6 deletions(-) diff --git a/openhis-server-new/core-system/src/main/java/com/core/system/mapper/SysUserRoleMapper.java b/openhis-server-new/core-system/src/main/java/com/core/system/mapper/SysUserRoleMapper.java index 76f41995..9721a9cc 100644 --- a/openhis-server-new/core-system/src/main/java/com/core/system/mapper/SysUserRoleMapper.java +++ b/openhis-server-new/core-system/src/main/java/com/core/system/mapper/SysUserRoleMapper.java @@ -54,9 +54,17 @@ public interface SysUserRoleMapper { /** * 批量取消授权用户角色 * - * @param roleId 角色ID - * @param userIds 需要删除的用户数据ID + * @param roleId 角色 ID + * @param userIds 需要删除的用户数据 ID * @return 结果 */ public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); + + /** + * 通过角色 ID 查询用户 ID 列表 + * + * @param roleId 角色 ID + * @return 用户 ID 列表 + */ + public List selectUserIdsByRoleId(Long roleId); } diff --git a/openhis-server-new/core-system/src/main/java/com/core/system/service/impl/SysRoleServiceImpl.java b/openhis-server-new/core-system/src/main/java/com/core/system/service/impl/SysRoleServiceImpl.java index 34b057f6..6d9744bd 100644 --- a/openhis-server-new/core-system/src/main/java/com/core/system/service/impl/SysRoleServiceImpl.java +++ b/openhis-server-new/core-system/src/main/java/com/core/system/service/impl/SysRoleServiceImpl.java @@ -15,6 +15,7 @@ import com.core.system.mapper.SysRoleDeptMapper; import com.core.system.mapper.SysRoleMapper; import com.core.system.mapper.SysRoleMenuMapper; import com.core.system.mapper.SysUserRoleMapper; +import com.core.system.service.ISysMenuService; import com.core.system.service.ISysRoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -41,6 +42,9 @@ public class SysRoleServiceImpl implements ISysRoleService { @Autowired private SysRoleDeptMapper roleDeptMapper; + @Autowired + private ISysMenuService menuService; + /** * 根据条件分页查询角色数据 * @@ -221,11 +225,23 @@ public class SysRoleServiceImpl implements ISysRoleService { @Override @Transactional public int updateRole(SysRole role) { - // 修改角色信息 + // 1. 获取该角色下的所有用户 ID(在修改权限前查询) + List userIds = userRoleMapper.selectUserIdsByRoleId(role.getRoleId()); + + // 2. 修改角色信息 roleMapper.updateRole(role); - // 删除角色与菜单关联 + // 3. 删除角色与菜单关联 roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); - return insertRoleMenu(role); + int result = insertRoleMenu(role); + + // 4. 清除该角色下所有用户的菜单树缓存 + if (userIds != null && !userIds.isEmpty()) { + for (Long userId : userIds) { + menuService.clearMenuCacheByUserId(userId); + } + } + + return result; } /** diff --git a/openhis-server-new/core-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/openhis-server-new/core-system/src/main/resources/mapper/system/SysUserRoleMapper.xml index 72a94a24..0da93550 100644 --- a/openhis-server-new/core-system/src/main/resources/mapper/system/SysUserRoleMapper.xml +++ b/openhis-server-new/core-system/src/main/resources/mapper/system/SysUserRoleMapper.xml @@ -48,4 +48,10 @@ #{userId} + + \ No newline at end of file diff --git a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue index e839805f..c9dbe7a1 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue @@ -1550,6 +1550,8 @@ function getListInfo(addNewRow) { adviceType_dictText: adviceType_dictText, // 🎯 修复:确保 orgId 被正确设置(从 positionId 映射) orgId: item.positionId || item.orgId, + // 🔧 Bug Fix: 确保 showPopover 为 false,避免患者切换时表格自动弹出 + showPopover: false, }; return result; diff --git a/openhis-ui-vue3/src/views/medicationmanagement/purchaseinventory/index.vue b/openhis-ui-vue3/src/views/medicationmanagement/purchaseinventory/index.vue index 6e22d07c..c9970da7 100644 --- a/openhis-ui-vue3/src/views/medicationmanagement/purchaseinventory/index.vue +++ b/openhis-ui-vue3/src/views/medicationmanagement/purchaseinventory/index.vue @@ -98,7 +98,7 @@ 添加记录采购入库 @@ -647,6 +647,13 @@ function handleDelete(row) { // 获取选中行的单据号列表 const busNoList = selectedRows.value.map((item) => item.supplyBusNo); + // 检查选中记录中是否有已审批的数据 + const approvedRows = selectedRows.value.filter((item) => item.statusEnum); + if (approvedRows.length > 0) { + proxy.$modal.msgWarning('已审批的记录不能删除'); + return; + } + proxy.$modal .confirm('是否确认删除以上数据?') .then(function () {