zhzf/client/src/utils/ExportExcel.js

129 lines
3.1 KiB
JavaScript

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<any>|PromiseLike<void>|Promise<void>}
*/
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
}