"use strict"; import axios from "axios"; import router from "@/router"; import {useRequestLoading} from '@/hooks/useRequestLoading' import { MessagePlugin } from 'tdesign-vue-next'; import CryptoJS from '@/utils/crypto' // Full config: https://github.com/axios/axios#request-config // axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || ''; // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; //loading动画白名单 const LOADINGWHITELIST=[] // 请求数 let LOADINGCOUNT = 0; let LOADING; // 这里搞这个hook是为了如果要全局设置接口loading 就用这个 const {isLoading,startLoading,closeLoading}=useRequestLoading() let config = { baseURL: import.meta.env.VITE_APP_API_URL, timeout: 10*60 * 1000, // Timeout // withCredentials: true, // Check cross-site Access-Control }; const _axios = axios.create(config); _axios.interceptors.request.use( function (config) { // Do something before request is sent if(!LOADINGWHITELIST.includes(config.url)){ if (LOADINGCOUNT === 0) { startLoading() } LOADINGCOUNT++; } config.headers.Authorization=sessionStorage.getItem('token')||'' return config; }, function (error) { // Do something with request error return Promise.reject(error); } ); // Add a response interceptor _axios.interceptors.response.use( function (response) { // Do something with response data let data if(import.meta.env.MODE==='production'){ data=JSON.parse(CryptoJS.Des3Decrypt(response.data,import.meta.env.VITE_APP_RESPONSE_DES_KEY));//解密 }else{ data=response.data } //关闭loading if(!LOADINGWHITELIST.includes(response.config.url)){ LOADINGCOUNT--; if (LOADINGCOUNT === 0) { closeLoading() } } if(response.status!==200){ setTimeout(() => { MessagePlugin.error('网络异常') }, 100); } if(!data){ setTimeout(() => { MessagePlugin.error('服务器开了个小差') }, 100); } if(data.Ret===408){//token失效 MessagePlugin.error(data.Msg) } if(data.Ret===403){ setTimeout(() => { MessagePlugin.error(data.Msg||'网络异常') }, 100); } return data; }, function (error) { //关闭loading LOADINGCOUNT--; if (LOADINGCOUNT === 0) { closeLoading() } console.log(error); setTimeout(() => { MessagePlugin.error(error.message) }, 300); // Do something with response error return Promise.reject(error); } ); /** * 导出get请求方法 * @url 请求地址 * @params get请求参数 */ export const get = (url, params) => { return _axios.get(url, { params }); }; /** * 导出post请求方法 * @url 请求地址 * @params post请求参数 */ export const post = (url, params) => { return _axios.post(url, params); };