Layui父子表

    
参考原文链接:https://blog.csdn.net/jackson_hou03/article/details/97894817

<!DOCTYPE html>
<html>
<head th:replace="header :: header(~{::title})">
    <title>权限菜单管理</title>
</head>
<body>
<style>
    body {
        margin:  0px;
    }

    a {
        text-decoration-line: none;
    }
</style>

<div  class="layui-body" style="top: -10px;left: 0px">
    <table class="layui-hide" id="demo" lay-filter="test"></table>
</div>

<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
</script>
<script type="text/html" id="barDemo1">
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
</script>

<script>
    layui.config({
        version: '1545041465443' //为了更新 js 缓存,可忽略
    });
    layui.use(['laydate', 'laypage', 'layer', 'table', 'carousel', 'upload', 'element', 'slider'],
        function () {
            var table = layui.table //表格
            //执行一个 table 实例
            table.render({
                elem: '#demo',
                height: 569,
                parseData: function (r) {
                    return {
                        "code": 0
                        , "msg": ""
                        , "count": "1000"
                        , "data": r
                    }
                },
                url: '/menu/dataGrid',
                title: '用户表',
                page: true,
                cols: [
                    [
                    {
                        type: 'checkbox',
                        fixed: 'right'
                    },
                    {
                        field: 'name',
                        title: '权限菜单名称',
                        width: 180,
                        event: 'collapse',
                        templet: function (d) {
                            return '<div style="position: relative;\n' + '    padding: 0 10px 0 20px;">' + d.name + '<i style="left: 0px;" lay-tips="展开" class="layui-icon layui-colla-icon layui-icon-right"></i></div>'
                        }
                    },
                    {
                        field: 'code', width: 150,
                        title: '代码标识'
                    },
                    {
                        field: 'pid', width: 80,
                        title: 'PID'
                    },
                    {
                        field: 'url',
                        title: 'URL',
                        width: 200
                    },
                    {
                        field: 'iconCls', width: 180,
                        title: '图标'
                    },
                    {
                        field: 'type', width: 80,
                        title: '类型'
                    },
                    {
                        field: 'seq', width: 80,
                        title: '排序'
                    },
                    {
                        fixed: 'right',
                        width: 80,
                        align: 'center',
                        toolbar: '#barDemo'
                    }]
                ]
            });

            //监听工具条
            table.on('tool(test)',
                function (obj) {

                    var data = obj.data;
                    console.info("data:" + JSON.stringify(data.childMenu[2]));
                    if (obj.event === 'collapse') {
                        var trObj = layui.$(this).parent('tr'); //当前行
                        var accordion = true //开启手风琴,那么在进行折叠操作时,始终只会展现当前展开的表格。
                        var content = '<table></table>' //内容
                        //表格行折叠方法
                        collapseTable({
                            elem: trObj,
                            accordion: accordion,
                            content: content,
                            success: function (trObjChildren, index) { //成功回调函数
                                //trObjChildren 展开tr层DOM
                                //index 当前层索引
                                trObjChildren.find('table').attr("id", index);

                                table.render({
                                    elem: "#" + index,
                                    url: '/menu/getMenuByPid?pid=' + data.id,
                                    limit: 3,

                                    parseData: function (r) {
                                        console.log(r);
                                        return {
                                            "code": 0
                                            , "msg": ""
                                            , "count": "1000"
                                            , "data": r
                                        }
                                    },
                                    cols: [
                                        [{
                                            type: 'checkbox',
                                            fixed: 'right'
                                        },
                                            {
                                                field: 'name',
                                                title: '权限菜单名称',
                                                width: 180
                                            },
                                            {
                                                field: 'code', width: 150,
                                                title: '代码标识'
                                            },
                                            {
                                                field: 'pid', width: 80,
                                                title: 'PID'
                                            },
                                            {
                                                field: 'url',
                                                title: 'URL',
                                                width: 200
                                            },
                                            {
                                                field: 'iconCls', width: 180,
                                                title: '图标'
                                            },
                                            {
                                                field: 'type', width: 80,
                                                title: '类型'
                                            },
                                            {
                                                field: 'seq', width: 80,
                                                title: '排序'
                                            },
                                            {
                                                fixed: 'right',
                                                align: 'center',
                                                toolbar: '#barDemo1'
                                            }]
                                    ]
                                });

                            }
                        });

                    }
                });

            function collapseTable(options) {
                var trObj = options.elem;
                if (!trObj) return;
                var accordion = options.accordion,
                    success = options.success,
                    content = options.content || '';
                var tableView = trObj.parents('.layui-table-view'); //当前表格视图
                var id = tableView.attr('lay-id'); //当前表格标识
                var index = trObj.data('index'); //当前行索引
                var leftTr = tableView.find('.layui-table-fixed.layui-table-fixed-l tr[data-index="' + index + '"]'); //左侧当前固定行
                var rightTr = tableView.find('.layui-table-fixed.layui-table-fixed-r tr[data-index="' + index + '"]'); //右侧当前固定行
                var colspan = trObj.find('td').length; //获取合并长度
                var trObjChildren = trObj.next(); //展开行Dom
                var indexChildren = id + '-' + index + '-children'; //展开行索引
                var leftTrChildren = tableView.find('.layui-table-fixed.layui-table-fixed-l tr[data-index="' + indexChildren + '"]'); //左侧展开固定行
                var rightTrChildren = tableView.find('.layui-table-fixed.layui-table-fixed-r tr[data-index="' + indexChildren + '"]'); //右侧展开固定行
                var lw = leftTr.width() + 15; //左宽
                var rw = rightTr.width() + 15; //右宽
                //不存在就创建展开行
                if (trObjChildren.data('index') != indexChildren) {
                    //装载HTML元素
                    var tr = '<tr data-index="' + indexChildren + '"><td colspan="' + colspan + '"><div style="height: auto;padding-left:' + lw + 'px;padding-right:' + rw + 'px" class="layui-table-cell">' + content + '</div></td></tr>';
                    trObjChildren = trObj.after(tr).next().hide(); //隐藏展开行
                    var fixTr = '<tr data-index="' + indexChildren + '"></tr>';//固定行
                    leftTrChildren = leftTr.after(fixTr).next().hide(); //左固定
                    rightTrChildren = rightTr.after(fixTr).next().hide(); //右固定
                }
                //展开|折叠箭头图标
                trObj.find('td[lay-event="collapse"] i.layui-colla-icon').toggleClass("layui-icon-right layui-icon-down");
                //显示|隐藏展开行
                trObjChildren.toggle();
                //开启手风琴折叠和折叠箭头
                if (accordion) {
                    trObj.siblings().find('td[lay-event="collapse"] i.layui-colla-icon').removeClass("layui-icon-down").addClass("layui-icon-right");
                    trObjChildren.siblings('[data-index$="-children"]').hide(); //展开
                    rightTrChildren.siblings('[data-index$="-children"]').hide(); //左固定
                    leftTrChildren.siblings('[data-index$="-children"]').hide(); //右固定
                }
                success(trObjChildren, indexChildren); //回调函数
                heightChildren = trObjChildren.height(); //展开高度固定
                rightTrChildren.height(heightChildren + 115).toggle(); //左固定
                leftTrChildren.height(heightChildren + 115).toggle(); //右固定
            }

        });
</script>

 
</body>
</html>

也可以采用layui的模板进行递归

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人海中的海盗

你的打赏将是对我的激励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值