exportdata.html.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace zin;
  3. h::importJs($app->getWebRoot() . 'js/sheetjs/xlsx.full.min.js');
  4. h::importJs($app->getWebRoot() . 'js/filesaver/filesaver.js');
  5. $this->app->loadLang('file');
  6. jsVar('untitled', $lang->file->untitled);
  7. $fileName = isset($pivotName) ? $pivotName : '';
  8. div
  9. (
  10. setID('export'),
  11. setClass('modal'),
  12. div
  13. (
  14. setClass('modal-dialog shadow'),
  15. div
  16. (
  17. setClass('modal-content'),
  18. div(setClass('modal-header'), div(setClass('modal-title'), $lang->export)),
  19. div
  20. (
  21. setClass('modal-actions'),
  22. button
  23. (
  24. set::type('button'),
  25. setClass('btn square ghost'),
  26. set('data-dismiss', 'modal'),
  27. span(setClass('close'))
  28. )
  29. ),
  30. div
  31. (
  32. setClass('modal-body'),
  33. div
  34. (
  35. setClass('py-2 ml-8 mr-10 flex items-center'),
  36. div
  37. (
  38. setStyle('width', '20%'),
  39. setClass('text-right pr-4'),
  40. $lang->file->fileName
  41. ),
  42. div
  43. (
  44. setStyle('width', '80%'),
  45. input
  46. (
  47. set::name('fileName'),
  48. set::placeholder($lang->file->untitled),
  49. set::value($fileName)
  50. )
  51. )
  52. ),
  53. div
  54. (
  55. setClass('py-2 ml-8 mr-10 flex items-center'),
  56. div
  57. (
  58. setStyle('width', '20%'),
  59. setClass('text-right pr-4'),
  60. $lang->pivot->exportType
  61. ),
  62. div
  63. (
  64. setStyle('width', '80%'),
  65. picker
  66. (
  67. set::name('fileType'),
  68. set::items($config->pivot->fileType),
  69. set::value('xlsx'),
  70. set::required(true)
  71. )
  72. )
  73. )
  74. ),
  75. div
  76. (
  77. setClass('modal-footer flex justify-center'),
  78. button
  79. (
  80. set::type('button'),
  81. setID('export-data-button'),
  82. setClass('btn primary'),
  83. $lang->save
  84. )
  85. )
  86. )
  87. )
  88. )
  89. ?>
  90. <script id="exportJS">
  91. /**
  92. * Export file.
  93. *
  94. * @param object $domObj
  95. * @access public
  96. * @return void
  97. */
  98. exportFile = function($domObj)
  99. {
  100. if(typeof $domObj == 'undefined') return;
  101. var fileName = $('#fileName').val().trim() ? $('#fileName').val().trim() : $('#fileName')[0].placeholder;
  102. var fileType = $('[name=fileType]').zui('picker').$.value;
  103. var tableName = fileName + '.' + fileType;
  104. if(fileType == 'xlsx' || fileType == 'xls')
  105. {
  106. const new_sheet = XLSX.utils.table_to_book($domObj, {raw: true});
  107. XLSX.writeFile(new_sheet, tableName);
  108. }
  109. else if(fileType == 'html' || fileType == 'mht')
  110. {
  111. const htmlContent = $domObj.outerHTML;
  112. const $temp = $('<div>').html(htmlContent);
  113. $temp.find('*').removeAttr('style');
  114. $temp.find('*').removeAttr('class');
  115. $temp.find('*').removeAttr('data-flex');
  116. $temp.find('*').removeAttr('data-width');
  117. $temp.find('*').removeAttr('data-type');
  118. $temp.find('*').removeAttr('data-fixed-left-width');
  119. const cleanTableHTML = $temp.html();
  120. var head = '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
  121. var style = '<style>table, th, td {font-size: 12px; border: 1px solid gray; border-collapse: collapse;}table th, table td {padding: 5px;}</style>';
  122. var title = '<title>' + fileName + '</title></head>';
  123. var body = '<body>' + cleanTableHTML + '</body>';
  124. const finalHTML = head + style + title + body;
  125. if(fileType == 'html')
  126. {
  127. const blob = new Blob([finalHTML], { type: 'text/html;charset=utf-8' });
  128. saveAs(blob, tableName);
  129. }
  130. else if(fileType == 'mht')
  131. {
  132. const data = {html: finalHTML, fileName: fileName};
  133. $.post($.createLink('file', 'ajaxExport2mht'), data, function(resp)
  134. {
  135. const blob = new Blob([resp], { type: "application/x-mimearchive" });
  136. saveAs(blob, tableName);
  137. });
  138. }
  139. }
  140. $('#export').modal('hide');
  141. }
  142. </script>