import axios from "axios"; import router from "@/router"; import { getAuthorization } from "./crypto"; import { useUserStore } from "@/store"; const env = import.meta.env; const axiosInstance = axios.create({ baseURL: env.VITE_ENV === "dev" ? "" : env.VITE_API_HOST, timeout: 60000, withCredentials: false, headers: { "Access-Control-Allow-Origin": "*", "Content-Type": "application/json", }, }); function setAuth(config) { let userStorage = localStorage.getItem("user"); if (userStorage && !config.noAuth) { let loginInfo = JSON.parse(userStorage).loginInfo; const timestamp = Date.now(); const authorization = getAuthorization( { method: config.method, uri: config.url.split("?")[0].trim(), timestamp, sessionId: loginInfo.sessionId, token: loginInfo.token, }, "token" ); config.headers["Authorization"] = authorization; config.headers["time"] = timestamp; } } axiosInstance.interceptors.request.use( (config) => { setAuth(config); if (config.loading) { allowMultipleToast(); config.toast = showLoadingToast({ forbidClick: true, loadingType: "spinner", duration: 0, }); } return config; }, (error) => { return Promise.reject(error); } ); axiosInstance.interceptors.response.use( async (response) => { if (response.config.loading) { response.config.toast?.close(); } return response.data; // if (response.request.responseType === "blob") { // return { code: 200, data: response.data, msg: "success" }; // } // const { code, msg } = response.data; // if (code === 200) { // return response.data; // } else { // const errMsg = msg // ? typeof msg === "string" // ? msg // : msg.detail // : "服务器异常"; // showToast(errMsg); // return Promise.reject(errMsg); // } }, (error) => { console.log("[request error] > ", error); if (error && error.response) { error.response.config.toast?.close(); switch (error.response.status) { case 400: error.message = "请求参数错误(400)"; break; case 401: // error.message = "请重新登录(401)"; // router.replace({ name: "Login" }); const userStore = useUserStore(); userStore.logout(true); location.reload(); break; case 403: error.message = "拒绝访问(403)"; break; case 404: error.message = "请求出错(404)"; break; case 405: error.message = "请求方法不支持(405)"; break; case 408: error.message = "请求超时(408)"; break; case 500: error.message = "服务器异常(500)"; break; case 501: error.message = "服务未实现(501)"; break; case 502: error.message = "网络错误(502)"; break; case 503: error.message = "网络超时(503)"; break; case 504: error.message = "网络超时(504)"; break; case 505: error.message = "HTTP版本不受支持(505)"; break; default: error.message = `连接出错(${error.response.status})!`; } } else { error.message = "服务连接失败"; } if (error?.response?.data?.message) { error.message = error?.response?.data?.message; } const whiteUrls = ["/api/student/login/get/openid"]; !whiteUrls.includes(error?.config?.url) && showToast(error.message); return Promise.reject(error); } ); const request = (options) => { return axiosInstance(options); }; export default request;