<script>
import axios from 'axios'
import config from '@/config'
import store from '@/store'
import eleUi from 'element-Ui'
const Loading = eleUi.Loading
//bing fa qing qiu guan bi loading 关键代码
let loadingInstanceStack = []
let loadingCount = 0
function closeLoadingInstance(){
loadingCount --
if(loadingCount <= 0){
loadingInstanceStack.forEach(loading => loading.close())
loadingInstanceStack = []
}
}
///
class HttpRequest{
constructor(baseUrl = config.baseUrl,useKey = true){
this.baseUrl = baseUrl
this.useKey = useKey
}
getInsideConfig(){
const config = {
baseURL : this.baseUrl,
headers:{}
}
return config
}
interceptors(instance,url){
instance.interceptors.request.use(config =>{
if(this.useKey && store.state.key){
config.headers = config.headers || {}
config.headers.Authorization = store.state.key
}
return config
},error=>{
return Promise.reject(error)
})
instance.interceptors.response.use(res => {
closeLoadingInstance()
const {data} = res
return data
},error=>{
closeLoadingInstance()
return Promise.reject( (error.response && error.response.data) || error)
})
}
request(options){
const loadingInstance = Loading.service({fullscreen:false,text:'加载中...',customClass:"common-loading-class",background:"rgba(0,0,0,0)"})
///关键代码
loadingInstanceStack.push(loadingInstance)
loadingCount++
//
options = options || {}
const instance = axios.create()
options = Object.assign(this.getInsideConfig(),options)
this.interceptors(instance,options.url)
return instance(options)
}
}
export default HttpRequest
</script>