Browse Source

feat(role-form-button): 更新在线表单按钮权限管理接口

- 修改 listAllFormButtons 方法支持按页面名称模糊查询
- 调整分页逻辑为按页面维度分页,每页包含页面下全部表单
- 更新方法签名添加 pageName 参数并调整参数顺序
- 实现页面到表单的两层嵌套数据结构返回
- 重构 OnlinePageService 查询方法支持页面名称模糊筛选
- 完善租户和应用代码的隔离条件处理
feature/2026-08/0812-ccc-dev
chenchuchuan 15 hours ago
parent
commit
ad69472aab
  1. 18
      common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java
  2. 16
      common/common-online/src/main/java/apelet/common/online/service/IRoleFormButtonService.java
  3. 8
      common/common-online/src/main/java/apelet/common/online/service/OnlinePageService.java
  4. 22
      common/common-online/src/main/java/apelet/common/online/service/impl/OnlinePageServiceImpl.java
  5. 37
      common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java

18
common/common-online/src/main/java/apelet/common/online/controller/RoleFormButtonController.java

@ -83,21 +83,23 @@ public class RoleFormButtonController {
} }
/** /**
* 分页查询所有在线表单下的所有按钮 * 分页查询所有页面下的所有在线表单按钮两层结构页面 表单 按钮
* 遍历全部在线表单从每个表单的 widgetJson 中提取已开启的按钮 * 分页维度为页面从每个表单的 widgetJson 中提取已开启的按钮
* 如果传了 roleId只返回该角色已配置的表单并合并已保存的勾选状态 * 如果传了 roleId合并该角色已保存的勾选状态
* *
* @param roleId 角色ID可选用于过滤已配置的表单 * @param roleId 角色ID可选用于回显勾选状态
* @param orderParam 排序参数 * @param pageName 页面名称关键字可选模糊匹配
* @param pageParam 分页参数 * @param orderParam 排序参数作用于页面下的表单
* @return 分页结果每个元素包含 formId, formName, buttonList[{name, checked}] * @param pageParam 分页参数作用于页面
* @return 分页结果每个元素包含 pageName, formList[{formId, formName, buttonList[{name, checked}]}]
*/ */
@PostMapping("/listAllFormButtons") @PostMapping("/listAllFormButtons")
public ResponseResult<MyPageData<Map<String, Object>>> listAllFormButtons( public ResponseResult<MyPageData<Map<String, Object>>> listAllFormButtons(
@MyRequestBody Long roleId, @MyRequestBody Long roleId,
@MyRequestBody String pageName,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
return ResponseResult.success(service.listAllFormButtons(roleId, orderParam, pageParam)); return ResponseResult.success(service.listAllFormButtons(roleId, pageName, orderParam, pageParam));
} }
/** /**

16
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 roleId 角色ID可选用于回显勾选状态
* @param orderParam 排序参数 * @param pageName 页面名称关键字可选模糊匹配
* @param pageParam 分页参数 * @param orderParam 排序参数作用于页面下的表单
* @return 分页结果每个元素包含 formId, formName, buttonList[{name, checked}] * @param pageParam 分页参数作用于页面
* @return 分页结果每个元素包含 pageName, formList[{formId, formName, buttonList[{name, checked}]}]
*/ */
MyPageData<Map<String, Object>> listAllFormButtons(Long roleId, MyOrderParam orderParam, MyPageParam pageParam); MyPageData<Map<String, Object>> listAllFormButtons(Long roleId, String pageName, MyOrderParam orderParam, MyPageParam pageParam);
} }

8
common/common-online/src/main/java/apelet/common/online/service/OnlinePageService.java

@ -142,4 +142,12 @@ public interface OnlinePageService extends IBaseService<OnlinePage, Long> {
* @return 在线表单页面列表 * @return 在线表单页面列表
*/ */
List<OnlinePage> queryByEnableList(); List<OnlinePage> queryByEnableList();
/**
* 查询启用的在线表单页面列表可按页面名称模糊筛选
*
* @param pageName 页面名称关键字可选模糊匹配
* @return 在线表单页面列表
*/
List<OnlinePage> queryByEnableList(String pageName);
} }

22
common/common-online/src/main/java/apelet/common/online/service/impl/OnlinePageServiceImpl.java

@ -303,6 +303,26 @@ public class OnlinePageServiceImpl extends BaseService<OnlinePage, Long> impleme
@Override @Override
public List<OnlinePage> queryByEnableList() { public List<OnlinePage> queryByEnableList() {
return onlinePageMapper.selectList(new LambdaQueryWrapper<OnlinePage>().eq(OnlinePage::getPublished, true)); return this.queryByEnableList(null);
}
@Override
public List<OnlinePage> queryByEnableList(String pageName) {
LambdaQueryWrapper<OnlinePage> 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);
} }
} }

37
common/common-online/src/main/java/apelet/common/online/service/impl/RoleFormButtonServiceImpl.java

@ -224,23 +224,27 @@ public class RoleFormButtonServiceImpl extends BaseService<RoleFormButton, Long>
} }
@Override @Override
public MyPageData<Map<String, Object>> listAllFormButtons(Long roleId, MyOrderParam orderParam, MyPageParam pageParam) { public MyPageData<Map<String, Object>> listAllFormButtons(Long roleId, String pageName, MyOrderParam orderParam, MyPageParam pageParam) {
// 1. 查询已发布的 page(不分页,获取全量) // 1. 分页查询已发布页面(分页维度为「页面」,可按页面名称模糊筛选)
List<OnlinePage> pageList = onlinePageService.queryByEnableList(); if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<OnlinePage> pageList = onlinePageService.queryByEnableList(pageName);
if (CollectionUtil.isEmpty(pageList)) { if (CollectionUtil.isEmpty(pageList)) {
return new MyPageData<>(Collections.emptyList(), 0L); return new MyPageData<>(Collections.emptyList(), 0L);
} }
long total = pageList instanceof Page ? ((Page) pageList).getTotal() : pageList.size();
Set<Long> pageIdSet = pageList.stream().map(OnlinePage::getPageId).collect(Collectors.toSet()); Set<Long> pageIdSet = pageList.stream().map(OnlinePage::getPageId).collect(Collectors.toSet());
// 2. 分页查询 OnlineForm // 2. 查询这些页面下的全部表单(不再分页),按页面分组
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineForm.class); String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineForm.class);
OnlineForm onlineForm = new OnlineForm(); OnlineForm onlineForm = new OnlineForm();
onlineForm.setPageIdSet(pageIdSet); onlineForm.setPageIdSet(pageIdSet);
List<OnlineForm> formList = onlineFormService.getOnlineFormList(onlineForm, orderBy); List<OnlineForm> formList = onlineFormService.getOnlineFormList(onlineForm, orderBy);
long total = formList instanceof Page ? ((Page) formList).getTotal() : formList.size(); Map<Long, List<OnlineForm>> formMapByPageId = new HashMap<>();
for (OnlineForm form : formList) {
formMapByPageId.computeIfAbsent(form.getPageId(), k -> new ArrayList<>()).add(form);
}
// 3. 如果传了 roleId,查询 RoleFormButton 获取勾选状态 // 3. 如果传了 roleId,查询 RoleFormButton 获取勾选状态
Map<Long, Set<String>> formCheckedMap = Collections.emptyMap(); Map<Long, Set<String>> formCheckedMap = Collections.emptyMap();
@ -254,19 +258,26 @@ public class RoleFormButtonServiceImpl extends BaseService<RoleFormButton, Long>
} }
} }
// 4. 构建结果 // 4. 按页面组装两层结构:页面 → 表单 → 按钮
List<Map<String, Object>> result = new ArrayList<>(); List<Map<String, Object>> result = new ArrayList<>();
for (OnlineForm form : formList) { for (OnlinePage page : pageList) {
Map<String, Object> pageItem = new HashMap<>();
pageItem.put("pageName", page.getPageName());
List<Map<String, Object>> formItemList = new ArrayList<>();
for (OnlineForm form : formMapByPageId.getOrDefault(page.getPageId(), Collections.emptyList())) {
List<WidgetJsonButtonParser.ButtonInfo> buttons = List<WidgetJsonButtonParser.ButtonInfo> buttons =
WidgetJsonButtonParser.extractEnabledButtons(form.getWidgetJson()); WidgetJsonButtonParser.extractEnabledButtons(form.getWidgetJson());
Map<String, Object> item = getButtonResult(form, buttons); Map<String, Object> formItem = getButtonResult(form, buttons);
if (roleId != null) { if (roleId != null) {
Set<String> checkedNames = formCheckedMap.get(form.getFormId()); Set<String> checkedNames = formCheckedMap.get(form.getFormId());
if (CollectionUtil.isNotEmpty(checkedNames)) { if (CollectionUtil.isNotEmpty(checkedNames)) {
applyCheckedStatus(item, checkedNames); applyCheckedStatus(formItem, checkedNames);
}
} }
formItemList.add(formItem);
} }
result.add(item); pageItem.put("formList", formItemList);
result.add(pageItem);
} }
return new MyPageData<>(result, total); return new MyPageData<>(result, total);
} }

Loading…
Cancel
Save