1、封裝導出的方法
export function httpExport (url, params) { return new Promise((resolve, reject) => { axios({ url: url, method: 'post', data: params, responseType: 'blob' }) .then(res => { debugger resolve(res) }) .catch(err => { if (err === undefined || err.__CANCEL__) { return } notification.error({ title: '錯誤', message: err }) reject(err) }) }) }
2、處理respones數據
if (res) { const fileName = '未綁定IC卡列表.xlsx' const content = res.data const blob = new Blob([content]) if ('download' in document.createElement('a')) { // 非IE下載 const elink = document.createElement('a') elink.download = fileName elink.style.display = 'none' elink.href = URL.createObjectURL(blob) document.body.appendChild(elink) elink.click() URL.revokeObjectURL(elink.href) // 釋放URL 對象 document.body.removeChild(elink) } else { // IE10+下載 navigator.msSaveBlob(blob, fileName) } }
3、在axios攔截器中處理響應體(普通的響應體是response.data)
if ( response.headers['content-type'] === 'application/vnd.ms-excel;charset=UTF-8' ) { // 是否為導出 return Promise.resolve(response) }