layui+springboot实现树状菜单

layui+springboot实现树状菜单

rolelist.html:

admin.popup({
    title: '角色授权'
    , area: ['500px', '580px']
    , id: 'LAY-popup-role-edit'
    , success: function (layero, index) {
        view(this.id).render('sys/role/roleMenu', {index: index}).done(function () {
            form.render(null, 'roleMenuTip');
            form.val("roleMenuTip", obj.data);
            $.ajax({
                url: '/role/getRoleMenu',
                method: 'post',
                data: {roleid: data.id},
                dataType: 'JSON',
                //headers: {Authorization: (layui.data('layuiAdmin')['Authorization'] || '')},
                success: function (res) {
                    if (res.code == 0) {
                        //开启复选框
                        tree.render({
                            elem: '#LAY-role-menu'
                            , data: res.data
                            , showCheckbox: true
                            , id: "ids"
                        });
                    }
                    else
                        layer.msg(res.msg);
                }
            });
            form.on('submit(roleMenuSubmit)', function (data) {
                var data = data.field;
                var checkedData = tree.getChecked('ids');
                var ids = new Array();
                /*$.each(checkData, function (index, o) {
                    ids.push(o.id);
                    var children = o.children;
                    $.each(children, function (index, c) {
                        ids.push(c.id);
                        var child = c.children;
                        $.each(child, function (index, s) {
                            ids.push(s.id);
                        });
                    });
                })*/

                ids = getChildNodes(checkedData, []);
                $.ajax({
                    url: '/role/saveRoleMenu',
                    method: 'post',
                    data: {roleid: data.id, ids: ids.toString()},
                    dataType: 'JSON',
                    //headers: {Authorization: (layui.data('layuiAdmin')['Authorization'] || '')},
                    success: function (res) {
                        if (res.code == 0) {
                            layer.msg("成功");
                            layer.close(index); //执行关闭
                            queryrolelist();
                        }
                        else
                            layer.msg(res.msg);
                    }
                });
                return false;
            });
        });
    }
});

rolemenu.html:

<form class="layui-form" action="" type="post" lay-filter="roleMenuTip" style="padding: 20px 30px 0 0;">
    <div class="layui-col-md11">
        <div class="layui-form-item" style="margin-top: 2px;left: 1px">
            <input type="hidden" name="id"/>
            <label class="layui-form-label">角色名称</label>
            <div class="layui-input-block">
                <input type="text" disabled="true" name="vc2rolename" id="vc2rolename" lay-verify="required"
                       autocomplete="off" class="layui-input">
            </div>
        </div>
        <table id="LAY-role-menu" lay-filter="LAY-role-menu"></table>
        <div class="layui-form-item">
            <div class="layui-input-block" style="text-align: center">
                <button class="layui-btn" lay-submit lay-filter="roleMenuSubmit">确定</button>
                <script type="text/html" template>
                    <span class="layui-btn layui-btn-primary" onclick="layer.close({{d.params.index || ''}});">取消</span>
                </script>
            </div>
        </div>
    </div>
</form>

controller:

@RequestMapping("/getRoleMenu")
public ResponseData roleMenu(HttpServletRequest request) {
    Long roleid = Long.parseLong(request.getParameter("roleid"));
    try {
        Object roleMenuList = roleService.getAtreeMenu(roleid);
        return ResponseData.SUCCESS(roleMenuList);
    } catch (Exception e) {
        e.printStackTrace();
        logger.error("获取角色菜单树失败!", e.getMessage());
        return ResponseData.FAIL("失败");
    }
}

service:

/**
 * 根据roleid获取菜单树
 *
 * @param roleId
 * @return: java.util.List<com.ihandy.sys.model.sys.AtreeMenu>
 */
public List<AtreeMenu> getAtreeMenu(Long roleId) {
    List<Map<String, Object>> allMenuList = tlSysRoleExtMapper.getMenuListByRoleId(roleId); //当前角色拥有的菜单
    TlSysMenuExample example = new TlSysMenuExample();
    TlSysMenuExample.Criteria criteria = example.createCriteria();
    criteria.andNumstatusEqualTo((short) 1);
    List<TlSysMenu> menuList = tlSysMenuMapper.selectByExample(example);
    ;//所有菜单列表
    List<AtreeMenu> atreeMenus = new ArrayList<>();
    List<AtreeMenu> menuList1 = new ArrayList<>();
    List allMenuIdList = new ArrayList();
    for (int i = 0; i < allMenuList.size(); i++) {
        allMenuIdList.add(allMenuList.get(i).get("ID") + "");
    }
    TlSysMenu tlSysMenu = new TlSysMenu();
    for (int i = 0; i < menuList.size(); i++) {
        AtreeMenu treeNode = new AtreeMenu();
        tlSysMenu = menuList.get(i);
        String id = tlSysMenu.getId() + "";
        treeNode.setId(id);
        if(tlSysMenu.getVc2menudesc() == null){
            treeNode.setTitle(tlSysMenu.getVc2menuname());
        }else{
            treeNode.setTitle(tlSysMenu.getVc2menuname()+"("+tlSysMenu.getVc2menudesc()+")");
        }
        String pid = tlSysMenu.getPid() + "";
        treeNode.setSuperId(pid);
        if (allMenuIdList.contains(id)) {
            if (Integer.parseInt(pid) != 0)
                treeNode.setChecked(true);
        }
        menuList1.add(treeNode);
    }
    for (AtreeMenu treeNode : menuList1) {
        if (!(isBlank(treeNode.getSuperId())) && Integer.parseInt(treeNode.getSuperId()) == 0) {
            atreeMenus.add(findChildren(treeNode, menuList1));
        }
    }
    return atreeMenus;
}

/**
 * 查找菜单树子节点
 *
 * @param menu
 * @param menuList
 * @return: com.ihandy.sys.model.sys.AtreeMenu
 */
public AtreeMenu findChildren(AtreeMenu menu, List<AtreeMenu> menuList) {
    for (AtreeMenu item : menuList) {
        if (menu.getId().equals(item.getSuperId())) {
            if (menu.getChildren() == null) {
                menu.setChildren(new ArrayList<AtreeMenu>());
  menu.setChecked(false);
            }
            menu.getChildren().add(findChildren(item, menuList));
        }
    }
    return menu;
}

效果:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值