export async function blobValidate(data) {
try {
const text = await data.text();
JSON.parse(text);
return false;
} catch (error) {
return true;
}
}
export function download(url, params, name) {
let downloadLoadingInstance;
downloadLoadingInstance = Loading.service({
text: "正在下载数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
return service
.get(url, {
headers: { "Content-Type": "application/x-www-form-urlencoded" },
params: params,
responseType: "blob",
})
.then(async (data) => {
const isBlob = await blobValidate(data.data);
const fileNameEncode =
data.headers["content-disposition"].split("filename=")[1];
var fileName = decodeURIComponent(fileNameEncode);
if (isBlob) {
const blob = new Blob([data.data]);
saveAs(blob, fileName || name);
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = rspObj.message;
Message.error(errMsg);
}
downloadLoadingInstance.close();
})
.catch((r) => {
console.error(r);
Message.error("下载文件出现错误,请联系管理员!");
downloadLoadingInstance.close();
});
}
<el-button
type="text"
@click="handleExport(item.id, item.reportName)"
icon="iconfont if-xiazai"
>下载
</el-button>
handleExport(id, name) {
this.download(
requestType.trafficTrend + "/trafficRun/dataReport/exportDay",
{ id },
`${name}.doc`,
);
},
export function downloadPost(formData, url, name) {
let downloadLoadingInstance;
downloadLoadingInstance = Loading.service({
text: "正在下载数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
return axios({
method: "post",
url: process.env.VUE_APP_BASE_API + url,
data: formData,
responseType: "blob",
headers: {
Authorization: getToken(),
"Content-Type": "application/json",
},
}).then(async (data) => {
const isBlob = await blobValidate(data.data);
const fileNameEncode =
data.headers["content-disposition"]?.split("filename=")[1];
var fileName = decodeURIComponent(fileNameEncode);
if (isBlob) {
const blob = new Blob([data.data]);
saveAs(blob, fileName);
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = rspObj.message;
Message.error(errMsg);
}
downloadLoadingInstance.close();
});
}
export function downloadPost(formData, url) {
let downloadLoadingInstance;
downloadLoadingInstance = Loading.service({
text: "正在下载数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
return axios({
method: "post",
url: process.env.VUE_APP_BASE_API + url,
data: formData,
responseType: "blob",
headers: {
Authorization: getToken(),
"Content-Type": "application/json",
},
}).then(async (data) => {
const isBlob = await blobValidate(data.data);
const fileNameEncode =
data.headers["content-disposition"].split("filename=")[1];
var fileName = decodeURIComponent(fileNameEncode);
if (isBlob) {
const blob = new Blob([data.data]);
saveAs(blob, fileName);
} else {
let isBlob1 = await blobValidate(data)
if (isBlob1) {
const blob1 = new Blob([data.data]);
saveAs(blob1, fileName);
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = rspObj.message;
Message.error(errMsg);
}
}
downloadLoadingInstance.close();
});
}
downloadPost(
response.data,
requestType.system + "/system/axis/exportExcel"
);