[Layui]layui使用tree实现树形下拉菜单

14 篇文章 0 订阅
这篇博客展示了如何利用layui框架结合JavaScript和Ajax技术,动态加载并展示权限菜单。通过插入CSS样式和HTML代码,创建了一个下拉选择框,并利用JS代码进行数据交互,实现了菜单栏的初始化和点击事件,确保了用户能够选择和查看权限菜单。
摘要由CSDN通过智能技术生成

一. 效果演示 基于V2.6.8
在这里插入图片描述
二. 插入css样式、引用js插件

  <link rel="stylesheet" href="~/layui/css/layui.css" media="all">
    @*<link rel="stylesheet" type="text/css" href="~/layui/font/">*@
    <style type="text/css">
        .treeSelect .layui-select-title span {
            line-height: 38px;
        }

        .layui-form-select dl {
            padding: 0;
        }
    </style>

三. 添加html代码

<form class="layui-form layui-form-pane" style="margin: 50px;">
        <div class="layui-form-item">
            <label class="layui-form-label">菜单栏目</label>
            <div class="layui-input-block" style="width: 300px;">
                <div class="layui-unselect layui-form-select treeSelect">
                    <div class="layui-select-title">
                        <span class="layui-input layui-unselect" id="treeclass">选择栏目</span>
                        <input type="hidden" name="selectID" value="12">
                        <i class="layui-edge"></i>
                    </div>
                    @*<div id="meuntree" class="demo-tree-more"></div>*@
                    <dl class="layui-anim layui-anim-upbit">
                        <dd>
                            <ul id="meuntree"></ul>
                        </dd>
                    </dl>
                </div>
            </div>
        </div>
    </form>

四. JS代码

<script src="~/layui/layui.js"></script>
<script type="text/javascript">
    layui.config({
        base: '~/layui/' //静态资源所在路径
    });
    layui.use(['layer', 'tree', 'form'], function () {
        var $ = layui.jquery,
            layer = layui.layer,
            form = layui.form,
            tree = layui.tree;
        //初始化权限
        function init_auth() {
            console.log("权限菜单初始化");
            var data = [];
            $.ajax({
                url: "http://localhost:8089/api/SysMenu/GetSysMenuList",    //后台数据请求地址
                type: "get",
                async: false,
                success: function (resut) {
                    data = resut;
                    var formatdata = [];
                    for (var i in data) {     // pId为0时表示为根节点
                        if (data[i].pid == '-1') {
                            var tempObject = {};
                            tempObject.title = data[i].name;
                            tempObject.id = data[i].id;
                            tempObject.children = getChildren(tempObject.id);
                            formatdata.push(tempObject);
                        }
                    }
                    function getChildren(id) {    //递归体  即对每条data逐条递归找children
                        var tempArray = [];
                        for (var i in data) {
                            if (data[i].pid == id) {
                                var tempChild = {};
                                tempChild.title = data[i].name;
                                tempChild.id = data[i].id;
                                if (selectChildren(data[i].id)) {   //若存在子节点,继续递归;否则为叶节点,停止递归
                                    tempChild.children = getChildren(data[i].id);
                                }
                                tempArray.push(tempChild);
                            }
                        }
                        return tempArray;
                    }
                    function selectChildren(id) {   // 是否存在子节点
                        for (var i in data) {
                            if (data[i].pid == id) {
                                return true;
                            }
                        }
                        return false;
                    }

                    //转成符合要求的格式
                    console.log(formatdata);
                    //基本演示
                    tree.render({
                        elem: '#meuntree'
                        , data: formatdata
                        
                        , id: 'authlist'
                        , isJump: true //是否允许点击节点时弹出新窗口跳转
                        , click: function (obj) {
                            var data = obj.data;  //获取当前点击的节点数据
                            //layer.msg('状态:' + obj.state + '<br>节点数据:' + JSON.stringify(data));
                            var $select = $($(this)[0].elem).parents(".layui-form-select");
                            $select.removeClass("layui-form-selected").find(".layui-select-title span").html(obj.data.title).end().find("input:hidden[name='selectID']").val(obj.data.id);

                            var selectId = $("input[name='selectID']").val();
                            layer.msg("选择了id=" + selectId + "的数据" + '<br>节点数据:' + obj.data.title, {
                                icon: 1,
                                time: 5000,
                                offset: '15px'
                            });
                        }
                    });
                }
            });
            //return data;
        };

    
        init_auth();
        // 默认选中
        var checkNode = {
            id: 4
            ,title: '用户管理'
        }
        var $select = $(".layui-form-select");
        $select.removeClass("layui-form-selected").find(".layui-select-title span").html(checkNode.title).end().find("input:hidden[name='selectID']").val(checkNode.id);
        form.render();


        $(".treeSelect").on("click", ".layui-select-title", function (e) {
            $(".layui-form-select").not($(this).parents(".layui-form-select")).removeClass("layui-form-selected");
            $(this).parents(".treeSelect").toggleClass("layui-form-selected");
            layui.stope(e);
        }).on("click", "dl i", function (e) {
            layui.stope(e);
        });
        $(document).on("click", function (e) {
            $(".layui-form-select").removeClass("layui-form-selected");
        });

    });
</script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值