import FileSaver from 'file-saver' import * as XLSX from 'xlsx' import FileDownload from 'js-file-download' import {REQUEST_METHOD_TYPES} from "@/utils/Constants.js" import api from "@/utils/Request.js" import {ElMessage} from "element-plus" /** * 导出当前查询出的结果(纯前端的导出) * @param tableId el-table的ID * @param fileName 导出的excel文件名 * @returns {void|Promise|PromiseLike|Promise} */ function exportExcelFile (tableId, fileName) { if (!fileName) { fileName = 'sheet' } var wb = XLSX.utils.table_to_book(document.getElementById(tableId), { raw: true }) var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' }) try { FileSaver.saveAs(new Blob([wbout], { type: 'application/octer-stream' }), fileName + '.xlsx') } catch (e) { if (typeof console !== 'undefined') { console.log(e, wbout) } } return wbout } /** * 将需要导出的excel相关属性传到后台 * @param url 导出地址 * @param labels 列名 * @param props 列编码 * @param fileName 文件名 * @param params 其它参数 */ function toExportExcelFileByUrl (url, labels, props, fileName, params, vue) { let param = { labels: labels, props: props, fileName: fileName, params: params, obj: params } const loading = vue.$loading({ lock: true, text: '正在导出中,如果数据多时间会稍长,请耐心等待...' }) api({ url: url, method: REQUEST_METHOD_TYPES.POST, timeout: 600000, data: param, responseType: 'blob' }).then(res => { if (res) { FileDownload(res, fileName + '.xls') } loading.close() }).catch(() => { ElMessage.error('系统异常') loading.close() }) } /** * 将需要导出的xml相关属性传到后台 * @param url 导出地址 * @param props 列编码 * @param fileName 文件名 * @param params 其它参数 */ function toExportXmlSelectFileByUrl (url, labels, fileName, params, vue) { let param = { labels: labels, fileName: fileName, params: params, obj: params } const loading = vue.$loading({ lock: true, text: '正在导出中,如果数据多时间会稍长,请耐心等待...' }) api({ url: url, method: REQUEST_METHOD_TYPES.POST, data: param, responseType: 'blob' }).then(res => { if (res) { FileDownload(res, fileName + '.xml') } loading.close() }).catch(() => { ElMessage.error('系统异常') loading.close() }) } function toExportXmlAllFileByUrl (url, fileName, params, vue) { let param = { fileName: fileName, obj: params } const loading = vue.$loading({ lock: true, text: '正在导出中,如果数据多时间会稍长,请耐心等待...' }) api({ url: url, method: REQUEST_METHOD_TYPES.POST, data: param, responseType: 'blob' }).then(res => { if (res) { FileDownload(res, fileName + '.xml') } loading.close() }).catch(() => { ElMessage.error('系统异常') loading.close() }) } export { exportExcelFile, toExportExcelFileByUrl, toExportXmlSelectFileByUrl, toExportXmlAllFileByUrl }