diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/RoleFormButtonController.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/RoleFormButtonController.java index ebe891a..11fef5d 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/RoleFormButtonController.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/controller/RoleFormButtonController.java @@ -87,6 +87,25 @@ public class RoleFormButtonController { } /** + * 分页查询所有在线表单下的所有按钮。 + * 遍历全部在线表单,从每个表单的 widgetJson 中提取已开启的按钮。 + * + * @param orderParam 排序参数。 + * @param pageParam 分页参数。 + * @return 分页结果,每个元素包含 formId, formName, buttonList[{name, checked}]。 + */ + @PostMapping("/listAllFormButtons") + public ResponseResult> listAllFormButtons( + @MyRequestBody MyOrderParam orderParam, + @MyRequestBody MyPageParam pageParam) { + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List> result = service.listAllFormButtons(orderParam); + return ResponseResult.success(MyPageUtil.makeResponseData(result)); + } + + /** * 分页查询按钮权限配置列表。 */ @PostMapping("/list") diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IRoleFormButtonService.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IRoleFormButtonService.java index 3f21b28..4181c70 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IRoleFormButtonService.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/IRoleFormButtonService.java @@ -2,6 +2,7 @@ package apelet.tenantadmin.tenant.service; import apelet.common.core.base.service.IBaseService; import apelet.common.core.object.CallResult; +import apelet.common.core.object.MyOrderParam; import apelet.tenantadmin.tenant.dto.RoleFormButtonDto; import apelet.tenantadmin.tenant.model.RoleFormButton; @@ -66,4 +67,13 @@ public interface IRoleFormButtonService * 删除角色下绑定的所有按钮权限配置(角色删除时调用)。 */ void removeByRoleId(Long roleId); + + /** + * 分页查询所有在线表单下的所有按钮。 + * 遍历全部在线表单,从每个表单的 widgetJson 中提取已开启的按钮。 + * + * @param orderParam 排序参数。 + * @return 分页结果,每个元素包含 formId, formName, buttonList[{name, checked}]。 + */ + List> listAllFormButtons(MyOrderParam orderParam); } diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/RoleFormButtonServiceImpl.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/RoleFormButtonServiceImpl.java index d7af08a..53489a8 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/RoleFormButtonServiceImpl.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/tenant/service/impl/RoleFormButtonServiceImpl.java @@ -3,22 +3,29 @@ package apelet.tenantadmin.tenant.service.impl; import apelet.common.core.base.dao.BaseDaoMapper; import apelet.common.core.base.service.BaseService; import apelet.common.core.object.CallResult; +import apelet.common.core.object.MyOrderParam; import apelet.common.online.model.OnlineForm; +import apelet.common.online.model.OnlinePage; import apelet.common.online.service.OnlineFormService; +import apelet.common.online.service.OnlinePageService; import apelet.common.sequence.wrapper.IdGeneratorWrapper; import apelet.tenantadmin.tenant.dao.RoleFormButtonMapper; import apelet.tenantadmin.tenant.dto.RoleFormButtonDto; import apelet.tenantadmin.tenant.model.RoleFormButton; import apelet.tenantadmin.tenant.service.IRoleFormButtonService; import apelet.tenantadmin.tenant.util.WidgetJsonButtonParser; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.util.*; +import java.util.stream.Collectors; /** * 角色-表单按钮权限配置服务实现。 @@ -28,9 +35,7 @@ import java.util.*; */ @Service @Slf4j -public class RoleFormButtonServiceImpl - extends BaseService - implements IRoleFormButtonService { +public class RoleFormButtonServiceImpl extends BaseService implements IRoleFormButtonService { @Autowired private RoleFormButtonMapper mapper; @@ -41,6 +46,9 @@ public class RoleFormButtonServiceImpl @Autowired private OnlineFormService onlineFormService; + @Autowired + private OnlinePageService onlinePageService; + @Override protected BaseDaoMapper mapper() { return mapper; @@ -179,4 +187,43 @@ public class RoleFormButtonServiceImpl qw.eq(RoleFormButton::getRoleId, roleId); this.remove(qw); } + + private static @NotNull Map getButtonResult(OnlineForm form, List buttons) { + Map item = new HashMap<>(); + item.put("formId", form.getFormId()); + item.put("formName", form.getFormName()); + List> buttonList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(buttons)) { + for (WidgetJsonButtonParser.ButtonInfo btn : buttons) { + Map btnMap = new HashMap<>(); + btnMap.put("name", btn.getName()); + btnMap.put("checked", false); + buttonList.add(btnMap); + } + } + item.put("buttonList", buttonList); + return item; + } + + @Override + public List> listAllFormButtons(MyOrderParam orderParam) { + // 查询已发布的 page + List pageList = onlinePageService.queryByEnableList(); + if (CollectionUtil.isEmpty(pageList)) { + return Collections.emptyList(); + } + Set pageIdSet = pageList.stream().map(OnlinePage::getPageId).collect(Collectors.toSet()); + // 分页查询在线表单 + String orderBy = MyOrderParam.buildOrderBy(orderParam, OnlineForm.class); + OnlineForm onlineForm = new OnlineForm(); + onlineForm.setPageIdSet(pageIdSet); + List formList = onlineFormService.getOnlineFormList(null, orderBy); + List> result = new ArrayList<>(); + for (OnlineForm form : formList) { + List buttons = + WidgetJsonButtonParser.extractEnabledButtons(form.getWidgetJson()); + result.add(getButtonResult(form, buttons)); + } + return result; + } } diff --git a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/SysRoleController.java b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/SysRoleController.java index ef015d8..6c13c2e 100644 --- a/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/SysRoleController.java +++ b/application-tenant/tenant-admin/src/main/java/apelet/tenantadmin/upms/controller/SysRoleController.java @@ -9,6 +9,8 @@ import apelet.common.core.util.MyPageUtil; import apelet.common.core.validator.UpdateGroup; import apelet.common.log.annotation.OperationLog; import apelet.common.log.model.constant.SysOperationLogType; +import apelet.tenantadmin.tenant.dto.RoleFormButtonDto; +import apelet.tenantadmin.tenant.service.IRoleFormButtonService; import apelet.tenantadmin.upms.dto.SysRoleDto; import apelet.tenantadmin.upms.dto.SysUserDto; import apelet.tenantadmin.upms.model.SysRole; @@ -49,6 +51,8 @@ public class SysRoleController { private SysRoleService sysRoleService; @Autowired private SysUserService sysUserService; + @Autowired + private IRoleFormButtonService roleFormButtonService; /** * 新增角色操作。 @@ -56,6 +60,7 @@ public class SysRoleController { * @param sysRoleDto 新增角色对象。 * @param menuIdListString 与当前角色Id绑定的menuId列表,多个menuId之间逗号分隔。 * @param deptId 组织Id(可选)。 + * @param buttonConfigList 按钮权限配置列表(可选,不传不影响原有逻辑)。 * @return 应答结果对象,包含新增角色的主键Id。 */ @ApiOperationSupport(ignoreParameters = {"sysRoleDto.roleId", "sysRoleDto.createTimeStart", "sysRoleDto.createTimeEnd"}) @@ -64,7 +69,8 @@ public class SysRoleController { public ResponseResult add( @MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString, - @MyRequestBody Long deptId) { + @MyRequestBody Long deptId, + @MyRequestBody List buttonConfigList) { String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto); if (errorMessage != null) { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); @@ -79,6 +85,11 @@ public class SysRoleController { menuIdSet = result.getData().getObject("menuIdSet", new TypeReference>(){}); } sysRoleService.saveNew(sysRole, menuIdSet, deptId); + // 按钮权限配置(可选,不传不影响原有逻辑) + if (buttonConfigList != null && !buttonConfigList.isEmpty()) { + buttonConfigList.forEach(dto -> dto.setRoleId(sysRole.getRoleId())); + roleFormButtonService.batchSaveButtonConfig(buttonConfigList); + } return ResponseResult.success(sysRole.getRoleId()); } @@ -88,6 +99,7 @@ public class SysRoleController { * @param sysRoleDto 更新角色对象。 * @param menuIdListString 与当前角色Id绑定的menuId列表,多个menuId之间逗号分隔。 * @param deptId 组织Id(可选)。 + * @param buttonConfigList 按钮权限配置列表(可选,不传不影响原有逻辑)。 * @return 应答结果对象。 */ @OperationLog(type = SysOperationLogType.UPDATE) @@ -95,7 +107,8 @@ public class SysRoleController { public ResponseResult update( @MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString, - @MyRequestBody Long deptId) { + @MyRequestBody Long deptId, + @MyRequestBody List buttonConfigList) { String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto, Default.class, UpdateGroup.class); if (errorMessage != null) { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage); @@ -118,6 +131,11 @@ public class SysRoleController { errorMessage = "更新失败,数据不存在,请刷新后重试!"; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); } + // 按钮权限配置(可选,不传不影响原有逻辑) + if (buttonConfigList != null && !buttonConfigList.isEmpty()) { + buttonConfigList.forEach(dto -> dto.setRoleId(sysRole.getRoleId())); + roleFormButtonService.batchSaveButtonConfig(buttonConfigList); + } return ResponseResult.success(); } diff --git a/common/common-online/src/main/java/apelet/common/online/dao/mapper/OnlineFormMapper.xml b/common/common-online/src/main/java/apelet/common/online/dao/mapper/OnlineFormMapper.xml index 60d7c83..5a722dd 100644 --- a/common/common-online/src/main/java/apelet/common/online/dao/mapper/OnlineFormMapper.xml +++ b/common/common-online/src/main/java/apelet/common/online/dao/mapper/OnlineFormMapper.xml @@ -47,7 +47,7 @@ AND zz_online_form.form_code = #{onlineFormFilter.formCode} - + AND zz_online_form.form_name LIKE #{safeFormName} @@ -56,6 +56,12 @@ AND zz_online_form.master_table_id = #{onlineFormFilter.masterTableId} + + AND zz_online_form.page_id IN + + #{item} + + diff --git a/common/common-online/src/main/java/apelet/common/online/model/OnlineForm.java b/common/common-online/src/main/java/apelet/common/online/model/OnlineForm.java index 115f22f..7762b2a 100644 --- a/common/common-online/src/main/java/apelet/common/online/model/OnlineForm.java +++ b/common/common-online/src/main/java/apelet/common/online/model/OnlineForm.java @@ -16,6 +16,7 @@ import org.mapstruct.factory.Mappers; import java.util.Date; import java.util.Map; +import java.util.Set; /** * 在线表单实体对象。 @@ -139,6 +140,12 @@ public class OnlineForm { @TableField(exist = false) private Map formTypeDictMap; + /** + * 页面id集合。 + */ + @TableField(exist = false) + private Set pageIdSet; + @Mapper public interface OnlineFormModelMapper extends BaseModelMapper { /** 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 88b9fa0..b15c644 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 @@ -135,4 +135,11 @@ public interface OnlinePageService extends IBaseService { * @return 在线表单页面列表。 */ List getInListWithNonTenant(List pageIds, String orderBy); + + /** + * 查询启用的在线表单页面列表。 + * + * @return 在线表单页面列表。 + */ + List queryByEnableList(); } 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 2a8486a..a27f08b 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 @@ -296,4 +296,9 @@ public class OnlinePageServiceImpl extends BaseService impleme } return onlinePageMapper.selectList(queryWrapper); } + + @Override + public List queryByEnableList() { + return onlinePageMapper.selectList(new LambdaQueryWrapper().eq(OnlinePage::getPublished, true)); + } }