From ad69472aab1fce4596f16930add35d620c673fa8 Mon Sep 17 00:00:00 2001 From: chenchuchuan <13554600537@163.com> Date: Fri, 18 Sep 2026 14:31:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(role-form-button):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E8=A1=A8=E5=8D=95=E6=8C=89=E9=92=AE=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 listAllFormButtons 方法支持按页面名称模糊查询 - 调整分页逻辑为按页面维度分页,每页包含页面下全部表单 - 更新方法签名添加 pageName 参数并调整参数顺序 - 实现页面到表单的两层嵌套数据结构返回 - 重构 OnlinePageService 查询方法支持页面名称模糊筛选 - 完善租户和应用代码的隔离条件处理 --- .../controller/RoleFormButtonController.java | 18 +++++---- .../online/service/IRoleFormButtonService.java | 16 ++++---- .../common/online/service/OnlinePageService.java | 8 ++++ .../online/service/impl/OnlinePageServiceImpl.java | 22 +++++++++- .../service/impl/RoleFormButtonServiceImpl.java | 47 +++++++++++++--------- 5 files changed, 77 insertions(+), 34 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 b296b8f..2179a71 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 @@ -83,21 +83,23 @@ public class RoleFormButtonController { } /** - * 分页查询所有在线表单下的所有按钮。 - * 遍历全部在线表单,从每个表单的 widgetJson 中提取已开启的按钮。 - * 如果传了 roleId,则只返回该角色已配置的表单,并合并已保存的勾选状态。 + * 分页查询所有页面下的所有在线表单按钮(两层结构:页面 → 表单 → 按钮)。 + * 分页维度为「页面」,从每个表单的 widgetJson 中提取已开启的按钮。 + * 如果传了 roleId,则合并该角色已保存的勾选状态。 * - * @param roleId 角色ID(可选,用于过滤已配置的表单)。 - * @param orderParam 排序参数。 - * @param pageParam 分页参数。 - * @return 分页结果,每个元素包含 formId, formName, buttonList[{name, checked}]。 + * @param roleId 角色ID(可选,用于回显勾选状态)。 + * @param pageName 页面名称关键字(可选,模糊匹配)。 + * @param orderParam 排序参数,作用于页面下的表单。 + * @param pageParam 分页参数,作用于页面。 + * @return 分页结果,每个元素包含 pageName, formList[{formId, formName, buttonList[{name, checked}]}]。 */ @PostMapping("/listAllFormButtons") public ResponseResult>> listAllFormButtons( @MyRequestBody Long roleId, + @MyRequestBody String pageName, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { - return ResponseResult.success(service.listAllFormButtons(roleId, orderParam, pageParam)); + return ResponseResult.success(service.listAllFormButtons(roleId, pageName, orderParam, pageParam)); } /** diff --git a/common/common-online/src/main/java/apelet/common/online/service/IRoleFormButtonService.java b/common/common-online/src/main/java/apelet/common/online/service/IRoleFormButtonService.java index a2d3d19..be9ae7e 100644 --- a/common/common-online/src/main/java/apelet/common/online/service/IRoleFormButtonService.java +++ b/common/common-online/src/main/java/apelet/common/online/service/IRoleFormButtonService.java @@ -72,13 +72,15 @@ public interface IRoleFormButtonService /** * 分页查询所有在线表单下的所有按钮。 - * 遍历全部在线表单,从每个表单的 widgetJson 中提取已开启的按钮。 - * 如果传了 roleId,则只返回该角色已配置的表单,并合并已保存的勾选状态。 + * 分页查询所有页面下的所有在线表单按钮(两层结构:页面 → 表单 → 按钮)。 + * 分页维度为「页面」,每个页面下携带其全部表单,表单从 widgetJson 中提取已开启的按钮。 + * 如果传了 roleId,则合并该角色已保存的勾选状态。 * - * @param roleId 角色ID(可选,用于过滤已配置的表单)。 - * @param orderParam 排序参数。 - * @param pageParam 分页参数。 - * @return 分页结果,每个元素包含 formId, formName, buttonList[{name, checked}]。 + * @param roleId 角色ID(可选,用于回显勾选状态)。 + * @param pageName 页面名称关键字(可选,模糊匹配)。 + * @param orderParam 排序参数,作用于页面下的表单。 + * @param pageParam 分页参数,作用于页面。 + * @return 分页结果,每个元素包含 pageName, formList[{formId, formName, buttonList[{name, checked}]}]。 */ - MyPageData> listAllFormButtons(Long roleId, MyOrderParam orderParam, MyPageParam pageParam); + MyPageData> listAllFormButtons(Long roleId, String pageName, MyOrderParam orderParam, MyPageParam pageParam); } diff --git a/common/common-online/src/main/java/apelet/common/online/service/OnlinePageService.java b/common/common-online/src/main/java/apelet/common/online/service/OnlinePageService.java index 0d174d7..738d0cc 100644 --- a/common/common-online/src/main/java/apelet/common/online/service/OnlinePageService.java +++ b/common/common-online/src/main/java/apelet/common/online/service/OnlinePageService.java @@ -142,4 +142,12 @@ public interface OnlinePageService extends IBaseService { * @return 在线表单页面列表。 */ List queryByEnableList(); + + /** + * 查询启用的在线表单页面列表,可按页面名称模糊筛选。 + * + * @param pageName 页面名称关键字(可选,模糊匹配)。 + * @return 在线表单页面列表。 + */ + List queryByEnableList(String pageName); } diff --git a/common/common-online/src/main/java/apelet/common/online/service/impl/OnlinePageServiceImpl.java b/common/common-online/src/main/java/apelet/common/online/service/impl/OnlinePageServiceImpl.java index 8cdb125..d9a4b3c 100644 --- a/common/common-online/src/main/java/apelet/common/online/service/impl/OnlinePageServiceImpl.java +++ b/common/common-online/src/main/java/apelet/common/online/service/impl/OnlinePageServiceImpl.java @@ -303,6 +303,26 @@ public class OnlinePageServiceImpl extends BaseService impleme @Override public List queryByEnableList() { - return onlinePageMapper.selectList(new LambdaQueryWrapper().eq(OnlinePage::getPublished, true)); + return this.queryByEnableList(null); + } + + @Override + public List queryByEnableList(String pageName) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OnlinePage::getPublished, true); + if (StrUtil.isNotBlank(pageName)) { + queryWrapper.like(OnlinePage::getPageName, pageName); + } + // 租户/应用隔离:当前请求有值才带条件,为空(无租户上下文的调用)则不限制 + TokenData tokenData = TokenData.takeFromRequest(); + if (tokenData != null) { + if (tokenData.getTenantId() != null) { + queryWrapper.eq(OnlinePage::getTenantId, tokenData.getTenantId()); + } + if (StrUtil.isNotBlank(tokenData.getAppCode())) { + queryWrapper.eq(OnlinePage::getAppCode, tokenData.getAppCode()); + } + } + return onlinePageMapper.selectList(queryWrapper); } } 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 874f779..59733e0 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 @@ -224,23 +224,27 @@ public class RoleFormButtonServiceImpl extends BaseService } @Override - public MyPageData> listAllFormButtons(Long roleId, MyOrderParam orderParam, MyPageParam pageParam) { - // 1. 查询已发布的 page(不分页,获取全量) - List pageList = onlinePageService.queryByEnableList(); + public MyPageData> listAllFormButtons(Long roleId, String pageName, MyOrderParam orderParam, MyPageParam pageParam) { + // 1. 分页查询已发布页面(分页维度为「页面」,可按页面名称模糊筛选) + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List pageList = onlinePageService.queryByEnableList(pageName); if (CollectionUtil.isEmpty(pageList)) { return new MyPageData<>(Collections.emptyList(), 0L); } + long total = pageList instanceof Page ? ((Page) pageList).getTotal() : pageList.size(); Set pageIdSet = pageList.stream().map(OnlinePage::getPageId).collect(Collectors.toSet()); - // 2. 分页查询 OnlineForm - if (pageParam != null) { - PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } + // 2. 查询这些页面下的全部表单(不再分页),按页面分组 String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineForm.class); OnlineForm onlineForm = new OnlineForm(); onlineForm.setPageIdSet(pageIdSet); List formList = onlineFormService.getOnlineFormList(onlineForm, orderBy); - long total = formList instanceof Page ? ((Page) formList).getTotal() : formList.size(); + Map> formMapByPageId = new HashMap<>(); + for (OnlineForm form : formList) { + formMapByPageId.computeIfAbsent(form.getPageId(), k -> new ArrayList<>()).add(form); + } // 3. 如果传了 roleId,查询 RoleFormButton 获取勾选状态 Map> formCheckedMap = Collections.emptyMap(); @@ -254,19 +258,26 @@ public class RoleFormButtonServiceImpl extends BaseService } } - // 4. 构建结果 + // 4. 按页面组装两层结构:页面 → 表单 → 按钮 List> result = new ArrayList<>(); - for (OnlineForm form : formList) { - List buttons = - WidgetJsonButtonParser.extractEnabledButtons(form.getWidgetJson()); - Map item = getButtonResult(form, buttons); - if (roleId != null) { - Set checkedNames = formCheckedMap.get(form.getFormId()); - if (CollectionUtil.isNotEmpty(checkedNames)) { - applyCheckedStatus(item, checkedNames); + for (OnlinePage page : pageList) { + Map pageItem = new HashMap<>(); + pageItem.put("pageName", page.getPageName()); + List> formItemList = new ArrayList<>(); + for (OnlineForm form : formMapByPageId.getOrDefault(page.getPageId(), Collections.emptyList())) { + List buttons = + WidgetJsonButtonParser.extractEnabledButtons(form.getWidgetJson()); + Map formItem = getButtonResult(form, buttons); + if (roleId != null) { + Set checkedNames = formCheckedMap.get(form.getFormId()); + if (CollectionUtil.isNotEmpty(checkedNames)) { + applyCheckedStatus(formItem, checkedNames); + } } + formItemList.add(formItem); } - result.add(item); + pageItem.put("formList", formItemList); + result.add(pageItem); } return new MyPageData<>(result, total); }