import axios from'axios'import{ Message, Loading }from'element-ui'import store from'@/store'// import { setToken, getToken } from '@/utils/auth'import{ getToken, setToken }from'@/utils/auth'// create an axios instanceconst service = axios.create({baseURL: process.env.VUE_APP_BASE_API,// url = base url + request url// withCredentials: true, // send cookies when cross-domain requeststimeout:30000// request timeout})let loadingInstance
// request interceptor
service.interceptors.request.use(config=>{// do something before request is sentif(getToken()){// let each request carry token// ['X-Token'] is a custom headers key// please modify it according to the actual situation// config.headers['X-Token'] = getToken()
config.headers['x-auth-token']=getToken()}if(config.isLoading){const options ={lock:true,text:'Loading',spinner:'el-icon-loading',background:'rgba(0, 0, 0, 0.7)'}
loadingInstance = Loading.service(options)}return config
},error=>{// do something with request error
console.log(error)// for debugreturn Promise.reject(error)})// response interceptor
service.interceptors.response.use(/**
* If you want to get http information such as headers or status
* Please return response => response
*//**
* Determine the request status by custom code
* Here is just an example
* You can also judge the status by HTTP Status Code
*/response=>{if(response.config.isLoading){
loadingInstance.close()}const res = response.data
const{ responseType }= response.config
if(responseType ==='blob'|| responseType ==='arraybuffer'){if(res.size >1000){return response
}const reader =newFileReader()
reader.readAsText(res,'utf-8')
console.log(reader)
console.log(reader.result)returnnewPromise((resolve, reject)=>{
reader.onload=function(){try{const result =JSON.parse(reader.result)
console.log(result)if(result.code !==200){Message({message: result.message,type:'error',duration:5*1000})reject(newError(result.message ||'Error'))}else{resolve(response)}}catch(e){resolve(response)}}}).then(resData=>{return resData
})}// if the custom code is not 20000, it is judged as an error.if(res.code && res.code !==200){Message({showClose:true,message: res.message ||'Error',type:'error',offset:80,duration:5*1000})return Promise.reject(newError(res.message ||'Error'))}else{// 空字符串说明后端报错了if(res ===''){Message({showClose:true,message:'服务器返回空字符串,请联系后端开发人员改bug',type:'error',offset:80,duration:5*1000})return Promise.reject(newError('Response Empty'))}if(response.headers['x-auth-token']){setToken(response.headers['x-auth-token'])}return res
}},error=>{
console.log('err'+ error)// for debugif(error.response){if(error.response.config.isLoading){
loadingInstance.close()}if(error.response.status ===401){
store.dispatch('user/logout').then(()=>{
location.reload()})}elseif(error.response.status ===403){Message({showClose:true,message: error.response.data.message,type:'error',offset:80,duration:5*1000})return Promise.reject(error)}}Message({showClose:true,message: error.response.status ===401?'该用户已登出!': error.message,type:'error',offset:80,duration:5*1000})return Promise.reject(error)})exportdefault service