1、后端接口方式实现下载功能(excel为例),直接上代码
exportDown() {
toExcel().then((res)=>{//下载接口
let url = window.URL.createObjectURL(new Blob([res.data],{type: "application/vnd.ms-excel"}))
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', '下载列表')// 文件名
document.body.appendChild(link)
link.click()
document.body.removeChild(link) // 下载完成移除元素
window.URL.revokeObjectURL(url) // 释放掉blob对象
this.$Message.success('下载成功!')
})
}
接口:
export function toExcel(startTime,endTime,deptCode,pipeLineId) {
return request({
url: 'xqds-hse/cathodicprotectionrecord/toExcel?startTime='+startTime+'&endTime='+endTime+'&deptCode='+deptCode+'&pipeLineId='+pipeLineId,
method: 'get',
responseType: "blob"//请求接口一定要设置这个属性
})
}
2、前端实现查询的列表进行导出下载
首先准备一个隐藏的table将数据全部渲染出来,不做分页,不然直接将分页列表下载只会导出当前第一页的数据哦!废话不多说,直接上代码
<Table class="hse_table" border :columns="columns" :data="dataTable" @on-selection-change="selectData"></Table>
exportDown() {
const worksheet = XLSX.utils.json_to_sheet(this.dataTable);//dataTable绑定的table数据
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
const excelBuffer = XLSX.write(workbook, {
bookType: 'xlsx',
type: 'array'
});
const blob = new Blob([excelBuffer], { type: 'application/vnd.ms-excel' });
FileSaver.saveAs(blob, '下载列表'); // 下载文件 文件名
}
//注:前端此方法有bug,下载的excel可能第一行属性为英文字段,需要自己手写处理这块儿bug,如有可解决的方式,欢迎亲们讨论区共享或讨论哦