前端使用的是 axios
封装 request 方法:
//requestResponse.js
import axios from "axios";
import { getToken } from "@/utils/auth.js";
import { Message } from "element-ui";
import store from "@/store/index";
let Obj = window.location;
let url = `${Obj.protocol}//${Obj.host}${Obj.pathname}#`;
const SERVICEDEFAULT = axios.create({
timeout: 600000
});
SERVICEDEFAULT.interceptors.request.use(
config => {
let token = getToken();
if (token != null) {
config.headers.Authorization = `Bearer ` + token;
}
return config;
},
err => {
return Promise.reject(err);
}
);
SERVICEDEFAULT.interceptors.response.use(
response => {
if (response.data.code === 401) {
Message.error(response.data.msg);
store.dispatch("app/Cancellation"); //退出登录清空所有存储的信息
window.location.href = url + "/login";
}
return response;
},
error => {
if (error && error.response) {
Message.error(error.response.data.msg || error.response.data.error);
if (error.response.status === 401) {
store.dispatch("app/Cancellation");
window.location.href = url + "/login";
}
}
return Promise.reject(error);
}
);
SERVICEDEFAULT.all = axios.all; // all方法没有挂载到 axios 实例对象中
export { SERVICEDEFAULT };
api 封装:
import { SERVICEDEFAULT as request3 } from "./requestResponse.js";
export function exportMemory(params) {
return request({
responseType: "blob",// 特别重要
url: `/api/export/excel`,
method: "post",
data: params
});
}
封装下载方法:
// 导出文件 fileStream 文件流 name 文件名称带后缀
export function exportFile(fileStream, name) {
let blob = new Blob([fileStream], {
type:
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
});
let downloadElement = document.createElement("a");
let href = window.URL.createObjectURL(blob);
downloadElement.href = href;
downloadElement.download = name; // xxx.xls/xxx.xlsx
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
window.URL.revokeObjectURL(href);
}
代码中使用:
exportHandle() {
if(this.selectList.length === 0) {
this.$message.warning("请选择需要导出的数据!");
return;
}
let ids = [];
this.selectList.forEach(el => {
ids.push(el.id)
})// 下载的内容,自定义
exportMemory(ids).then(res => {
if(res.code === 500) {
this.$message.error(res.msg);// 报错信息弹出
return;
}
let fileName = res.headers["content-disposition"].split("=")[1];// 获取后端返回在响应头中的文件名
exportFile(res.data, fileName );
// this.$message.error(fileName);
})
},