记一次vue将列表下载为excel的兼容写法需求需要将后端返回的列表数据下载到本地,查询资料发现采用blob文件流下载1、后端返回的是blob文件流,传统的模拟href点击在IE下不兼容,无法下载 故采用兼容写法如下/* 批...

记一次vue将列表下载为excel的兼容写法
需求需要将后端返回的列表数据下载到本地,查询资料发现采用blob文件流下载
1、后端返回的是blob文件流,传统的模拟href点击在IE下不兼容,无法下载 故采用兼容写法如下
/* 批量文件下载 */
export function listFileDownload(params) {
api({
url: '/mweb/mcif.TellerListDownLoad.do',
method: 'post',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;application/octet-stream'
},
transformRequest: [() => {
let ret = ''
for (let i in params) {
ret += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]) + '&'
}
return ret
}],
data: params,
responseType: 'blob'
}).then(res => {
if ('msSaveOrOpenBlob' in navigator) {
var data = res
var blob = new Blob([data], { type: 'application/vnd.ms-excel' })
window.navigator.msSaveOrOpenBlob(data, 'MSPOptJnl' + new Date().getTime() + '.xls')
} else {
let blob = new Blob([res])
let downloadElement = document.createElement('a')
let href = URL.createObjectURL(blob)
downloadElement.href = href
downloadElement.download = 'mcif.TellerList_' + new Date().getTime() + '.xls'
document.body.appendChild(downloadElement)
downloadElement.click()
document.body.removeChild(downloadElement)
window.URL.revokeObjectURL(href)
}
})
.catch(err => {
console.log(err);
})
}
2、后端列返回的是纯数组,采用模板拼接数据,IE采用msSaveBlob进行下载,chorme还是采用模拟点击,具体如下
/* 文件下载 */
export function fileDownload(params) {
api({
url: 'msp.MspTransOprtJnl.do',
method: 'post',
data: params,
}).then(res => {
let str = `机构编号,机构名称,MSP客户编号,客户姓名,操作内容,操作起止日期\n`;
let name = ['TransDeptId', 'TransDeptName', 'OptId', 'OptName', 'TransBusGroupName', 'TransDate']
// 增加\t为了不让表格显示科学计数法或者其他格式
for (let i = 0; i < res.List.length; i++) {
for (const key in res.List[i]) {
for (let j = 0; j < name.length; j++) {
if (key == name[j]) {
str += `${res.List[i][key] + '\t'},`;
}
}
}
str += '\n';
}
if ('msSaveOrOpenBlob' in navigator) {
var blob = new Blob([decodeURIComponent(encodeURI(str))], { type: "text/csv;charset=utf-8;" });
navigator.msSaveBlob(blob, 'MSPOptJnl' + new Date().getTime() + '.xls');//filename文件名包括扩展名,下载路径为浏览器默认路径
} else {
// encodeURIComponent解决中文乱码
const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
// 通过创建a标签实现
const link = document.createElement("a");
link.href = uri;
// 对下载的文件命名
link.download = 'MSPOptJnl' + new Date().getTime() + '.xls';
link.click();
}
})
.catch(err => {
console.log(err);
})
}
织梦狗教程
本文标题为:记一次vue将列表下载为excel的兼容写法


基础教程推荐
猜你喜欢
- 解决:layUI数据表格+简单查询 2022-12-16
- 纯javascript的ajax实现php异步提交表单的简单实例 2022-12-28
- ajax实现数据分页查询 2023-01-31
- 在IE中为abbr标签加样式 2022-10-16
- JavaScript垃圾回收机制(引用计数,标记清除,性能优 2022-08-31
- AJax 把拿到的后台数据在页面中渲染的实例 2023-02-22
- 关于ajax异步访问数据的问题 2023-02-23
- Unicode中的常用字母小结 2022-09-21
- Ajax提交表单并接收json实例代码 2023-02-13
- 原生ajax瀑布流demo分享(必看篇) 2023-02-01