1、get方式导出
/**
* @method saveFile() 导出
* @param {base64} data 导出的数据,待转
* @param {String} fileName 名称
* @param type 保存的文件类型,目前只有excel和zip
*/
saveFile(data, fileName, type = 'excel') {
const ZIP = 'application/zip;charset=utf-8'
const EXCEL = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
let terminalType = ''
if (type === 'excel') {
terminalType = EXCEL
} else if (type === 'zip') {
terminalType = ZIP
}
var blob = ''
if(typeof(data) === 'string') {
let code = atob(data.replace(/\r\n/g, ''))
var abuffer = new window.ArrayBuffer(code.length)
var uBuffer = new window.Uint8Array(abuffer)
for (var i = 0; i < code.length; i++) {
uBuffer[i] = code.charCodeAt(i) & 0xff
}
blob = new Blob([uBuffer], {
type: terminalType
})
}else {
blob = new Blob([data], {
type: terminalType
})
}
if (window.navigator.msSaveOrOpenBlob) {
// iE下使用msSaveBlob进行导出
navigator.msSaveBlob(blob, fileName)
} else {
var href = window.URL.createObjectURL(blob)
var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
save_link.href = href
save_link.download = fileName
// 解决火狐兼容问题
document.body.appendChild(save_link)
var event = document.createEvent('MouseEvents')
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
save_link.dispatchEvent(event)
document.body.removeChild(save_link)
window.URL.revokeObjectURL(href)
}
},
2、使用
// 导出
export function historyExport (that, {channelId, signalCode, startTime, endTime,status,measuredValStart,measuredValEnd,sortType,sort}) {
return new Promise((resolve, reject) => {
that.resetAjax({
method: 'GET',
url: `evo-pmms/history/dataList/export/channelId=${channelId}&signalCode=${signalCode}&startTime=${startTime}&endTime=${endTime}`,
isNoLock: true,
isENoTip: true,
isSNoTip: true,
isParseHtml: true,
responseType: 'blob',
data: {params: {channelId, signalCode, startTime, endTime,status,measuredValStart,measuredValEnd,sortType,sort}},
onSuccess(res) {
resolve(res)
},
onError(res) {
reject(res)
}
})
})
}
historyExport(this, params).then(res => {
}).catch(res => {
//res.data 流文件
utils.saveFile(res.data, '历史查询.xlsx');
});
2、post方式导出excel
/**
* @method downloadFile() post方式导出excel
* @param {String} url 接口
* @param {Json} data 数据
*/
downloadFile(url, data) {
const body = document.getElementsByTagName('body')[0]
const form = document.createElement('form')
form.method = 'POST'
form.action = window.location.origin + '/' + url
form.style.display = 'none'
for (var key in data) {
var param = document.createElement('input')
param.type = "hidden"
param.name = key
param.value = data[key]
form.appendChild(param)
}
body.appendChild(form)
form.submit()
body.removeChild(form)
},
3、333
//流的方式下载文件
download(data) {
let typeName = this.params.name
typeName = typeName + moment().format("YYYY-MM-DD HH-mm-ss")
let name = data.headers["content-disposition"]
if (name.indexOf('.xls') > -1) {
if (name.indexOf('.xlsx') > -1) {
name = typeName + '.xlsx'
} else {
name = typeName + '.xls'
}
} else if (name.indexOf('.zip') > -1) {
name = typeName + '.zip'
}
let blob = new Blob([data.data], {
// type: fileType //可去
})
if (window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveBlob(blob, name);
} else {
const a = window.document.createElement('a');
a.href = window.URL.createObjectURL(blob, { type: 'text/plain' });
a.download = name;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
},