From e8e7cbd588d8f5585edac01373c7b12f8c54cab3 Mon Sep 17 00:00:00 2001 From: chenchuchuan <13554600537@163.com> Date: Thu, 30 Jul 2026 17:04:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(button):=20=E8=A7=A3=E5=86=B3=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E9=85=8D=E7=BD=AE=E6=8E=A5=E5=8F=A3=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=92=8C=E7=A9=BA=E5=80=BC=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 getButtonConfig 接口添加 @NoAuthInterface 注解以允许匿名访问 - 在 getButtonConfigVo 方法中添加异常捕获机制防止运行时错误 - 实现 buildEmptyResultForAllForms 方法构建完整的表单ID键列表 - 当用户无角色权限时返回所有已发布在线表单的空按钮配置 - 确保前端能够获取完整的 formId 列表而不会因权限问题缺失数据 --- .../controller/RoleFormButtonController.java | 2 + .../service/impl/RoleFormButtonServiceImpl.java | 61 +++++++++++++++------- 2 files changed, 45 insertions(+), 18 deletions(-) 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)