/** * /framework/common/download-file * 下载文件 * @param string file * @return mixed */ window.$ExportExcel = { _ColumnItems:[], _TablesData:[], _Options:{ sheet:'Sheet1', fileName:'导出文件', }, column:function (column){ $ExportExcel._ColumnItems = column; return $ExportExcel; }, fileName:function (file_name){ $ExportExcel._Options.fileName = (file_name?file_name:'导出文件'); return $ExportExcel; }, sheet:function (sheet){ $ExportExcel._Options.sheet = (sheet?sheet:'Sheet1'); return $ExportExcel; }, export:function(page) { page = page?parseInt(page):1; $App.tablesGetExportTableList(function (res, last_page){ if(res.length > 0 ){ $ExportExcel._TablesData = $ExportExcel._TablesData.concat(res); } if(last_page > page){ $ExportExcel.export(page += 1 );return true; }else { $ExportExcel.ExportEventEntities();return true; } }, page); return false; }, ExportEventEntities:function() { if($ExportExcel._TablesData.length < 1){ return false; } // 用于替换数据中的换行符,是其可以在单元格内正常显示 const wrapMark = '
'; // 设置单元格数据显示为文本格式,避免过大的数字以科学计数法的形式显示 const tdTagHeader = ``; let dataStr = '' $ExportExcel._ColumnItems.forEach(function (column) { dataStr += `${tdTagHeader + column.label}`; }); dataStr += ''; $ExportExcel._TablesData.forEach(function(item) { dataStr += '' $ExportExcel._ColumnItems.forEach(function (column){ var values = $ExportExcel._ColumnFormatMap(item, column); // 这种方式本质是导出 html 文件,html 中连续的空格符会被合并成一个显示 // replace(/ /g, ' ') 将空格符替换成   使其可以正常显示 dataStr += tdTagHeader + `${values}`.replace(/ /g, ' ').replace(/\n/g, wrapMark) + ''; }); dataStr += '' }); const template = ` ${dataStr}
`; const link = document.createElement("a"); link.href = 'data:application/vnd.ms-excel;base64,' + window.btoa(unescape(encodeURIComponent(template))) ; link.download = $ExportExcel._Options.fileName + ".xls"; link.style.display = 'none'; link.click(); }, // // exportToExcel:function(data, fileName) { // var csv = this.convertToCSV(data); // 将数据转换为CSV格式 // var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); // 创建Blob对象 // var url = URL.createObjectURL(blob); // 转换为URL // var link = document.createElement('a'); // 创建元素 // link.setAttribute('href', url); // link.setAttribute('download', `${fileName}.csv`); // link.style.visibility = 'hidden'; // document.body.appendChild(link); // link.click(); // 触发下载 // document.body.removeChild(link); // 清理 // }, _ColumnFormatMap:function (item, column){ var values = item[column.key]?item[column.key]:''; switch (column.key){ case 'stated': return (parseInt(values) === 10)?'启用':'禁用'; break; case 'updated_at': case 'created_at': return $Utils.formatDate('yyyy-MM-dd hh:mm:ss', values); } if((typeof column.format) === 'undefined'){ return item[column.key]; } switch (column.format){ case 'datetime': return $Utils.formatDate('yyyy-MM-dd hh:mm:ss', values) break; case 'date': return $Utils.formatDate('yyyy-MM-dd', values) break; case 'map': if(!column.formatMap){ return values; } return $Arrays.arrayLookup(column.formatMap,'value', values, 'label') break; default: return values; } } }