|
|
|
|
import axios from "axios";
|
|
|
|
|
import { Notification, MessageBox, Message, Loading } from "element-ui";
|
|
|
|
|
import store from "@/store";
|
|
|
|
|
import { getToken } from "@/utils/auth";
|
|
|
|
|
import errorCode from "@/utils/errorCode";
|
|
|
|
|
import { tansParams, blobValidate } from "@/utils/ruoyi";
|
|
|
|
|
import cache from "@/plugins/cache";
|
|
|
|
|
import { saveAs } from "file-saver";
|
|
|
|
|
import Cookies from "js-cookie";
|
|
|
|
|
import API from "@/api/index.js";
|
|
|
|
|
|
|
|
|
|
let downloadLoadingInstance;
|
|
|
|
|
// 是否显示重新登录
|
|
|
|
|
export let isRelogin = { show: false };
|
|
|
|
|
|
|
|
|
|
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
|
|
|
|
|
// 创建axios实例
|
|
|
|
|
const service = axios.create({
|
|
|
|
|
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
|
|
|
|
// !本地使用
|
|
|
|
|
baseURL: process.env.VUE_APP_BASE_API,
|
|
|
|
|
|
|
|
|
|
// !外地使用
|
|
|
|
|
// baseURL: location.origin + process.env.VUE_APP_URL,
|
|
|
|
|
// 超时
|
|
|
|
|
timeout: 60000,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// request拦截器
|
|
|
|
|
service.interceptors.request.use(
|
|
|
|
|
(config) => {
|
|
|
|
|
// 是否需要设置 token
|
|
|
|
|
const isToken = (config.headers || {}).isToken == undefined ? true : false;
|
|
|
|
|
// 是否需要防止数据重复提交
|
|
|
|
|
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
|
|
|
|
|
if (isToken) {
|
|
|
|
|
config.headers["Authentication"] = localStorage.getItem("MSSM-LIAONING__TOKEN");
|
|
|
|
|
}
|
|
|
|
|
// get请求映射params参数
|
|
|
|
|
if (config.method === "get" && config.params) {
|
|
|
|
|
let url = config.url + "?" + tansParams(config.params);
|
|
|
|
|
url = url.slice(0, -1);
|
|
|
|
|
config.params = {};
|
|
|
|
|
config.url = url;
|
|
|
|
|
}
|
|
|
|
|
if (
|
|
|
|
|
!isRepeatSubmit &&
|
|
|
|
|
(config.method === "post" || config.method === "put")
|
|
|
|
|
) {
|
|
|
|
|
const requestObj = {
|
|
|
|
|
url: config.url,
|
|
|
|
|
data:
|
|
|
|
|
typeof config.data === "object"
|
|
|
|
|
? JSON.stringify(config.data)
|
|
|
|
|
: config.data,
|
|
|
|
|
time: new Date().getTime(),
|
|
|
|
|
};
|
|
|
|
|
const sessionObj = cache.session.getJSON("sessionObj");
|
|
|
|
|
if (
|
|
|
|
|
sessionObj === undefined ||
|
|
|
|
|
sessionObj === null ||
|
|
|
|
|
sessionObj === ""
|
|
|
|
|
) {
|
|
|
|
|
cache.session.setJSON("sessionObj", requestObj);
|
|
|
|
|
} else {
|
|
|
|
|
const s_url = sessionObj.url; // 请求地址
|
|
|
|
|
const s_data = sessionObj.data; // 请求数据
|
|
|
|
|
const s_time = sessionObj.time; // 请求时间
|
|
|
|
|
const interval = 2000; // 间隔时间(ms),小于此时间视为重复提交
|
|
|
|
|
if (
|
|
|
|
|
s_data === requestObj.data &&
|
|
|
|
|
requestObj.time - s_time < interval &&
|
|
|
|
|
s_url === requestObj.url
|
|
|
|
|
) {
|
|
|
|
|
const message = "数据正在处理,请勿重复提交";
|
|
|
|
|
console.warn(`[${s_url}]: ` + message);
|
|
|
|
|
return Promise.reject(new Error(message));
|
|
|
|
|
} else {
|
|
|
|
|
cache.session.setJSON("sessionObj", requestObj);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return config;
|
|
|
|
|
},
|
|
|
|
|
(error) => {
|
|
|
|
|
Promise.reject(error);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 响应拦截器
|
|
|
|
|
service.interceptors.response.use(
|
|
|
|
|
(res) => {
|
|
|
|
|
// console.log("响应数据",res)
|
|
|
|
|
// 未设置状态码则默认成功状态
|
|
|
|
|
const code = res.data.code || 200;
|
|
|
|
|
// 获取错误信息
|
|
|
|
|
const msg = errorCode[code] || res.data.msg || errorCode["default"];
|
|
|
|
|
// 二进制数据则直接返回
|
|
|
|
|
if (
|
|
|
|
|
res.request.responseType === "blob" ||
|
|
|
|
|
res.request.responseType === "arraybuffer"
|
|
|
|
|
) {
|
|
|
|
|
return res.data;
|
|
|
|
|
}
|
|
|
|
|
if (code === 401) {
|
|
|
|
|
if (!isRelogin.show) {
|
|
|
|
|
isRelogin.show = true;
|
|
|
|
|
MessageBox.confirm(
|
|
|
|
|
"登录状态已过期,您可以继续留在该页面,或者重新登录",
|
|
|
|
|
"系统提示",
|
|
|
|
|
{
|
|
|
|
|
confirmButtonText: "重新登录",
|
|
|
|
|
cancelButtonText: "取消",
|
|
|
|
|
type: "warning",
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
.then(() => {
|
|
|
|
|
localStorage.removeItem("Login_index");
|
|
|
|
|
localStorage.removeItem("loginName");
|
|
|
|
|
isRelogin.show = false;
|
|
|
|
|
location.href = `${location.origin}${process.env.VUE_APP_URL}/pharmaceuticals/singleSignOn/signOut`;
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
isRelogin.show = false;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
|
|
|
|
|
} else if (code == 403) {
|
|
|
|
|
localStorage.removeItem("Login_index");
|
|
|
|
|
localStorage.removeItem("loginName");
|
|
|
|
|
location.href = `${location.origin}${process.env.VUE_APP_URL}/pharmaceuticals/singleSignOn/signOut`;
|
|
|
|
|
} else if (code === 500) {
|
|
|
|
|
Message({ message: msg, type: "error" });
|
|
|
|
|
return Promise.reject(new Error(msg));
|
|
|
|
|
} else if (code === 601) {
|
|
|
|
|
Message({ message: msg, type: "warning" });
|
|
|
|
|
return Promise.reject("error");
|
|
|
|
|
} else if (code !== 200) {
|
|
|
|
|
Notification.error({ title: msg });
|
|
|
|
|
return Promise.reject("error");
|
|
|
|
|
} else {
|
|
|
|
|
return res.data;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async(error) => {
|
|
|
|
|
// console.log(error);
|
|
|
|
|
// console.log(error.response)
|
|
|
|
|
let { message } = error;
|
|
|
|
|
// console.log(3333, message);
|
|
|
|
|
if (
|
|
|
|
|
message == "Request failed with status code 401" ||
|
|
|
|
|
message == "Request failed with status code 500"
|
|
|
|
|
) {
|
|
|
|
|
let Authentication = await API.login.frimLogin();
|
|
|
|
|
const originalRequest = error.config;
|
|
|
|
|
originalRequest.headers["Authentication"] = Authentication.data.result.userToken;
|
|
|
|
|
localStorage.setItem(
|
|
|
|
|
"Authentication",
|
|
|
|
|
Authentication.data.result.userToken
|
|
|
|
|
);
|
|
|
|
|
return axios.request(originalRequest);
|
|
|
|
|
// if (!isRelogin.show) {
|
|
|
|
|
// isRelogin.show = true;
|
|
|
|
|
// MessageBox.confirm(
|
|
|
|
|
// "登录状态已过期,您可以继续留在该页面,或者重新登录",
|
|
|
|
|
// "系统提示",
|
|
|
|
|
// {
|
|
|
|
|
// confirmButtonText: "重新登录",
|
|
|
|
|
// cancelButtonText: "取消",
|
|
|
|
|
// type: "warning",
|
|
|
|
|
// }
|
|
|
|
|
// )
|
|
|
|
|
// .then(() => {
|
|
|
|
|
// localStorage.removeItem("Login_index");
|
|
|
|
|
// localStorage.removeItem("loginName");
|
|
|
|
|
// localStorage.removeItem("Authentication");
|
|
|
|
|
// localStorage.removeItem("Ls-Token");
|
|
|
|
|
// isRelogin.show = false;
|
|
|
|
|
// location.href = `${location.origin}${process.env.VUE_APP_URL}/pharmaceuticals/singleSignOn/signOut`;
|
|
|
|
|
// })
|
|
|
|
|
// .catch(() => {
|
|
|
|
|
// isRelogin.show = false;
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
// if (message == "Network Error") {
|
|
|
|
|
// message = "后端接口连接异常";
|
|
|
|
|
// } else if (message.includes("timeout")) {
|
|
|
|
|
// message = "系统接口请求超时";
|
|
|
|
|
// } else if (message.includes("Request failed with status code")) {
|
|
|
|
|
// message = "系统接口" + message.substr(message.length - 3) + "异常";
|
|
|
|
|
// }
|
|
|
|
|
// Message({ message: message, type: "error", duration: 5 * 1000 });
|
|
|
|
|
return Promise.reject(error);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 通用下载方法
|
|
|
|
|
export function download(file, name) {
|
|
|
|
|
downloadLoadingInstance = Loading.service({
|
|
|
|
|
text: "正在下载数据,请稍候",
|
|
|
|
|
spinner: "el-icon-loading",
|
|
|
|
|
background: "rgba(0, 0, 0, 0.7)",
|
|
|
|
|
});
|
|
|
|
|
console.log(file);
|
|
|
|
|
// return service
|
|
|
|
|
// .get(
|
|
|
|
|
// //process.env.VUE_APP_BASE_API +
|
|
|
|
|
// '/common/download/downloadmino?filename=' + file, {
|
|
|
|
|
// headers: { "Content-Type": "application/x-www-form-urlencoded" ,"Authorization":localStorage.getItem("MSSM-LIAONING__TOKEN"),"token":localStorage.getItem("Ls__Token")},
|
|
|
|
|
// responseType: "blob",
|
|
|
|
|
// })
|
|
|
|
|
// .then(async(resp) => {
|
|
|
|
|
// const isBlob = blobValidate(resp);
|
|
|
|
|
// if (isBlob) {
|
|
|
|
|
// const blob = new Blob([resp]);
|
|
|
|
|
// saveAs(blob, name);
|
|
|
|
|
// } else {
|
|
|
|
|
// const resText = await resp.text();
|
|
|
|
|
// const rspObj = JSON.parse(resText);
|
|
|
|
|
// const errMsg =
|
|
|
|
|
// errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
|
|
|
|
|
// Message.error(errMsg);
|
|
|
|
|
// }
|
|
|
|
|
// downloadLoadingInstance.close();
|
|
|
|
|
// console.log(resp);
|
|
|
|
|
// // let temp = document.createElement("a"); // 创建a标签
|
|
|
|
|
// // temp.download = name; // 设置下载名称
|
|
|
|
|
// // // 创建blob对象,在javascript中blob代表一个二进制流对象,不可修改
|
|
|
|
|
// // const blob = new Blob([resp.data], {
|
|
|
|
|
// // // 类型从响应头中获取
|
|
|
|
|
// // type: resp.headers["content-type"],
|
|
|
|
|
// // });
|
|
|
|
|
// // // 创建对象url,并赋值给a标签
|
|
|
|
|
// // let URL = window.URL || window.webkitURL;
|
|
|
|
|
// // temp.href = URL.createObjectURL(blob);
|
|
|
|
|
// // // 手动触发点击事件
|
|
|
|
|
// // temp.click();
|
|
|
|
|
// // downloadLoadingInstance.close();
|
|
|
|
|
// })
|
|
|
|
|
// .catch((r) => {
|
|
|
|
|
// console.error(r);
|
|
|
|
|
// Message.error("下载文件错误!");
|
|
|
|
|
// downloadLoadingInstance.close();
|
|
|
|
|
// });
|
|
|
|
|
// 路径
|
|
|
|
|
// var url = ""
|
|
|
|
|
// // 会打开一个空白页下载,然后空白页消失,用户体验不好
|
|
|
|
|
// function download1() {
|
|
|
|
|
// window.open(url);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// window.open(process.env.VUE_APP_BASE_API +
|
|
|
|
|
// '/common/download/downloadmino?filename=' + file,'这是我的文件',null,null)
|
|
|
|
|
const link = document.createElement("a");
|
|
|
|
|
link.setAttribute(
|
|
|
|
|
"href",
|
|
|
|
|
process.env.VUE_APP_BASE_API == undefined
|
|
|
|
|
? location.origin + process.env.VUE_APP_URL
|
|
|
|
|
: process.env.VUE_APP_BASE_API +
|
|
|
|
|
"/common/downloadmino/download?filename=" +
|
|
|
|
|
file
|
|
|
|
|
); //设置下载文件的url地址
|
|
|
|
|
link.download = name; //用于设置下载文件的文件名
|
|
|
|
|
link.click();
|
|
|
|
|
downloadLoadingInstance.close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default service;
|