首页 > 其他分享 >layui table.exportFile 导出数据常见应用场景

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

时间:2023-05-25 11:14:17浏览次数:49  
标签:表格 layui 导出 data 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

 

标签:表格,layui,导出,data,table,exportFile,数据
From: https://www.cnblogs.com/webSnow/p/17430558.html

相关文章

  • JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
    JPA通用策略生成器查看JPA的源码可知:packagejavax.persistence;/***Definesthetypesofprimarykeygenerationstrategies.**@seeGeneratedValue**@sinceJavaPersistence1.0*/publicenumGenerationType{/***Indicatesthatthepers......
  • Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_
    MySQL版本不同导入数据时报错Incorrecttabledefinition;therecanbeonlyoneTIMESTAMPcolumnwithCURRENT_TIMESTAMPinDEFAULThttps://blog.csdn.net/weixin_43883917/article/details/112065447执行sql报错:Incorrecttabledefinition;therecanbeonlyoneTIMESTA......
  • layui渲染checkbox触发方法
    html:<span><inputtype="checkbox"id="checkAllBz"name="checkAllBz"value=""checkedlay-filter="filterName"lay-skin="primary">全选</span>js:layui.use(......
  • [AndroidTips]Tablet不断重启原因分析
    现象:启动后,可以进入主界面。但是过几分钟自动重启。以后不断重复此现象。分析:1、手机如果重启,会在/data/system/dropbox留下开机信息,可以查看次类文件生成的时间标来了解手机重启的时间情况。另外,系统会自动记录最后一次开机/重启的原因到/proc/bootinfo。 2、查看bootinfo,可以......
  • 直播平台源码,Layui-open 打开一个新页面
    直播平台源码,Layui-open打开一个新页面         edit:function(){        var_this=this;          varindex=layui.layer.open({            skin:'',          ......
  • iOS8 Self Sizing UITableView Cells iOS8Tableview Cells 自适应高度
    UITableViewUITableViewTheoldwayUITableView inheritsfrom UIScrollView).Iftherowswere allequalthiswas justasimpleoperation.Butiftheywere different,ithad toknow theheightsofalltherowsandsumthem.Itaskedusfortheheightofeve......
  • linux DOS partition table 和 GPT partition table 在兼容性和性能上有什么区别,为什
    DOS分区表(也称为MBR分区表)和GPT分区表是两种不同的磁盘分区方案,它们在兼容性和性能方面有一些区别。兼容性:DOS分区表:DOS分区表是旧的磁盘分区方案,它在早期广泛使用,并且被几乎所有操作系统所支持,包括Windows、Linux和macOS。GPT分区表:GPT分区表是一种较新的磁盘......
  • ThreadLocal 和 InheritableThreadLocal 的区别
    结论:同一个ThreadLocal变量不能在子线程中获取到,而InheritableThreadLocal变量中的值可以在父子线程之间传递。例子:publicclassMain{privatestaticThreadLocal<String>threadLocal=newThreadLocal<>();privatestaticInheritableThreadLocal<String>i......
  • 【element-plus】Table表格横向滚动条显示不正确解决办法
    滚动条bug展示如下:造成bug原因排查:由于对Table表格进行了二次封装,传递props属性时,传递了align属性,代码实现如下图:解决办法删除align属性,滚动条样式正常回显在二次封装组件时,需要保证组件属性的输入和透出,尽量避免不必要的bug......
  • Oracle 中如何手工提交Cluster Table的事务
    ++++创建测试表SQL>connroger/rogerConnected.SQL>createclustert_cluster(idnumber(2));Clustercreated.SQL>createtablet_0610......