diff --git a/common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java b/common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java index 64322ae..b296b8f 100644 --- a/common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java +++ b/common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java @@ -1,6 +1,7 @@ package apelet.common.online.controller; import apelet.common.core.annotation.MyRequestBody; +import apelet.common.core.annotation.NoAuthInterface; import apelet.common.core.constant.ErrorCodeEnum; import apelet.common.core.object.*; import apelet.common.core.util.MyCommonUtil; @@ -39,6 +40,7 @@ public class RoleFormButtonController { * @return 包含 formId, buttonList[{name, checked}]。 */ @GetMapping("/getButtonConfig") + @NoAuthInterface public ResponseResult>> getButtonConfig(@RequestParam(required = false) Long formId) { return ResponseResult.success(service.getButtonConfigVo(formId)); } diff --git a/common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java b/common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java index 0cb2da4..874f779 100644 --- a/common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java +++ b/common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java @@ -66,27 +66,32 @@ public class RoleFormButtonServiceImpl extends BaseService // ========== 核心:查询按钮配置VO(合并当前用户所有角色) ========== @Override public Map> getButtonConfigVo(Long formId) { - // 1. 获取当前登录用户的所有角色 - Set roleIds = getCurrentUserRoleIds(); + try { + // 1. 获取当前登录用户的所有角色 + Set roleIds = getCurrentUserRoleIds(); // Set roleIds = CollectionUtil.newHashSet(2080534691714174976L, 1694263314487447643L); - if (CollectionUtil.isEmpty(roleIds)) { - return Collections.emptyMap(); - } - List roleFormButtonList = mapper.selectList(new LambdaQueryWrapper().in(RoleFormButton::getRoleId, roleIds)); - if (CollectionUtil.isEmpty(roleFormButtonList)) { - return Collections.emptyMap(); - } - // 2. 遍历所有角色,合并各角色在该表单的勾选按钮(取并集) - Map> roleCheckedNamesMap = new HashMap<>(); - for (RoleFormButton roleFormButton : roleFormButtonList) { - if (StringUtils.isBlank(roleFormButton.getButtonConfig())) { - continue; + if (CollectionUtil.isEmpty(roleIds)) { + return buildEmptyResultForAllForms(); + } + List roleFormButtonList = mapper.selectList(new LambdaQueryWrapper().in(RoleFormButton::getRoleId, roleIds)); + if (CollectionUtil.isEmpty(roleFormButtonList)) { + return buildEmptyResultForAllForms(); + } + // 2. 遍历所有角色,合并各角色在该表单的勾选按钮(取并集) + Map> roleCheckedNamesMap = new HashMap<>(); + for (RoleFormButton roleFormButton : roleFormButtonList) { + if (StringUtils.isBlank(roleFormButton.getButtonConfig())) { + continue; + } + List buttonInfoList = JSON.parseArray(roleFormButton.getButtonConfig(), WidgetJsonButtonParser.ButtonInfo.class); + Set checkedNames = buttonInfoList.stream().filter(btn -> btn.getEnabled() != null && btn.getEnabled()).map(WidgetJsonButtonParser.ButtonInfo::getName).collect(Collectors.toSet()); + roleCheckedNamesMap.computeIfAbsent(Long.toString(roleFormButton.getFormId()), k -> new HashSet<>()).addAll(checkedNames); } - List buttonInfoList = JSON.parseArray(roleFormButton.getButtonConfig(), WidgetJsonButtonParser.ButtonInfo.class); - Set checkedNames = buttonInfoList.stream().filter(btn -> btn.getEnabled() != null && btn.getEnabled()).map(WidgetJsonButtonParser.ButtonInfo::getName).collect(Collectors.toSet()); - roleCheckedNamesMap.computeIfAbsent(Long.toString(roleFormButton.getFormId()), k -> new HashSet<>()).addAll(checkedNames); + return roleCheckedNamesMap; + } catch (Exception e) { + log.error("获取按钮配置失败", e); } - return roleCheckedNamesMap; + return buildEmptyResultForAllForms(); } /** @@ -100,6 +105,26 @@ public class RoleFormButtonServiceImpl extends BaseService return StrUtil.split(tokenData.getRoleIds(), ',').stream().map(Long::valueOf).collect(Collectors.toSet()); } + /** + * 构建空结果 Map:查询所有已发布在线表单中有按钮的 formId,value 均为空 Set。 + * 确保前端在没有角色按钮权限配置时仍能拿到完整的 formId key 列表。 + */ + private Map> buildEmptyResultForAllForms() { + Map> result = new HashMap<>(); + List pageList = onlinePageService.queryByEnableList(); + if (CollectionUtil.isEmpty(pageList)) { + return result; + } + Set pageIdSet = pageList.stream().map(OnlinePage::getPageId).collect(Collectors.toSet()); + OnlineForm filter = new OnlineForm(); + filter.setPageIdSet(pageIdSet); + List formList = onlineFormService.getOnlineFormList(filter, null); + for (OnlineForm form : formList) { + result.put(form.getFormId().toString(), Collections.emptySet()); + } + return result; + } + // ========== 核心:批量保存按钮配置(事务) ========== @Override @Transactional(rollbackFor = Exception.class)