123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- import { Code } from '/admin/enum/app'
- import axios, { AxiosInstance, AxiosRequestConfig } from 'axios'
- import { env, getAuthToken, removeAuthToken } from './helper'
- import Message from './message'
- import router from '/admin/router'
- import ResponseData from '/admin/types/responseData'
- class Http {
-
- protected config: AxiosRequestConfig = {}
-
- protected baseURL: string = ''
-
- protected timeout: number = 0
-
- protected headers: { [k: string]: string } = {}
-
- protected request: AxiosInstance
-
- constructor() {
- this.request = axios.create(this.getConfig())
- }
-
- public get(path: string, params: object = {}) {
- return this.request.get(this.baseURL + path, {
- params,
- })
- }
-
- public post(path: string, data: object = {}) {
- return this.request.post(this.baseURL + path, data)
- }
-
- public put(path: string, data: object = {}) {
- return this.request.put(this.baseURL + path, data)
- }
-
- public delete(path: string) {
- return this.request.delete(this.baseURL + path)
- }
-
- public setTimeout(timeout: number): Http {
- this.timeout = timeout
- return this
- }
-
- public setBaseUrl(url: string): Http {
- this.baseURL = url
- return this
- }
-
- public setHeader(key: string, value: string): Http {
- this.headers.key = value
- return this
- }
-
- protected getConfig(): AxiosRequestConfig {
-
- this.config.baseURL = this.baseURL ? this.baseURL : env('VITE_BASE_URL')
-
- this.config.timeout = this.timeout ? this.timeout : 10000
-
- this.headers['X-Requested-With'] = 'XMLHttpRequest'
-
- this.headers['Request-from'] = 'Dashboard'
- this.config.headers = this.headers
- return this.config
- }
-
- public interceptorsOfRequest(): void {
- this.request.interceptors.request.use(function (config: AxiosRequestConfig) {
- const token = getAuthToken()
- if (token) {
- if (!config.headers) {
- config.headers = {}
- }
- config.headers.authorization = 'Bearer ' + token
- }
- return config
- })
- }
-
- public interceptorsOfResponse(): void {
- this.request.interceptors.response.use(
- response => {
- const r: ResponseData = response.data
- const code = r.code
- const message = r.message
- if (code === 1e4) {
- return response
- }
- if (code === 10004) {
- Message.error(message || 'Error')
- } else if (code === Code.LOST_LOGIN || code === Code.LOGIN_EXPIRED) {
-
- Message.confirm(message + ',需要重新登陆', function () {
- removeAuthToken()
- router.push('/login')
- })
- } else if (code === Code.LOGIN_BLACKLIST || code === Code.USER_FORBIDDEN) {
- Message.error(message || 'Error')
- removeAuthToken()
-
- router.push('/login')
- } else {
- Message.error(message || 'Error')
- }
- return Promise.reject(new Error(message || 'Error'))
- },
- error => {
- Message.error(error.message)
- return Promise.reject(error)
- },
- )
- }
- }
- const http = new Http()
- http.interceptorsOfRequest()
- http.interceptorsOfResponse()
- export default http
|