129 lines
3.1 KiB
JavaScript
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
|
|
}
|