请求options配置getResponse为true,responseType为"blob"
import request from '@/utils/request';
export async function queryUnitTable(params) {
let reportUrl = location.origin;
if (location.pathname.slice(-1) === "/") {
reportUrl = location.origin + location.pathname.slice(0, -1);
} else if (location.pathname) {
reportUrl = location.origin + location.pathname;
}
//导出
if (params.action === "export") {
return request(`${reportUrl}/report`, {
method: 'POST',
data: params,
getResponse: true,
responseType: "blob",
});
}
return request(`${reportUrl}/report`, {
method: 'POST',
data: params,
});
}
导出方法:
*exportView({ payload: exportType }, { call, select }) {
const { columnsRender, searchParams: { condition } } = yield select(state => state.unitReport);
const params = {
url: location.href,
action: "export",
file_type: exportType,
fields: columnsRender.map(item => item.key),
condition: condition || [],
};
const response = yield call(queryUnitTable, params);
if (!response) return false;
const { data: blob, response: { headers } } = response;
let fileName = "";
//获取响应头信息--导出文件名称
for (let item of headers.entries()) {
if (item[0] === "content-disposition") {
fileName = item[1].split('"')[1];
}
}
const aLink = document.createElement('a');
document.body.appendChild(aLink); //兼容火狐
aLink.style.display = 'none';
const objectUrl = URL.createObjectURL(blob);
aLink.href = objectUrl;
aLink.download = fileName;
aLink.click();
document.body.removeChild(aLink);
},