tablePlus.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. layui.define(['jquery','layer','table'], function(exports) {
  2. //tablePlus在原来的table模块的基础上实现了批量数据导出功能,实现defaultToolbar中筛选列记忆功能
  3. var $ = layui.$,
  4. layer = layui.layer,
  5. table = layui.table;
  6. var MOD_NAME='tablePlus';
  7. var tablePlus=$.extend({},table);
  8. tablePlus._render = tablePlus.render;
  9. tablePlus.excel = function(data,page_size,obj){
  10. //表头工具栏导出按钮
  11. $('[lay-id="'+obj.id+'"]').find('[lay-event="LAYTABLE_EXCEL"]').off().on('click',function(){
  12. if(data.count==0){
  13. layer.msg('暂无数据');
  14. return false;
  15. }
  16. else{
  17. let _page = parseInt(data.count/page_size);
  18. let page = data.count%page_size>0?(_page+1):_page;
  19. let pageHtml='<p style="padding:16px 10px 0; text-align:center; color:red">由于导出数据比较消耗服务器资源,建议使用搜索功能筛选好数据再导出</p><p style="padding:5px 10px 10px; text-align:center; color:red">如果点击导出后,没有立即导出文件,请耐心等待一下,30秒内请勿重复点击。</p><p style="padding:0 10px; text-align:center;">共查询到<strong> '+data.count+' </strong>条数据,每次最多导出<strong>'+page_size+'</strong>条,共<strong>'+page+'</strong>页,请点击下面的页码导出</p><div id="exportPage" class="layui-box layui-laypage" style="padding:10px 0; width:100%;text-align:center;">';
  20. for (i = 1; i <= page; i++) {
  21. pageHtml += '<a href="javascript:;" data-page="'+i+'">'+i+'</a>';
  22. }
  23. pageHtml+='</div>';
  24. layer.open({
  25. type: 1,
  26. title: '导出数据',
  27. area:['580px','240px'],
  28. content: pageHtml,
  29. success:function(res){
  30. var tableWhere = JSON.parse(JSON.stringify(obj.where));
  31. tableWhere.limit=page_size;
  32. $('#exportPage').on('click','a',function(){
  33. tableWhere.page=$(this).data('page');
  34. let msg = layer.msg('正在导出数据...', {time:5000});
  35. $.ajax({
  36. url: obj.url,
  37. data: tableWhere,
  38. success:function(res){
  39. table.exportFile(obj.id, res.data,'xls');
  40. setTimeout(function(){
  41. layer.msg('导出完成');
  42. },3000)
  43. }
  44. });
  45. })
  46. }
  47. });
  48. return false;
  49. }
  50. });
  51. $('[lay-id="'+obj.id+'"]').find('[lay-event="LAYTABLE_HELP"]').off().on('click',function(){
  52. let content = obj.help||'无帮助说明';
  53. layer.open({
  54. shadeClose: true,
  55. title:'帮助说明',
  56. type: 1,
  57. content: '<div style="padding:20px 15px; min-width:300px; line-height:1.8">'+content+'</div>'
  58. })
  59. })
  60. }
  61. //重写渲染方法
  62. tablePlus.render=function(params){
  63. let is_excel = params.is_excel||false;
  64. let cols_save = params.cols_save||false;
  65. let excel_limit = params.excel_limit||1000;
  66. if(is_excel){
  67. let toolbar = ['filter', {title:'导出EXCEL',layEvent: 'LAYTABLE_EXCEL',icon: 'layui-icon-export'},{title:'数据说明',layEvent: 'LAYTABLE_HELP',icon: 'layui-icon-help'}];
  68. if(!params.defaultToolbar){
  69. params.defaultToolbar = toolbar;
  70. }
  71. else{
  72. let _toolbar = params.defaultToolbar;
  73. params.defaultToolbar = _toolbar.concat(toolbar);
  74. }
  75. if(typeof params.done === "function"){
  76. let _done = params.done;
  77. params.done = function(data, curr, count){
  78. let obj = this;
  79. _done(data, curr, count);
  80. if(cols_save){
  81. obj.elem.next().on('mousedown', 'input[lay-filter="LAY_TABLE_TOOL_COLS"]+', function(){
  82. var input = $(this).prev()[0];
  83. layui.data ('col-filter-'+params.url,{
  84. key: input.name
  85. ,value: input.checked
  86. })
  87. });
  88. }
  89. tablePlus.excel(data,excel_limit,obj);
  90. }
  91. }
  92. else{
  93. params.done = function(data){
  94. let obj = this;
  95. if(cols_save){
  96. obj.elem.next().on('mousedown', 'input[lay-filter="LAY_TABLE_TOOL_COLS"]+', function(){
  97. var input = $(this).prev()[0];
  98. layui.data ('col-filter-'+params.url,{
  99. key: input.name
  100. ,value: input.checked
  101. })
  102. });
  103. }
  104. tablePlus.excel(data,excel_limit,obj);
  105. }
  106. }
  107. }
  108. if(cols_save){
  109. // 从本地存储获取用户保存的列显示设置
  110. let savedCols = localStorage.getItem('col-filter-'+params.url);
  111. let colsStatus = savedCols ? JSON.parse(savedCols) : {};
  112. let cols = params.cols;
  113. for (var i=0;i<cols[0].length;i++){
  114. if(cols[0][i].field!=undefined){
  115. cols[0][i].hide=colsStatus[cols[0][i].field];
  116. }
  117. }
  118. params.cols = cols;
  119. }
  120. var init = tablePlus._render(params);
  121. return init;
  122. //console.log(params);
  123. };
  124. exports(MOD_NAME, tablePlus);
  125. });