瀏覽代碼

用户菜单树联动效果

hurugang 4 年之前
父節點
當前提交
4b792ed97a

+ 7 - 3
src/main/java/cn/hnthyy/thmz/controller/MenuController.java

@@ -287,14 +287,17 @@ public class MenuController {
             List<Long> userIdLs = userIds.stream().map(u -> Long.valueOf(u)).collect(Collectors.toList());
             List<UserMenuRelation> userMenuRelationList = userMenuRelationService.queryByUserIds(userIdLs);
             List<Menu> parentMenus = menuService.queryAllParentMenu();
-            //父菜单集合
-            Set<Long> patrntSets = parentMenus.stream().map(Menu::getId).collect(Collectors.toSet());
+            //所有父菜单集合
+            Set<Long> parentSets = parentMenus.stream().map(Menu::getId).collect(Collectors.toSet());
+            //当前选中用户的所有父菜单集合,页面需要默认展开被选中的父菜单
+            List<Long> currentParentList = new ArrayList<>();
             Set<Long> returnSet = new HashSet<>();
             if (userMenuRelationList != null && userMenuRelationList.size() > 0) {
                 Map<Long, Long> map = userMenuRelationVo.getUserMenuRelationVos().stream().collect(Collectors.toMap(UserMenuRelationVo::getDataId, UserMenuRelationVo::getNodeId));
                 for (UserMenuRelation userMenuRelation : userMenuRelationList) {
                     //父菜单不需要放到页面勾选的集合,因为只要勾选了子菜单,父菜单就会被勾选,然后如果勾选了父菜单,所有的子菜单都会被选上
-                    if (patrntSets.contains(userMenuRelation.getMenuId())) {
+                    if (parentSets.contains(userMenuRelation.getMenuId())) {
+                        currentParentList.add(userMenuRelation.getMenuId());
                         continue;
                     }
                     returnSet.add(map.get(userMenuRelation.getMenuId()));
@@ -303,6 +306,7 @@ public class MenuController {
             resultMap.put("code", 0);
             resultMap.put("message", "获取用户已有的菜单关系成功");
             resultMap.put("data", returnSet);
+            resultMap.put("currentParentList", currentParentList);
             return resultMap;
         } catch (Exception e) {
             e.printStackTrace();

+ 12 - 2
src/main/resources/static/js/user_menu_relation.js

@@ -122,9 +122,11 @@ $(function () {
                 showCheckbox: true,//确认展示checkbox
                 data: res.data,//数据
                 onNodeChecked: userNodeChecked,//当选中节点check时响应函数
-                onNodeUnchecked: userNodeUnchecked//当不选中时响应函数,就是用于级联效果
+                onNodeUnchecked: userNodeUnchecked,//当不选中时响应函数,就是用于级联效果
+                highlightSelected: true,
             });
             $("#userTree").treeview('collapseAll');//关闭展开
+            //$("#userTree").treeview('expandNode',0);//展开第一个节点
         }
     });
 
@@ -171,9 +173,10 @@ function getMenuTree() {
                 onNodeUnchecked: menuNodeUnchecked,//当不选中时响应函数,就是用于级联效果
                 //silent: true, //折叠所有的节点,折叠整个树。
                 collapsed: true,
-                expandLevel:0
+                highlightSelected: true,
             });
             $("#menuTree").treeview('collapseAll');//关闭展开
+           // $("#menuTree").treeview('expandNode',3);//展开第一个节点
         }
     });
 }
@@ -265,6 +268,7 @@ function userCheckEd() {
     }
     if(userIds==null){
         $('#menuTree').treeview('uncheckAll', { silent: true });
+        $("#menuTree").treeview('collapseAll');//关闭展开
         return;
     }
     //先选中所有节点
@@ -300,6 +304,12 @@ function userCheckEd() {
                         silent: true
                     });
                 }
+                $("#menuTree").treeview('collapseAll');//关闭展开
+                if(res.currentParentList!=undefined && res.currentParentList!=null && res.currentParentList.length>0){
+                    for (var i=0;i<res.currentParentList.length;i++){
+                        $("#menuTree").treeview('expandNode',res.currentParentList[i]);//展开节点
+                    }
+                }
             } else {
                 errorMesage(res);
             }