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'
- /**
- * http util
- */
- class Http {
- /**
- * axios config
- * @protected
- */
- protected config: AxiosRequestConfig = {}
- /**
- * base url
- * @protected
- */
- protected baseURL: string = ''
- /**
- * http request timeout
- *
- * @protected
- */
- protected timeout: number = 0
- /**
- * http request headers
- *
- * @protected
- */
- protected headers: { [k: string]: string } = {}
- /**
- * axios instance
- *
- * @protected
- */
- protected request: AxiosInstance
- /**
- * instance
- */
- constructor() {
- this.request = axios.create(this.getConfig())
- }
- /**
- * get request
- *
- * @param path
- * @param params
- */
- public get(path: string, params: object = {}) {
- return this.request.get(this.baseURL + path, {
- params,
- })
- }
- /**
- * post request
- *
- * @param path
- * @param data
- */
- public post(path: string, data: object = {}) {
- return this.request.post(this.baseURL + path, data)
- }
- /**
- * put request
- *
- * @param path
- * @param data
- */
- public put(path: string, data: object = {}) {
- return this.request.put(this.baseURL + path, data)
- }
- /**
- * delete request
- *
- * @param path
- */
- public delete(path: string) {
- return this.request.delete(this.baseURL + path)
- }
- /**
- * set timeout
- *
- * @param timeout
- * @returns
- */
- public setTimeout(timeout: number): Http {
- this.timeout = timeout
- return this
- }
- /**
- * set baseurl
- *
- * @param url
- * @returns
- */
- public setBaseUrl(url: string): Http {
- this.baseURL = url
- return this
- }
- /**
- * set headers
- *
- * @param key
- * @param value
- * @returns
- */
- public setHeader(key: string, value: string): Http {
- this.headers.key = value
- return this
- }
- /**
- * get axios 配置
- *
- * @returns
- */
- protected getConfig(): AxiosRequestConfig {
- // set base url
- this.config.baseURL = this.baseURL ? this.baseURL : env('VITE_BASE_URL')
- // set timeout
- this.config.timeout = this.timeout ? this.timeout : 10000
- // set ajax request
- this.headers['X-Requested-With'] = 'XMLHttpRequest'
- // set dashboard request
- 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) {
- // to re-login
- Message.confirm(message + ',需要重新登陆', function () {
- removeAuthToken()
- router.push('/login')
- })
- } else if (code === Code.LOGIN_BLACKLIST || code === Code.USER_FORBIDDEN) {
- Message.error(message || 'Error')
- removeAuthToken()
- // to login page
- 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
|