【8.3.1】【role】更新选中状态填充的问题

master
stylefeng 2024-10-31 12:36:59 +08:00
parent bda28691e2
commit f3e6531935
1 changed files with 33 additions and 19 deletions

View File

@ -74,9 +74,11 @@ public class RoleBindPermissionFactory {
// 开始填充菜单和功能的选中状态 // 开始填充菜单和功能的选中状态
fillSubItemCheckedFlag(appList, rolePermissions); fillSubItemCheckedFlag(appList, rolePermissions);
// 填充应用的选中状态 // 填充应用的选中状态,所有的叶子节点和叶子节点的功能都选中,则选中应用
for (RoleBindPermissionItem appItem : appList) { for (RoleBindPermissionItem appItem : appList) {
fillParentCheckedFlag(appItem); // 默认选中应用如果有未选中的则会设置为false
appItem.setChecked(true);
fillAppCheckedFlag(appItem, appItem.getChildren());
} }
// 填充全选的选中状态 // 填充全选的选中状态
@ -121,30 +123,42 @@ public class RoleBindPermissionFactory {
* @author fengshuonan * @author fengshuonan
* @since 2023/6/13 19:25 * @since 2023/6/13 19:25
*/ */
private static void fillParentCheckedFlag(RoleBindPermissionItem appItem) { private static void fillAppCheckedFlag(RoleBindPermissionItem appItem, List<RoleBindPermissionItem> children) {
if (ObjectUtil.isEmpty(appItem)) { if (ObjectUtil.isEmpty(appItem) || ObjectUtil.isEmpty(children)) {
return; return;
} }
appItem.setChecked(true); // 遍历自己菜单中,如果是叶子节点勾选了,并且所有功能也选中了,则设置应用也选中
for (RoleBindPermissionItem menuItem : children) {
if (ObjectUtil.isEmpty(appItem.getChildren())) { // 非叶子节点,继续向下执行判断
return; if (!menuItem.getLeafFlag()) {
} if (ObjectUtil.isNotEmpty(menuItem.getChildren())) {
for (RoleBindPermissionItem menuItem : appItem.getChildren()) { fillAppCheckedFlag(appItem, menuItem.getChildren());
if (!menuItem.getChecked()) { } else {
appItem.setChecked(false); continue;
}
if (ObjectUtil.isEmpty(menuItem.getChildren())) {
continue;
}
for (RoleBindPermissionItem options : menuItem.getChildren()) {
if (!options.getChecked()) {
appItem.setChecked(false);
} }
} }
// 菜单是叶子节点,并且未选中,则设置应用也未选中
if (!menuItem.getChecked()) {
appItem.setChecked(false);
return;
}
// 判断菜单上的功能,是否有未选中的
if (ObjectUtil.isNotEmpty(menuItem.getFunctionList())) {
for (RoleBindPermissionItem functionItem : menuItem.getFunctionList()) {
if (!functionItem.getChecked()) {
appItem.setChecked(false);
return;
}
}
}
// 如果有子集继续递归遍历
fillAppCheckedFlag(appItem, menuItem.getChildren());
} }
} }