|  | @@ -0,0 +1,85 @@
 | 
	
		
			
				|  |  | +import axios, { AxiosResponse, AxiosInstance, AxiosError } from 'axios'
 | 
	
		
			
				|  |  | +import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
 | 
	
		
			
				|  |  | +type _config = {
 | 
	
		
			
				|  |  | +  base_url: string
 | 
	
		
			
				|  |  | +  result_code: number | string
 | 
	
		
			
				|  |  | +  default_headers: AxiosHeaders
 | 
	
		
			
				|  |  | +  request_timeout: number
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +const config: _config = {
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * api请求基础路径
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  base_url: import.meta.env.VITE_BASE_URL,
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * 接口成功返回状态码
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  result_code: 200,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * 接口请求超时时间
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  request_timeout: 30000,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * 默认接口请求类型
 | 
	
		
			
				|  |  | +   * 可选值:application/x-www-form-urlencoded multipart/form-data
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  default_headers: 'application/json'
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const axiosInstance: AxiosInstance = axios.create({
 | 
	
		
			
				|  |  | +  baseURL: config.base_url,
 | 
	
		
			
				|  |  | +  timeout: config.request_timeout
 | 
	
		
			
				|  |  | +})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +axiosInstance.interceptors.response.use(
 | 
	
		
			
				|  |  | +  async (response: AxiosResponse<any>) => {
 | 
	
		
			
				|  |  | +    const { data } = response
 | 
	
		
			
				|  |  | +    const code = data.code
 | 
	
		
			
				|  |  | +    const msg = data.msg
 | 
	
		
			
				|  |  | +    if (code !== 200) {
 | 
	
		
			
				|  |  | +      ElNotification.error({ title: msg })
 | 
	
		
			
				|  |  | +      return Promise.reject(data)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return Promise.resolve(data)
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  (error: AxiosError) => {
 | 
	
		
			
				|  |  | +    let { message } = error
 | 
	
		
			
				|  |  | +    const { t } = useI18n()
 | 
	
		
			
				|  |  | +    if (message === 'Network Error') {
 | 
	
		
			
				|  |  | +      message = t('sys.api.errorMessage')
 | 
	
		
			
				|  |  | +    } else if (message.includes('timeout')) {
 | 
	
		
			
				|  |  | +      message = t('sys.api.apiTimeoutMessage')
 | 
	
		
			
				|  |  | +    } else if (message.includes('Request failed with status code')) {
 | 
	
		
			
				|  |  | +      message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    ElMessage.error(message)
 | 
	
		
			
				|  |  | +    return Promise.reject(error)
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +const request = (option: any) => {
 | 
	
		
			
				|  |  | +  const { url, method, params, data, headersType, responseType, ...config } = option
 | 
	
		
			
				|  |  | +  return axiosInstance({
 | 
	
		
			
				|  |  | +    url: url,
 | 
	
		
			
				|  |  | +    method,
 | 
	
		
			
				|  |  | +    params,
 | 
	
		
			
				|  |  | +    data,
 | 
	
		
			
				|  |  | +    ...config,
 | 
	
		
			
				|  |  | +    responseType: responseType,
 | 
	
		
			
				|  |  | +    headers: {
 | 
	
		
			
				|  |  | +      'Content-Type': headersType || config.default_headers
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  })
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  get: async <T = any>(option: any) => {
 | 
	
		
			
				|  |  | +    const res = await request({ method: 'GET', ...option })
 | 
	
		
			
				|  |  | +    return res.data as unknown as T
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  post: async <T = any>(option: any) => {
 | 
	
		
			
				|  |  | +    const res = await request({ method: 'POST', ...option })
 | 
	
		
			
				|  |  | +    return res.data as unknown as T
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +}
 |