layui table.exportFile 导出数据常见应用场景

layui table.exportFile 导出数据常见应用场景

置顶
jhadjahjhb

于 2020-12-22 16:46:36 发布

5896
 收藏 8
分类专栏: layui 文章标签: layui
版权

layui
专栏收录该内容
1 篇文章0 订阅
订阅专栏
layui table.exportFile 导出数据
数据准备工作
场景1,导出全部数据
场景2,导出选中的数据
场景3,更改表格数据,再导出数据

最近遇到关于layui table渲染完表格将需要的数据导出的问题,于是将遇到的问题总结了下来。
数据准备工作
<button class="layui-btn" lay-submit lay-filter="requestPersonBtn">获取数据</button>
<button class="layui-btn" lay-submit lay-filter="exportPersonBtn">导出数据</button>

<!--   获取数据渲染的表格  -->
<table id="requestDataTable" class="dataTable"></table>

<!--   这里的表格,是一个隐藏的表格,做数据修改后的处理     -->
<div class="layui-hide"><table id="exportDataTable" class="dataTable"></table></div>
1
2
3
4
5
6
7
8

数据请求为本地测试数据:person.json

{
  "code": 0,
  "data": [
    {
      "name": "张三",
      "age": 20,
      "hobby": "打篮球"
    },
    {
      "name": "李四",
      "age": 22,
      "hobby": "唱歌"
    },
    {
      "name": "王五",
      "age": 21,
      "hobby": "跳舞"
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
场景1,导出全部数据
点击获取数据时,会请求json数据,渲染数据表格,定义如下变量

let personDataTable; // 变量存储当前渲染出的表格

form.on('submit(requestPersonBtn)', function () {
        personDataTable = table.render({
            elem: '#requestDataTable',
            url: '../json/person.json', // json数据路径
            size: 'sm',
            id: 'requestDataTable',
            even: true,//隔行背景
            toolbar: "#toolbarTpl",
            defaultToolbar: ['filter'],
            contentType: 'application/json',
            cols: [[
                {field: 'name', title: '姓名', width: '240'},
                {field: 'age', title: '年龄', width: '240'},
                {field: 'hobby', title: '喜好', width: '240'}
            ]],
            height: 'full-110',
            done: function (res, curr, count) {
            }
        });
        return false;  //避免表单重复提交
    })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
数据显示为:

点击导出数据按钮,需要做以下处理:
根据定义的 personDataTable 变量可以直接导出渲染的数据,如下图所示

form.on('submit(exportPersonBtn)', function () {
        // 这里不需要选择数据导出
        table.exportFile(personDataTable.config.id);
        return false;
    })
1
2
3
4
5


场景2,导出选中的数据
需要将table表格添加选择框,如下:

{filed: 'ID', type: 'checkbox', width: '50'},
1

获取选中的行数据

form.on('submit(exportPersonBtn)', function () {
        // 更改导出方法,需要选中数据导出
        let personData = getPersonArray();
        if(personData.length == 0){
            layer.msg("请选择需要导出的数据");
            return false;
        }
        console.log("personData", personData); //打印获取的数据
        table.exportFile(personDataTable.config.id, personData);
        return false;   //避免表单重复提交
    })

// 获取选中的数据
function getPersonArray() {
     let checkStatus = table.checkStatus('requestDataTable');
     return checkStatus.data;
 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
测试的结果如下,根据选中的数据导出数据



场景3,更改表格数据,再导出数据
请求数据渲染表格后,需要对表格某一行数据进行处理,比如:请求数据后,将张三的年龄设置22,并显示红色样式

done: function (res, curr, count) {
        // 0 为张三的固定索引,数据较多时需要遍历res,这里只做演示使用
        let LAY_TABLE_INDEX = 0;  
        let td = $(".layui-table").find("[data-index='"+LAY_TABLE_INDEX+"']").find("[data-field='age']");
        td.html("22");
        td.css("color","red");
    }
1
2
3
4
5
6
7


再导出数据,发现是原来的数据,新数据并没有导出,如图:



table.exportFile 导出数据是 渲染表格后的原数据,如果数据做过修改,table.exportFile 无法导出新数据。

处理问题: 我们前面定义了这样一行代码就有用啦,处理表格渲染后,将 更改后的数据渲染到 exportDataTable 表格中备份,导出的表格数据就是exportDataTable的数据,这样就能实现导出修改过的数据。

<div class="layui-hide"><table id="exportDataTable" class="dataTable"></table></div>
1
在渲染表格后 done 函数,需要做如下处理:

let personDataExport = []; //  定义变量,需要导出的表格

done: function (res, curr, count) {
       let LAY_TABLE_INDEX = 0;
        let td = $(".layui-table").find("[data-index='"+LAY_TABLE_INDEX+"']").find("[data-field='age']");
        td.html("22");
        td.css("color","red");
        $.each(res.data, function (index, item) {
            if(index == LAY_TABLE_INDEX){
                item.age = 22;
                personDataExport.push(item);
            }else{
                personDataExport.push((item));
            }
        })
        // 遍历数据,将新数据添加到 personDataExport ,渲染需要导出的表格
        init_export_table(personDataExport);
    }
    
// 定义 init_export_table 方法
function init_export_table(data) {
        // personDataTable 变量需要指向导出的表格
        personDataTable = table.render({
            elem: '#exportDataTable',  //表格ID
            data: data,
            size: 'sm',
            id: 'exportDataTable',
            even: true,//隔行背景
            toolbar: "#toolbarTpl",
            defaultToolbar: ['filter'],
            contentType: 'application/json',
            cols: [[
                {filed: 'ID', title: 'ID', type: 'checkbox', width: '50', align: 'center'},
                {field: 'name', title: '姓名', width: '240', align: 'center'},
                {field: 'age', title: '年龄', width: '240', align: 'center'},
                {field: 'hobby', title: '喜好', width: '240', align: 'center'}
            ]],
            height: 'full-110',
        });
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
此时,再导出数据,就是更改后的数据。

总的来说,就是将修改后的数据备份,重新渲染一个新的表格,table.exportFile参数ID,指向这个表格。
————————————————
版权声明:本文为CSDN博主「jhadjahjhb」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41996130/article/details/111476911

 

posted @ 2023-05-25 10:58  前端白雪  阅读(177)  评论(0编辑  收藏  举报