import axios from 'axios' import sso from './sso' import router from '@src/router/index' import type { AxiosInstance, CreateAxiosDefaults, AxiosRequestConfig } from 'axios' const config = { timeout: 60000, } const invalidCode = 1000 class Request { private instance: AxiosInstance constructor(config: CreateAxiosDefaults) { this.instance = axios.create(config) this.instance.interceptors.request.use(function(config) { if (!config.headers.token) { const userInfo = sso.getUserInfo() config.headers.token = userInfo.token } return config }, function(error) { return Promise.reject(error) }) this.instance.interceptors.response.use(function(response) { const { data } = response const { code } = data // 登陆过期 || 未登陆 if (code === invalidCode) { sso.clearUserInfo() const {pathname,search} = location if (pathname!=='/login') { router.navigate('/login?redirectUrl='+ encodeURIComponent(pathname+search) ) } return Promise.reject(data) } return data }, function(error) { return Promise.reject(error) }) } get(url: string, config?: AxiosRequestConfig): Promise> { return this.instance.get(url, config) } getBlob(url: string, config?: AxiosRequestConfig): Promise { return this.instance.get(url, config) } post(url: string, data?: unknown, config?: AxiosRequestConfig): Promise> { return this.instance.post(url, data, config) } } export default new Request(config)