跳至主要內容

LayUI实现根据条件改变表头

Yaien Blog原创大约 5 分钟前端LayUI

LayUI实现根据条件改变表头

使用LayUI框架,请求后台数据并将数据渲染到表格中。

需求

要求:根据 收支科目 调整表头展示项。

数据源(cols.js)

/**
 * 表格头部数据
 * @type {{title: *[]}}
 */
let tableTitle = {
        title: [
            {
                id: '0',
                data: [
                    {field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left'}
                    , {field: 'username', title: '用户名', width: 80}
                    , {field: 'sex', title: '性别', width: 80, sort: true}
                    , {field: 'sign', title: '签名', width: 177}
                    , {field: 'wealth', title: '财富', width: 135, sort: true}
                ]
            },
            {
                id: '1',
                data: [
                    {field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left'}
                    , {field: 'username', title: '用户名', width: 80}
                    , {field: 'sex', title: '性别', width: 80, sort: true}
                    , {field: 'city', title: '城市', width: 80}
                    , {field: 'sign', title: '签名', width: 177}
                    , {field: 'experience', title: '积分', width: 80, sort: true}
                    , {field: 'score', title: '评分', width: 80, sort: true}
                    , {field: 'classify', title: '职业', width: 80}
                    , {field: 'wealth', title: '财富', width: 135, sort: true}
                ]
            },
            {
                id: '2',
                data: [
                    {field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left'}
                    , {field: 'username', title: '用户名', width: 80}
                    , {field: 'sex', title: '性别', width: 80, sort: true}
                    , {field: 'city', title: '城市', width: 80}
                    , {field: 'sign', title: '签名', width: 177}
                    , {field: 'classify', title: '职业', width: 80}
                    , {field: 'wealth', title: '财富', width: 135, sort: true}
                ]
            }
        ]
    };

/**
 * 数据源
 * @type {*[]}
 */
let tableData = [{
    "id": 10000,
    "username": "user-0",
    "sex": "女",
    "city": "城市-0",
    "sign": "签名-0",
    "experience": 255,
    "logins": 24,
    "wealth": 82830700,
    "classify": "作家",
    "score": 57
}, {
    "id": 10001,
    "username": "user-1",
    "sex": "男",
    "city": "城市-1",
    "sign": "签名-1",
    "experience": 884,
    "logins": 58,
    "wealth": 64928690,
    "classify": "词人",
    "score": 27
}, {
    "id": 10002,
    "username": "user-2",
    "sex": "女",
    "city": "城市-2",
    "sign": "签名-2",
    "experience": 650,
    "logins": 77,
    "wealth": 6298078,
    "classify": "酱油",
    "score": 31
}, {
    "id": 10003,
    "username": "user-3",
    "sex": "女",
    "city": "城市-3",
    "sign": "签名-3",
    "experience": 362,
    "logins": 157,
    "wealth": 37117017,
    "classify": "诗人",
    "score": 68
}, {
    "id": 10004,
    "username": "user-4",
    "sex": "男",
    "city": "城市-4",
    "sign": "签名-4",
    "experience": 807,
    "logins": 51,
    "wealth": 76263262,
    "classify": "作家",
    "score": 6
}, {
    "id": 10005,
    "username": "user-5",
    "sex": "女",
    "city": "城市-5",
    "sign": "签名-5",
    "experience": 173,
    "logins": 68,
    "wealth": 60344147,
    "classify": "作家",
    "score": 87
}, {
    "id": 10006,
    "username": "user-6",
    "sex": "女",
    "city": "城市-6",
    "sign": "签名-6",
    "experience": 982,
    "logins": 37,
    "wealth": 57768166,
    "classify": "作家",
    "score": 34
}, {
    "id": 10007,
    "username": "user-7",
    "sex": "男",
    "city": "城市-7",
    "sign": "签名-7",
    "experience": 727,
    "logins": 150,
    "wealth": 82030578,
    "classify": "作家",
    "score": 28
}, {
    "id": 10008,
    "username": "user-8",
    "sex": "男",
    "city": "城市-8",
    "sign": "签名-8",
    "experience": 951,
    "logins": 133,
    "wealth": 16503371,
    "classify": "词人",
    "score": 14
}, {
    "id": 10009,
    "username": "user-9",
    "sex": "女",
    "city": "城市-9",
    "sign": "签名-9",
    "experience": 484,
    "logins": 25,
    "wealth": 86801934,
    "classify": "词人",
    "score": 75
}, {
    "id": 10010,
    "username": "user-10",
    "sex": "女",
    "city": "城市-10",
    "sign": "签名-10",
    "experience": 1016,
    "logins": 182,
    "wealth": 71294671,
    "classify": "诗人",
    "score": 34
}, {
    "id": 10011,
    "username": "user-11",
    "sex": "女",
    "city": "城市-11",
    "sign": "签名-11",
    "experience": 492,
    "logins": 107,
    "wealth": 8062783,
    "classify": "诗人",
    "score": 6
}, {
    "id": 10012,
    "username": "user-12",
    "sex": "女",
    "city": "城市-12",
    "sign": "签名-12",
    "experience": 106,
    "logins": 176,
    "wealth": 42622704,
    "classify": "词人",
    "score": 54
}, {
    "id": 10013,
    "username": "user-13",
    "sex": "男",
    "city": "城市-13",
    "sign": "签名-13",
    "experience": 1047,
    "logins": 94,
    "wealth": 59508583,
    "classify": "诗人",
    "score": 63
}, {
    "id": 10014,
    "username": "user-14",
    "sex": "男",
    "city": "城市-14",
    "sign": "签名-14",
    "experience": 873,
    "logins": 116,
    "wealth": 72549912,
    "classify": "词人",
    "score": 8
}, {
    "id": 10015,
    "username": "user-15",
    "sex": "女",
    "city": "城市-15",
    "sign": "签名-15",
    "experience": 1068,
    "logins": 27,
    "wealth": 52737025,
    "classify": "作家",
    "score": 28
}, {
    "id": 10016,
    "username": "user-16",
    "sex": "女",
    "city": "城市-16",
    "sign": "签名-16",
    "experience": 862,
    "logins": 168,
    "wealth": 37069775,
    "classify": "酱油",
    "score": 86
}, {
    "id": 10017,
    "username": "user-17",
    "sex": "女",
    "city": "城市-17",
    "sign": "签名-17",
    "experience": 1060,
    "logins": 187,
    "wealth": 66099525,
    "classify": "作家",
    "score": 69
}, {
    "id": 10018,
    "username": "user-18",
    "sex": "女",
    "city": "城市-18",
    "sign": "签名-18",
    "experience": 866,
    "logins": 88,
    "wealth": 81722326,
    "classify": "词人",
    "score": 74
}, {
    "id": 10019,
    "username": "user-19",
    "sex": "女",
    "city": "城市-19",
    "sign": "签名-19",
    "experience": 682,
    "logins": 106,
    "wealth": 68647362,
    "classify": "词人",
    "score": 51
}, {
    "id": 10020,
    "username": "user-20",
    "sex": "男",
    "city": "城市-20",
    "sign": "签名-20",
    "experience": 770,
    "logins": 24,
    "wealth": 92420248,
    "classify": "诗人",
    "score": 87
}, {
    "id": 10021,
    "username": "user-21",
    "sex": "男",
    "city": "城市-21",
    "sign": "签名-21",
    "experience": 184,
    "logins": 131,
    "wealth": 71566045,
    "classify": "词人",
    "score": 99
}, {
    "id": 10022,
    "username": "user-22",
    "sex": "男",
    "city": "城市-22",
    "sign": "签名-22",
    "experience": 739,
    "logins": 152,
    "wealth": 60907929,
    "classify": "作家",
    "score": 18
}, {
    "id": 10023,
    "username": "user-23",
    "sex": "女",
    "city": "城市-23",
    "sign": "签名-23",
    "experience": 127,
    "logins": 82,
    "wealth": 14765943,
    "classify": "作家",
    "score": 30
}, {
    "id": 10024,
    "username": "user-24",
    "sex": "女",
    "city": "城市-24",
    "sign": "签名-24",
    "experience": 212,
    "logins": 133,
    "wealth": 59011052,
    "classify": "词人",
    "score": 76
}, {
    "id": 10025,
    "username": "user-25",
    "sex": "女",
    "city": "城市-25",
    "sign": "签名-25",
    "experience": 938,
    "logins": 182,
    "wealth": 91183097,
    "classify": "作家",
    "score": 69
}, {
    "id": 10026,
    "username": "user-26",
    "sex": "男",
    "city": "城市-26",
    "sign": "签名-26",
    "experience": 978,
    "logins": 7,
    "wealth": 48008413,
    "classify": "作家",
    "score": 65
}, {
    "id": 10027,
    "username": "user-27",
    "sex": "女",
    "city": "城市-27",
    "sign": "签名-27",
    "experience": 371,
    "logins": 44,
    "wealth": 64419691,
    "classify": "诗人",
    "score": 60
}, {
    "id": 10028,
    "username": "user-28",
    "sex": "女",
    "city": "城市-28",
    "sign": "签名-28",
    "experience": 977,
    "logins": 21,
    "wealth": 75935022,
    "classify": "作家",
    "score": 37
}, {
    "id": 10029,
    "username": "user-29",
    "sex": "男",
    "city": "城市-29",
    "sign": "签名-29",
    "experience": 647,
    "logins": 107,
    "wealth": 97450636,
    "classify": "酱油",
    "score": 27
}];

/**
 * 获取表格头部
 * @param id 条件
 * @returns {*[]|*} 表格头部数据
 */
function getTableTitle(id) {
    console.log("我进来了---");
    let result = tableTitle.title[0].data;
    tableTitle.title.forEach(item => {
        if (id === item.id) {
            result = item.data
        }
    });
    return result;
}

代码实现


<html>
    <head>
        <meta charset="utf-8">
            <title>激励分Demo</title>
            <meta content="webkit" name="renderer">
                <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
                    <meta http-equiv="Expires" content="0">
                        <meta http-equiv="Pragma" content="no-cache">
                            <meta http-equiv="Cache-control" content="no-cache">
                                <meta http-equiv="Cache" content="no-cache">
                                    <meta
                                        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"
                                        name="viewport">
                                        <link href="layuiadmin/layui/css/layui.css" media="all" rel="stylesheet">
                                            <link href="layuiadmin/style/admin.css" media="all" rel="stylesheet">
                                                <link href="layuiadmin/style/login.css" media="all" rel="stylesheet">

                                                    <style>
                                                        .layui-table th {
                                                        font - weight: bold;
                                                    }
                                                    </style>
    </head>

    <body>
        <div class="layui-form demoTable" style="padding-top: 14px;">
            <div class="layui-row layui-col-space12 layui-form-item">
                <div class="layui-col-md3">
                    <label class="layui-form-label">职位:</label>
                    <div class="layui-input-inline">
                        <select name="classify" id="classify">
                            <option value="-1"></option>
                            <option value="0">作家</option>
                            <option value="1">词人</option>
                            <option value="2">诗人</option>
                        </select>
                    </div>
                </div>
                <div class="layui-col-md2">
                    <button class="layui-btn" data-type="reload">查 询</button>
                </div>
            </div>
        </div>

        <table class="layui-hide" id="test"></table>

        <script src="layuiadmin/layui/layui.js"></script>
        <script src="js/jquery-3.4.1.min.js"></script>
        <script src="cols.js"></script>
        <script>
            layui.config({
            base: 'layuiadmin/'
        }).extend({
            index: 'lib/index'
        }).use('table', function () {
            let table = layui.table;
            let id = $('#classify').val();
            table.render({
            elem: '#test'
            , data: tableData
            , cols: [getTableTitle(id)]
            , id: 'testReload'
            , page: true
            , limits: [10, 15, 20]
            , limit: 15
            , size: 'sm'
        });
            let active = {
            reload: function () {
            let id2 = $('#classify').val();
            table.reload('testReload', {
            cols: [getTableTitle(id2)]
            , page: {curr: 1}
        });
        }
        };

            $('.demoTable .layui-btn').on('click', function () {
            let type = $(this).data('type');
            active[type] ? active[type].call(this) : '';
        });
        });

        </script>

    </body>
</html>

效果展示

存在问题

问题:当表头列数多于下一次需要渲染的列数时,多余的列数并不会清楚

解决方法:每一次查询都去删除表头,再重新添加 实现:

  1. 添加div,将table包住
<div id="myTable">
    <table class="layui-hide" id="test"></table>
</div>
  1. 修改查询方法实现
let active = {
    reload: function () {
        let id2 = $('#classify').val();

        $("#myTable").empty();
        $("#myTable").append('<table class="layui-hide" id="test"></table>');

        table.render({
            elem: '#test'
            , data: tableData
            , cols: [getTableTitle(id2)]
            , id: 'testReload'
            , page: true
            , limits: [10, 15, 20]
            , limit: 15
            , size: 'sm'
        });
    }
};
上次编辑于:
贡献者: yanggl