import ElementUI from 'element-ui'; // 依赖ElementUI
// url:接口地址 params(POST): 参数 method:请求方式 name:下载文件名称 states:下载文件格式 1-xlsx 2-doc 3-zip
export function down(url, params, method, name, states) {
let Loading;
Loading = ElementUI.Loading.service({
fullscreen: true,
text: '数据处理中,请稍后!!!'
})
//默认登录token
let token = window.localStorage.getItem('token')
if (method == 'get') {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true); // 也可以使用POST方式,根据接口
xhr.responseType = "blob"; // 返回类型blob
xhr.setRequestHeader("token", token);
// 发送ajax请求
xhr.send()
xhr.onload = function () {
// 请求完成
if (this.status == 200) {
// 返回201
if (this.response.size < 150) {
Loading.close()
// 暂无数据
return false
}
var blob = this.response;
var reader = new FileReader();
reader.readAsDataURL(blob); // 转换为base64,可以直接放入a标签href
reader.onload = function (e) {
// 转换完成,创建一个a标签用于下载
var a = document.createElement('a');
if (states == 1) {
a.download = name + '.xlsx';
} else {
a.download = name + '.doc';
}
a.href = e.target.result;
// 修复firefox中无法触发click
a.click();
}
Loading.close()
} else {
Loading.close()
ElementUI.$message.error('导出文件失败,请联系管理人员')
}
};
} else {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true); // 也可以使用POST方式,根据接口
xhr.responseType = "blob"; // 返回类型blob
xhr.setRequestHeader("token", token);
xhr.onload = function () {
// 请求完成
if (this.status == 200) {
// 返回201
if (this.response.size < 150) {
Loading.close()
// 暂无数据
return false
}
var blob = this.response;
var reader = new FileReader();
reader.readAsDataURL(blob); // 转换为base64,可以直接放入a标签href
reader.onload = function (e) {
// 转换完成,创建一个a标签用于下载
var a = document.createElement('a');
if (states == 1) {
a.download = name + '.xlsx';
}
if (states == 2) {
a.download = name + '.doc';
}
if (states == 3) {
a.download = name + '.zip';
}
a.href = e.target.result;
// 修复firefox中无法触发click
a.click();
}
Loading.close()
} else {
Loading.close()
ElementUI.$message.error('导出文件失败,请联系管理人员')
}
};
xhr.setRequestHeader('Content-type', 'application/json')
// 发送ajax请求
xhr.send(JSON.stringify(params))
}
}
https://www.jianshu.com/p/830278a058d2 优化版本未测试