layui树形结构

一、

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>MenuList</title>
    <link href="~/Content/lib/layui/css/layui.css" rel="stylesheet" />
    <style>
        .page-container {
            margin: 0;
            position: absolute;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            z-index: 1;
            overflow: auto;
        }

        .page-search {
            text-align: center;
        }

        .page-toolbar {
            border: 1px solid #eee;
            background-color: rgb(245, 250, 254);
            padding: 3px;
        }

    </style>
    <script src="~/Scripts/jquery-3.3.1.min.js"></script>
    <script src="~/Content/lib/layui/layui.js"></script>
    <script>
        layui.use(['tree', 'util','table'], function () {
            var tree = layui.tree, layer = layui.layer, util = layui.util, table = layui.table, $ = layui.jquery;
            //菜单树
            tree.render({
                elem: '#roleTree',
                data: getTreeData(),
                id: 'demoId1',
                onlyIconControl: true,  //展开只能点右侧图标
                accordion: true,        //是否开启手风琴模式
                click: function (obj) {
                    var data = obj.data;  //获取当前点击的节点数据
                    table.reload('gridtable', {
                        url: "/Menu/GetGridData",
                        where: { code: data.code },
                        page: { curr: 1 }
                    });
                }
            });
            //数据表格
            table.render({
                elem: '#gridtable',
                id: 'gridtable',
                url: '/Menu/GetGridData', //数据接口
                page: true, //开启分页
                cols: [[ //表头
                    { field: '', title: '序号', type: 'numbers', align: 'center' },
                    { field: 'funName', title: '菜单名称', sort: true },
                    { field: 'type', title: '菜单类型', width: 300, sort: true },
                    { field: 'code', title: '编码', width: 300, sort: true},
                    { field: 'parentCode', title: '父级编码' },
                    { field: 'funUrl', title: '路径' },
                    { field: 'sort', title: '排序' }
                ]]
            });
            //获取树形结构数据源
            function getTreeData() {
                var data = [];
                $.ajax({
                    url: "/Menu/GetTreeData",    //后台数据请求地址
                    type: "post",
                    async: false,
                    success: function (resut) {
                        data = resut;
                    }
                });
                return data;
            }

        })
    </script>
</head>
<body>
    <div id="page-content">
        <div style="width: 200px; position:absolute; height: 100%;border-right: 1px solid #eee; background-color: #f5f5f5; overflow: auto;">
           <div id="roleTree"></div>
        </div>
        <div class="page-container" style="margin:0px; padding:0px;  left:203px;">

            <div class="page-toolbar">
                <button id="btn_Add" onclick="add()" class="layui-btn layui-btn-small">
                    <i class="layui-icon">&#xe608;</i>添加
                </button>

                <button id="btn_Edit" onclick="edit()" class="layui-btn layui-btn-small  hbes-btn-update">
                    <i class="layui-icon">&#xe642;</i>修改
                </button>
                <button id="btn_Delete" onclick="del()" class="layui-btn layui-btn-small  layui-btn-danger">
                    <i class="layui-icon">&#xe640;</i>删除
                </button>

                <button id="btn_SetAuth" onclick="setAuth()" class="layui-btn layui-btn-small hbes-btn-set">
                    <i class="layui-icon">&#xe620;</i>权限设置
                </button>
            </div>

            <!-- 展示数据表格 -->
            <table class="layui-hide" id="gridtable" lay-filter="gridtable"></table>

        </div>
    </div>
</body>
</html>

二、C#后台代码

1.创建树形实体

 /// <summary>
    /// 树形结构实体
    /// </summary>
    public class LayUITreeEntity
    {
        //==================================公共参数=========================================
        /// <summary>
        /// 节点名称
        /// </summary>
        public string title { get; set; }
        /// <summary>
        /// 是否展开状态(默认false)
        /// </summary>
        public bool spread { get; set; }
        /// <summary>
        /// 子节点
        /// </summary>
        public List<LayUITreeEntity> children { get; set; }

        //==================================自定义参数=========================================
        /// <summary>
        /// 编码
        /// </summary>
        public string code { get; set; }
        /// <summary> 
        /// 父集编码
        /// </summary>
        public string parentCode { get; set; }
        /// <summary>
        /// id主键
        /// </summary>
        public System.Guid id { get; set; }
    }

(递归)取数据集:

/// <summary>
/// 获取树形结构数据
/// </summary>
/// <returns></returns>
public ActionResult GetTreeData()
{
    var menuList = db.Set<MenuInfo>().Select(p => new { p.id, p.code, p.parentCode, p.funName, p.sort }).OrderBy(p => p.sort).ToList();
    List<LayUITreeEntity> treeList = new List<LayUITreeEntity>();
    LayUITreeEntity model = null;
    foreach (var item in menuList)
    {
        model = new LayUITreeEntity();
        model.id = item.id;
        model.code = item.code;
        model.parentCode = item.parentCode;
        model.title = item.funName;
        model.spread = true;
        //加入集合
        treeList.Add(model);
    }
    List<LayUITreeEntity> treeResultList = OperationParentData(treeList, "00");//父集code默认为u“00”
    return Json(treeResultList, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 公用递归(处理递归最父级数据)
/// </summary>
/// <param name="treeDataList">树形列表数据</param>
/// <param name="parentId">父级Id</param>
/// <returns></returns>
public List<LayUITreeEntity> OperationParentData(List<LayUITreeEntity> treeDataList, string parentCode)
{
    var data = treeDataList.Where(x => x.code == parentCode);
    List<LayUITreeEntity> list = new List<LayUITreeEntity>();
    foreach (var item in data)
    {
        OperationChildData(treeDataList, item);
        list.Add(item);
    }
    return list;
}
/// <summary>
/// 公用递归(递归子级数据)
/// </summary>
/// <param name="treeDataList">树形列表数据</param>
/// <param name="parentItem">父级model</param>
public void OperationChildData(List<LayUITreeEntity> treeDataList, LayUITreeEntity parentItem)
{
    var subItems = treeDataList.Where(ee => ee.parentCode == parentItem.code).ToList();
    if (subItems.Count != 0)
    {
        parentItem.children = new List<LayUITreeEntity>();
        parentItem.children.AddRange(subItems);
        foreach (var subItem in subItems)
        {
            OperationChildData(treeDataList, subItem);
        }
    }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值