zoukankan      html  css  js  c++  java
  • 递归处理vue菜单数据

    结构不多说,bean的封装很简单,直接上核心代码吧,自己根据需要把不要的属性自己过滤掉:

        public List<MenuBo> getMenuByUserId(Long user_id,Long company_id) {
    
            //获取所有的菜单
            List<MenuBo> rootMenu = new ArrayList<>();
            rootMenu = companyFuncInfoMapper.getMenuByUserId(user_id);
    
            List<Long> func_list = companyFuncInfoMapper.getFuncCompanyIdShipByCompanyId(company_id);
            Iterator<MenuBo> it=rootMenu.iterator();
            while(it.hasNext()){
                MenuBo menuBoIt=it.next();
                if(!func_list.contains(menuBoIt.getId())){
                    it.remove();
                }
            }
            //最后的结果
            List<MenuBo> menuList  = new ArrayList<>();
    
            // 先找到所有的一级菜单
            for (int i = 0; i < rootMenu .size(); i++) {
                // 一级菜单没有parentId
                if (rootMenu .get(i).getPid()==0L) {
                    // 一级菜单没有parentId
                    menuList.add(rootMenu.get(i));
    
                }
            }
    
            // 为一级菜单设置子菜单,getChild是递归调用的
            for (MenuBo menu : menuList) {
                Meta meta = new Meta();
                meta.setBreadName(menu.getBreadName());
                meta.setBreadIcon(menu.getBreadIcon());
                meta.setTitle(menu.getBreadName());
                menu.setComponent(menu.getComponent());
                menu.setMeta(meta);
                menu.setChildren(getChild(menu.getId(), rootMenu));
            }
            return menuList;
        }

    获取子菜单的方法:

    private static List<MenuBo> getChild(Long id, List<MenuBo> rootMenu) {
            // 子菜单
            List<MenuBo> childList = new ArrayList<>();
    
    
            for (MenuBo menu : rootMenu) {
                // 遍历所有节点,将父菜单id与传过来的id比较
                if (menu.getPid()!=null) {
                    if (menu.getPid().intValue()==id.intValue()) {
                        Meta meta = new Meta();
                        meta.setBreadName(menu.getBreadName());
                        meta.setBreadIcon(menu.getBreadIcon());
                        meta.setTitle(menu.getBreadName());
    
                        menu.setMeta(meta);
                        menu.setComponent(menu.getComponent());
                        menu.setTitle(menu.getBreadName());
                        
                        childList.add(menu);
                    }
                }
            }
            // 把子菜单的子菜单再循环一遍
            for (MenuBo children : childList) {// 没有url子菜单还有子菜单
                if (StringUtils.isBlank(children.getPath())) {
                    // 递归
    
                    children.setChildren(getChild(children.getId(), rootMenu));
                }
            } // 递归退出条件
            if (childList.size() == 0) {
                return null;
            }
            return childList;
        }

    最终结果:

    {
        "code": "000000",
        "msg": "SUCCESS",
        "data": [{
            "id": 119,
            "pid": 0,
            "path": "",
            "name": "parkManage",
            "breadName": "停车场管理",
            "component": "homePage",
            "breadIcon": "logo-buffer",
            "title": null,
            "func_type": "0",
            "children": [{
                "id": 121,
                "pid": 119,
                "path": "",
                "name": "parkInfo",
                "breadName": "停车场基本信息",
                "component": "parkManagement/parkInfo/parkInfo",
                "breadIcon": "ios-cafe",
                "title": "停车场基本信息",
                "func_type": "0",
                "children": [{
                    "id": 140,
                    "pid": 121,
                    "path": "",
                    "name": "parkInfoManage",
                    "breadName": "停车场信息管理",
                    "component": "parkManagement/parkInfo/parkInfoManage",
                    "breadIcon": "ios-cafe",
                    "title": "停车场信息管理",
                    "func_type": "2",
                    "children": null,
                    "meta": {
                        "breadName": "停车场信息管理",
                        "breadIcon": "ios-cafe",
                        "title": "停车场信息管理"
                    }
                }, {
                    "id": 146,
                    "pid": 121,
                    "path": "businessUser",
                    "name": "businessUser",
                    "breadName": "商家用户管理",
                    "component": "parkManagement/parkInfo/businessUser",
                    "breadIcon": "ios-cafe",
                    "title": "商家用户管理",
                    "func_type": "2",
                    "children": null,
                    "meta": {
                        "breadName": "商家用户管理",
                        "breadIcon": "ios-cafe",
                        "title": "商家用户管理"
                    }
                }],
                "meta": {
                    "breadName": "停车场基本信息",
                    "breadIcon": "ios-cafe",
                    "title": "停车场基本信息"
                }
            }, {
                "id": 122,
                "pid": 119,
                "path": "parkConfig",
                "name": "parkConfig",
                "breadName": "停车场配置",
                "component": "parkManagement/parkConfig/parkConfig",
                "breadIcon": "ios-cafe",
                "title": "停车场配置",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "停车场配置",
                    "breadIcon": "ios-cafe",
                    "title": "停车场配置"
                }
            }],
            "meta": {
                "breadName": "停车场管理",
                "breadIcon": "logo-buffer",
                "title": "停车场管理"
            }
        }, {
            "id": 123,
            "pid": 0,
            "path": "",
            "name": "flowDetails",
            "breadName": "流水明细查询",
            "component": "homePage",
            "breadIcon": "logo-buffer",
            "title": null,
            "func_type": "0",
            "children": [{
                "id": 124,
                "pid": 123,
                "path": "carflowInfos",
                "name": "carflowInfos",
                "breadName": "离场记录",
                "component": "flowDetailsQuiry/carflowInfo",
                "breadIcon": "ios-cafe",
                "title": "离场记录",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "离场记录",
                    "breadIcon": "ios-cafe",
                    "title": "离场记录"
                }
            }, {
                "id": 126,
                "pid": 123,
                "path": "flowingWater",
                "name": "flowingWater",
                "breadName": "在场车辆",
                "component": "flowDetailsQuiry/flowingWater",
                "breadIcon": "ios-cafe",
                "title": "在场车辆",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "在场车辆",
                    "breadIcon": "ios-cafe",
                    "title": "在场车辆"
                }
            }, {
                "id": 125,
                "pid": 123,
                "path": "payWater",
                "name": "payWater",
                "breadName": "收费流水",
                "component": "flowDetailsQuiry/payWater",
                "breadIcon": "ios-cafe",
                "title": "收费流水",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "收费流水",
                    "breadIcon": "ios-cafe",
                    "title": "收费流水"
                }
            }],
            "meta": {
                "breadName": "流水明细查询",
                "breadIcon": "logo-buffer",
                "title": "流水明细查询"
            }
        }, {
            "id": 127,
            "pid": 0,
            "path": "",
            "name": "reportQuery",
            "breadName": "报表查询",
            "component": "homePage",
            "breadIcon": "logo-buffer",
            "title": null,
            "func_type": "0",
            "children": [{
                "id": 128,
                "pid": 127,
                "path": "chargeDailyReport",
                "name": "chargeDailyReport",
                "breadName": "收费统计日报表",
                "component": "reportQuery/chargeDailyReport",
                "breadIcon": "ios-cafe",
                "title": "收费统计日报表",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "收费统计日报表",
                    "breadIcon": "ios-cafe",
                    "title": "收费统计日报表"
                }
            }, {
                "id": 147,
                "pid": 127,
                "path": "vehicleReport",
                "name": "vehicleReport",
                "breadName": "车辆进出场报表",
                "component": "reportQuery/vehicleReport",
                "breadIcon": "ios-cafe",
                "title": "车辆进出场报表",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "车辆进出场报表",
                    "breadIcon": "ios-cafe",
                    "title": "车辆进出场报表"
                }
            }, {
                "id": 148,
                "pid": 127,
                "path": "temporaryReport",
                "name": "temporaryReport",
                "breadName": "临停收费报表",
                "component": "reportQuery/temporaryReport",
                "breadIcon": "ios-cafe",
                "title": "临停收费报表",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "临停收费报表",
                    "breadIcon": "ios-cafe",
                    "title": "临停收费报表"
                }
            }, {
                "id": 149,
                "pid": 127,
                "path": "paymentReport",
                "name": "paymentReport",
                "breadName": "支付统计报表",
                "component": "reportQuery/paymentReport",
                "breadIcon": "ios-cafe",
                "title": "支付统计报表",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "支付统计报表",
                    "breadIcon": "ios-cafe",
                    "title": "支付统计报表"
                }
            }],
            "meta": {
                "breadName": "报表查询",
                "breadIcon": "logo-buffer",
                "title": "报表查询"
            }
        }, {
            "id": 129,
            "pid": 0,
            "path": "",
            "name": "financialControl",
            "breadName": "财务管理",
            "component": "homePage",
            "breadIcon": "logo-buffer",
            "title": null,
            "func_type": "0",
            "children": [{
                "id": 130,
                "pid": 129,
                "path": "merchant",
                "name": "merchant",
                "breadName": "商家充值",
                "component": "financialManage/merchant",
                "breadIcon": "ios-cafe",
                "title": "商家充值",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "商家充值",
                    "breadIcon": "ios-cafe",
                    "title": "商家充值"
                }
            }, {
                "id": 131,
                "pid": 129,
                "path": "vipRecharge",
                "name": "vipRecharge",
                "breadName": "VIP开通/续费",
                "component": "financialManage/vipRecharge",
                "breadIcon": "ios-cafe",
                "title": "VIP开通/续费",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "VIP开通/续费",
                    "breadIcon": "ios-cafe",
                    "title": "VIP开通/续费"
                }
            }, {
                "id": 144,
                "pid": 129,
                "path": "rechargeRule",
                "name": "rechargeRule",
                "breadName": "充值规则管理",
                "component": "financialManage/rechargeRule",
                "breadIcon": "ios-cafe",
                "title": "充值规则管理",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "充值规则管理",
                    "breadIcon": "ios-cafe",
                    "title": "充值规则管理"
                }
            }],
            "meta": {
                "breadName": "财务管理",
                "breadIcon": "logo-buffer",
                "title": "财务管理"
            }
        }, {
            "id": 132,
            "pid": 0,
            "path": "",
            "name": "carOwnerManagement",
            "breadName": "车主管理",
            "component": "homePage",
            "breadIcon": "logo-buffer",
            "title": null,
            "func_type": "0",
            "children": [{
                "id": 133,
                "pid": 132,
                "path": "carOwner",
                "name": "carOwner",
                "breadName": "车主信息",
                "component": "carOwnerManagement/carowner",
                "breadIcon": "ios-cafe",
                "title": "车主信息",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "车主信息",
                    "breadIcon": "ios-cafe",
                    "title": "车主信息"
                }
            }, {
                "id": 134,
                "pid": 132,
                "path": "vehicle",
                "name": "vehicle",
                "breadName": "车辆管理",
                "component": "carOwnerManagement/vehicle/vehicle",
                "breadIcon": "ios-cafe",
                "title": "车辆管理",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "车辆管理",
                    "breadIcon": "ios-cafe",
                    "title": "车辆管理"
                }
            }, {
                "id": 135,
                "pid": 132,
                "path": "vipType",
                "name": "vipType",
                "breadName": "VIP类型",
                "component": "carOwnerManagement/vip/vip",
                "breadIcon": "ios-cafe",
                "title": "VIP类型",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "VIP类型",
                    "breadIcon": "ios-cafe",
                    "title": "VIP类型"
                }
            }],
            "meta": {
                "breadName": "车主管理",
                "breadIcon": "logo-buffer",
                "title": "车主管理"
            }
        }, {
            "id": 44,
            "pid": 0,
            "path": "",
            "name": "systemManagement",
            "breadName": "系统管理",
            "component": "homePage",
            "breadIcon": "logo-buffer",
            "title": null,
            "func_type": "0",
            "children": [{
                "id": 47,
                "pid": 44,
                "path": "userManagement",
                "name": "userManagement",
                "breadName": "用户管理",
                "component": "systemManagement/userManagement/user",
                "breadIcon": "ios-cafe",
                "title": "用户管理",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "用户管理",
                    "breadIcon": "ios-cafe",
                    "title": "用户管理"
                }
            }, {
                "id": 48,
                "pid": 44,
                "path": "roleManagement",
                "name": "roleManagement",
                "breadName": "角色管理",
                "component": "systemManagement/roleManagement/role",
                "breadIcon": "ios-cafe",
                "title": "角色管理",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "角色管理",
                    "breadIcon": "ios-cafe",
                    "title": "角色管理"
                }
            }, {
                "id": 49,
                "pid": 44,
                "path": "functionalManagement",
                "name": "functionalManagement",
                "breadName": "功能管理",
                "component": "systemManagement/functionalManagement/functional",
                "breadIcon": "ios-cafe",
                "title": "功能管理",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "功能管理",
                    "breadIcon": "ios-cafe",
                    "title": "功能管理"
                }
            }],
            "meta": {
                "breadName": "系统管理",
                "breadIcon": "logo-buffer",
                "title": "系统管理"
            }
        }, {
            "id": 142,
            "pid": 0,
            "path": "/homePage",
            "name": "",
            "breadName": "首页",
            "component": "homePage",
            "breadIcon": "ios-home",
            "title": null,
            "func_type": "0",
            "children": [{
                "id": 143,
                "pid": 142,
                "path": "",
                "name": "homeMain",
                "breadName": "控制台",
                "component": "homeMain/homeMain",
                "breadIcon": "md-settings",
                "title": "控制台",
                "func_type": "0",
                "children": null,
                "meta": {
                    "breadName": "控制台",
                    "breadIcon": "md-settings",
                    "title": "控制台"
                }
            }],
            "meta": {
                "breadName": "首页",
                "breadIcon": "ios-home",
                "title": "首页"
            }
        }]
    }

    大家看json结构自己写一下实体类就行了。

  • 相关阅读:
    第三次上机练习
    第三次作业
    第二次上级练习
    第二次作业
    第一次上机练习
    第一次作业
    4.20
    4.16
    4.10
    4.9
  • 原文地址:https://www.cnblogs.com/wudi521/p/9830146.html
Copyright © 2011-2022 走看看