123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 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;
|