【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);
// 填充应用的选中状态
// 填充应用的选中状态,所有的叶子节点和叶子节点的功能都选中,则选中应用
for (RoleBindPermissionItem appItem : appList) {
fillParentCheckedFlag(appItem);
// 默认选中应用如果有未选中的则会设置为false
appItem.setChecked(true);
fillAppCheckedFlag(appItem, appItem.getChildren());
}
// 填充全选的选中状态
@ -121,30 +123,42 @@ public class RoleBindPermissionFactory {
* @author fengshuonan
* @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;
}
appItem.setChecked(true);
// 遍历自己菜单中,如果是叶子节点勾选了,并且所有功能也选中了,则设置应用也选中
for (RoleBindPermissionItem menuItem : children) {
if (ObjectUtil.isEmpty(appItem.getChildren())) {
return;
}
for (RoleBindPermissionItem menuItem : appItem.getChildren()) {
if (!menuItem.getChecked()) {
appItem.setChecked(false);
}
if (ObjectUtil.isEmpty(menuItem.getChildren())) {
continue;
}
for (RoleBindPermissionItem options : menuItem.getChildren()) {
if (!options.getChecked()) {
appItem.setChecked(false);
// 非叶子节点,继续向下执行判断
if (!menuItem.getLeafFlag()) {
if (ObjectUtil.isNotEmpty(menuItem.getChildren())) {
fillAppCheckedFlag(appItem, menuItem.getChildren());
} else {
continue;
}
}
// 菜单是叶子节点,并且未选中,则设置应用也未选中
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());
}
}