因?yàn)檫@次要導(dǎo)出的excel數(shù)據(jù)有點(diǎn)復(fù)雜饿自,并且使用的是post請(qǐng)求蚌吸,所以跟以前的導(dǎo)出做的不一樣锈拨,
然后說一下自己遇到的問題吧,返回的數(shù)據(jù)是亂碼羹唠,然后因?yàn)楹蠖藷o論怎么樣都會(huì)有返回奕枢,所以我封裝的請(qǐng)求無法得到 res.code === 200 永遠(yuǎn)走的都是catch里面娄昆,然后我找了半天才發(fā)現(xiàn)原因,一直以為是我獲取數(shù)據(jù)是亂碼的問題验辞,然后一直認(rèn)為自己的responseType:'blob'沒作用稿黄,找了各種問題,最后才找到所在跌造,就單純記錄一下杆怕,然后這個(gè)下載的方法我直接到網(wǎng)上找的
// 日?qǐng)?bào)告導(dǎo)出
async datTimeExport(){
let form1 = {
type:1,
ids:[24,26],
date:"2022-07-23",
}
try {
const data = await this.$http.exportExcel('/patrol/patrol-log-export',form1,{responseType:'blob'})
// console.log(data)
this.download(data) // 導(dǎo)出excel
} catch (error) {
console.log(error)
}
},
// 下載文件
download (data) {
if (!data) {
return
}
window.URL = window.URL || window.webkitURL // 兼容性
// 創(chuàng)建一個(gè) URL 這個(gè) URL 的生命周期和創(chuàng)建它的窗口中的 document 綁定。這個(gè)新的URL 對(duì)象表示指定的 File 對(duì)象或 Blob 對(duì)象壳贪。
let url = window.URL.createObjectURL(new Blob([data]))
let link = document.createElement('a') // 創(chuàng)建一個(gè)a元素
link.style.display = 'none' // 讓a元素在頁面中隱藏
link.href = url // 綁定 a 元素的 href 為當(dāng)前的url
link.setAttribute('download', 'excel.xlsx') // 設(shè)置 a 元素的屬性
document.body.appendChild(link) // 添加到頁面中
link.click() // 點(diǎn)擊a元素 下載excel文件
window.URL.revokeObjectURL(url)
},
封裝的請(qǐng)求接口
// 文件下載導(dǎo)出
http.exportExcel = (url,data,config) => {
return instance.post(url,data,config).then(res => {
// console.log(res)
return res
// if(res.code === 200 ){
// console.log(res)
// return res
// }
// else{
// console.log(res)
// return Promise.reject(res);
// }
})
}