|
|
|
|
@ -0,0 +1,125 @@
|
|
|
|
|
import axios from "axios";
|
|
|
|
|
import { getToken } from "@/utils/auth";
|
|
|
|
|
import { Loading, Message } from "element-ui";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @params {string} url 请求拼接地址
|
|
|
|
|
* @params {object} info 请求参数params或data
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
let loading;
|
|
|
|
|
function customParamsSerializer(params) {
|
|
|
|
|
let result = '';
|
|
|
|
|
for (let key in params) {
|
|
|
|
|
if (params.hasOwnProperty(key)) {
|
|
|
|
|
if (Array.isArray(params[key])) {
|
|
|
|
|
params[key].forEach((item,index) => {
|
|
|
|
|
if(item.key){
|
|
|
|
|
result += `${key}[${index}][key]=${item.key}&${key}[${index}][op]=${item.op}&${key}[${index}][value]=${item.value}&`;
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
result +=`${key}[${index}]=${item}&`
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}else if( typeof params[key] === 'object' ){
|
|
|
|
|
for(var k in params[key]){
|
|
|
|
|
result +=`${key}[${k}]=${params[key][k]}&`
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
result += `${key}=${params[key]}&`;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// result += 'token='+getToken()
|
|
|
|
|
console.log("result",result, result.slice(0, -1))
|
|
|
|
|
return result.slice(0, -1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function download(url, method = "get", info, filename) {
|
|
|
|
|
loading = Loading.service({
|
|
|
|
|
lock: true,
|
|
|
|
|
background: "rgba(0,0,0,0.4)",
|
|
|
|
|
text: "文件正在生成中...",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let options = {
|
|
|
|
|
baseURL: process.env.VUE_APP_BASE_API,
|
|
|
|
|
url,
|
|
|
|
|
method,
|
|
|
|
|
responseType: "blob",
|
|
|
|
|
timeout: 10000,
|
|
|
|
|
headers: {
|
|
|
|
|
Accept: "application/json",
|
|
|
|
|
"Content-Type": "application/json; charset=utf-8",
|
|
|
|
|
withCredentials: true,
|
|
|
|
|
Authorization: "Bearer " + getToken(),
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
if (method === "get") {
|
|
|
|
|
// options.url = url+'?'+customParamsSerializer(info)
|
|
|
|
|
Object.defineProperty(options, "params", {
|
|
|
|
|
value: info,
|
|
|
|
|
enumerable: true,
|
|
|
|
|
writable: false,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
if (method === "post") {
|
|
|
|
|
Object.defineProperty(options, "data", {
|
|
|
|
|
value: info,
|
|
|
|
|
enumerable: true,
|
|
|
|
|
writable: false,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if(options.method==='get'){
|
|
|
|
|
options.paramsSerializer = customParamsSerializer
|
|
|
|
|
}
|
|
|
|
|
console.log("options",options)
|
|
|
|
|
const response = await axios.request(options);
|
|
|
|
|
|
|
|
|
|
loading.close();
|
|
|
|
|
|
|
|
|
|
// 提取文件名
|
|
|
|
|
if (!filename) {
|
|
|
|
|
filename =
|
|
|
|
|
response.headers["content-disposition"]?.match(/filename=(.*)/)[1] ||
|
|
|
|
|
"";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 将二进制流转为blob
|
|
|
|
|
const blob = new Blob([response.data], {
|
|
|
|
|
type: "application/octet-stream",
|
|
|
|
|
});
|
|
|
|
|
if (typeof window.navigator.msSaveBlob !== "undefined") {
|
|
|
|
|
// 兼容IE,window.navigator.msSaveBlob:以本地方式保存文件
|
|
|
|
|
window.navigator.msSaveBlob(blob, decodeURI(filename));
|
|
|
|
|
} else {
|
|
|
|
|
// 创建新的URL并指向File对象或者Blob对象的地址
|
|
|
|
|
const blobURL = window.URL.createObjectURL(blob);
|
|
|
|
|
// 创建a标签,用于跳转至下载链接
|
|
|
|
|
const tempLink = document.createElement("a");
|
|
|
|
|
tempLink.style.display = "none";
|
|
|
|
|
tempLink.href = blobURL;
|
|
|
|
|
tempLink.setAttribute("download", decodeURI(filename));
|
|
|
|
|
// 兼容:某些浏览器不支持HTML5的download属性
|
|
|
|
|
if (typeof tempLink.download === "undefined") {
|
|
|
|
|
tempLink.setAttribute("target", "_blank");
|
|
|
|
|
}
|
|
|
|
|
// 挂载a标签
|
|
|
|
|
document.body.appendChild(tempLink);
|
|
|
|
|
tempLink.click();
|
|
|
|
|
document.body.removeChild(tempLink);
|
|
|
|
|
// 释放blob URL地址
|
|
|
|
|
window.URL.revokeObjectURL(blobURL);
|
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err);
|
|
|
|
|
loading.close();
|
|
|
|
|
Message({
|
|
|
|
|
type: "error",
|
|
|
|
|
message: err,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|