123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- import axios from "axios";
- import NProgress from "nprogress";
- import "nprogress/nprogress.css";
- import { ElMessage } from "element-plus";
- import { endsWith } from "lodash-es";
- import { storage } from "/@/cool/utils";
- import { useBase } from "/$/base";
- import { router } from "../router";
- import { config, isDev } from "/@/config";
- const request = axios.create({
- timeout: import.meta.env.VITE_TIMEOUT,
- withCredentials: false
- });
- NProgress.configure({
- showSpinner: true
- });
- // 请求队列
- let queue: Array<(token: string) => void> = [];
- // 是否刷新中
- let isRefreshing = false;
- // 请求
- request.interceptors.request.use(
- (req: any) => {
- const { user } = useBase();
- if (req.url) {
- // 请求进度条
- if (
- !config.ignore.NProgress.some((e) => req.url.match(new RegExp(`${e}.*`))) &&
- (req.NProgress ?? true)
- ) {
- NProgress.start();
- }
- }
- // 请求信息
- if (isDev) {
- console.group(req.url);
- console.log("method:", req.method);
- console.table("data:", req.method == "get" ? req.params : req.data);
- console.groupEnd();
- }
- // 验证 token
- if (user.token) {
- // 请求标识
- if (req.headers && req.headers["Authorization"] !== null) {
- req.headers["Authorization"] = user.token;
- }
- // 忽略
- if (["eps", "refreshToken"].some((e) => endsWith(req.url, e))) {
- return req;
- }
- // 判断 token 是否过期
- if (storage.isExpired("token")) {
- // 判断 refreshToken 是否过期
- if (storage.isExpired("refreshToken")) {
- ElMessage.error("登录状态已失效,请重新登录");
- user.logout();
- } else {
- // 是否在刷新中
- if (!isRefreshing) {
- isRefreshing = true;
- user.refreshToken()
- .then((token) => {
- queue.forEach((cb) => cb(token));
- queue = [];
- isRefreshing = false;
- })
- .catch(() => {
- user.logout();
- });
- }
- return new Promise((resolve) => {
- // 继续请求
- queue.push((token) => {
- // 重新设置 token
- if (req.headers) {
- req.headers["Authorization"] = token;
- }
- resolve(req);
- });
- });
- }
- }
- }
- return req;
- },
- (error) => {
- return Promise.reject(error);
- }
- );
- // 响应
- request.interceptors.response.use(
- (res) => {
- NProgress.done();
- if (!res?.data) {
- return res;
- }
- const { code, data, message } = res.data;
- if (!code) {
- return res.data;
- }
- switch (code) {
- case 1000:
- return data;
- default:
- return Promise.reject({ code, message });
- }
- },
- async (error) => {
- NProgress.done();
- if (error.response) {
- const { status } = error.response;
- const { user } = useBase();
- if (status == 401) {
- user.logout();
- } else {
- if (!isDev) {
- switch (status) {
- case 403:
- router.push("/403");
- break;
- case 500:
- router.push("/500");
- break;
- case 502:
- router.push("/502");
- break;
- }
- }
- }
- }
- return Promise.reject({ message: error.message });
- }
- );
- export { request };
|