【7.2.5】【role】更新角色绑定界面

pull/37/head
fengshuonan 2022-09-28 16:56:30 +08:00
parent 6dab79ae44
commit 42643a0618
6 changed files with 161 additions and 12 deletions

View File

@ -92,7 +92,6 @@ public interface MenuServiceApi {
*/
List<IndexMenuInfo> buildAuthorities(Integer menuFrontType);
/**
*
*
@ -101,4 +100,12 @@ public interface MenuServiceApi {
*/
List<MenuAndButtonTreeResponse> getRoleMenuAndButtons(SysRoleRequest sysRoleRequest);
/**
*
*
* @author fengshuonan
* @date 2022/9/28 16:06
*/
List<MenuAndButtonTreeResponse> getRoleBindMenuList(SysRoleRequest sysRoleRequest);
}

View File

@ -0,0 +1,62 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.system.api.enums;
import lombok.Getter;
/**
* 1-2-3-
*
* @author fengshuonan
* @date 2022/9/28 16:54
*/
@Getter
public enum AntdvFrontTypeEnum {
/**
* 1-
*/
FRONT(1, "前台"),
/**
* 2-
*/
BACKEND(2, "后台"),
/**
* 3-
*/
TOTAL_SHOW(2, "前后台都显示");
private final Integer code;
private final String message;
AntdvFrontTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}

View File

@ -50,8 +50,8 @@ public class SysRoleRequest extends BaseRequest {
/**
*
*/
@NotNull(message = "roleId不能为空", groups = {edit.class, delete.class, detail.class, updateStatus.class, grantResource.class,
grantResourceV2.class, grantDataScope.class, grantMenuButton.class, grantMenu.class, grantButton.class, grantMenusAndButtons.class})
@NotNull(message = "roleId不能为空", groups = {edit.class, delete.class, detail.class, updateStatus.class, grantResource.class, grantResourceV2.class, grantDataScope.class,
grantMenuButton.class, grantMenu.class, grantButton.class, grantMenusAndButtons.class, roleBindMenuList.class})
@ChineseDescription("主键")
private Long roleId;
@ -66,13 +66,7 @@ public class SysRoleRequest extends BaseRequest {
*
*/
@NotBlank(message = "角色编码不能为空", groups = {add.class, edit.class})
@TableUniqueValue(
message = "角色编码存在重复",
groups = {add.class, edit.class},
tableName = "sys_role",
columnName = "role_code",
idFieldName = "role_id",
excludeLogicDeleteItems = true)
@TableUniqueValue(message = "角色编码存在重复", groups = {add.class, edit.class}, tableName = "sys_role", columnName = "role_code", idFieldName = "role_id", excludeLogicDeleteItems = true)
@ChineseDescription("角色编码")
private String roleCode;
@ -236,4 +230,9 @@ public class SysRoleRequest extends BaseRequest {
}
/**
*
*/
public @interface roleBindMenuList {
}
}

View File

@ -205,4 +205,16 @@ public class SysMenuController {
return new SuccessResponseData<>(treeResponseList);
}
/**
*
*
* @author fengshuonan
* @date 2022/9/28 16:04
*/
@GetResource(name = "获取角色分配菜单界面,绑定情况列表", path = "/sysMenu/roleBindMenuList")
public ResponseData<List<MenuAndButtonTreeResponse>> roleBindMenuList(@Validated(SysRoleRequest.roleBindMenuList.class) SysRoleRequest sysRoleRequest) {
List<MenuAndButtonTreeResponse> treeResponseList = menuServiceApi.getRoleBindMenuList(sysRoleRequest);
return new SuccessResponseData<>(treeResponseList);
}
}

View File

@ -178,6 +178,34 @@ public class AntdMenusFactory {
return result;
}
/**
*
* <p>
* menu
*
* @author fengshuonan
* @date 2022/9/28 16:42
*/
public static List<MenuAndButtonTreeResponse> parseMenuAndButtonTreeResponseWithChildren(List<SysMenu> sysMenuList, List<SysRoleMenuDTO> roleBindMenus) {
// 先转化第一层级的菜单
List<MenuAndButtonTreeResponse> menuAndButtonTreeResponses = parseMenuAndButtonTreeResponse(sysMenuList, roleBindMenus);
// 转化菜单的子集
for (SysMenu sysMenu : sysMenuList) {
if (ObjectUtil.isNotEmpty(sysMenu.getChildren())) {
for (MenuAndButtonTreeResponse menuAndButtonTreeRespons : menuAndButtonTreeResponses) {
if (sysMenu.getMenuId().equals(menuAndButtonTreeRespons.getId())) {
List<MenuAndButtonTreeResponse> subLevelItems = parseMenuAndButtonTreeResponse(sysMenuList, roleBindMenus);
menuAndButtonTreeRespons.setChildren(subLevelItems);
}
}
}
}
return menuAndButtonTreeResponses;
}
/**
*
*

View File

@ -42,6 +42,7 @@ import cn.stylefeng.roses.kernel.rule.tree.ztree.ZTreeNode;
import cn.stylefeng.roses.kernel.system.api.AppServiceApi;
import cn.stylefeng.roses.kernel.system.api.MenuServiceApi;
import cn.stylefeng.roses.kernel.system.api.RoleServiceApi;
import cn.stylefeng.roses.kernel.system.api.enums.AntdvFrontTypeEnum;
import cn.stylefeng.roses.kernel.system.api.enums.MenuFrontTypeEnum;
import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException;
import cn.stylefeng.roses.kernel.system.api.exception.enums.menu.SysMenuExceptionEnum;
@ -436,8 +437,6 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
public List<MenuAndButtonTreeResponse> getRoleMenuAndButtons(SysRoleRequest sysRoleRequest) {
List<MenuAndButtonTreeResponse> menuTreeNodeList = CollectionUtil.newArrayList();
// 查询未删除的启用的菜单列表
LambdaQueryWrapper<SysMenu> menuWrapper = new LambdaQueryWrapper<>();
menuWrapper.eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode());
@ -479,6 +478,48 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
return new DefaultTreeBuildFactory<MenuAndButtonTreeResponse>().doTreeBuild(menuAndButtonTreeResponses);
}
@Override
public List<MenuAndButtonTreeResponse> getRoleBindMenuList(SysRoleRequest sysRoleRequest) {
// 查询所有菜单列表,根据前台传递参数,可选择前台还是后台菜单
LambdaQueryWrapper<SysMenu> menuWrapper = new LambdaQueryWrapper<>();
menuWrapper.eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode());
menuWrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode());
menuWrapper.eq(SysMenu::getAntdvFrontType, AntdvFrontTypeEnum.FRONT.getCode());
List<SysMenu> sysMenuList = this.list(menuWrapper);
// 获取角色绑定的菜单
List<SysRoleMenuDTO> roleMenuList = roleServiceApi.getRoleMenuList(Collections.singletonList(sysRoleRequest.getRoleId()));
// 将所有节点转化成树结构,整体只要两级结构,一级是一级菜单,第二级是所有以下菜单
Map<Long, SysMenu> firstLevelMenus = new HashMap<>();
// 找到所有第一级的菜单
for (SysMenu sysMenu : sysMenuList) {
if (TreeConstants.DEFAULT_PARENT_ID.equals(sysMenu.getMenuParentId())) {
firstLevelMenus.put(sysMenu.getMenuId(), sysMenu);
}
}
// 找到所有二级和以下菜单,并添加到一级菜单以下
for (Map.Entry<Long, SysMenu> menuEntry : firstLevelMenus.entrySet()) {
SysMenu firstLevelMenuItem = menuEntry.getValue();
List<SysMenu> children = firstLevelMenuItem.getChildren();
if (children == null) {
children = new ArrayList<>();
firstLevelMenuItem.setChildren(children);
}
for (SysMenu sysMenu : sysMenuList) {
if (sysMenu.getMenuPids().contains("[" + firstLevelMenuItem.getMenuId() + "]")) {
children.add(sysMenu);
}
}
}
// 将组装好的一级菜单和里边的children都转化为响应对象并填充checked标识
return AntdMenusFactory.parseMenuAndButtonTreeResponseWithChildren(sysMenuList, roleMenuList);
}
@Override
public List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag, Integer antdvFrontType) {