axios.js 2.5 KB
import axios from 'axios'
import qs from 'qs'
var instance = axios.create()
// axios.defaults.baseURL = 'http://192.168.1.106:8300/v1/isv' // 本地荣
// axios.defaults.baseURL = 'http://192.168.1.102:8300/v1/isv' // 本地钱
// axios.defaults.baseURL = 'http://139.196.213.18:8300/v1/isv' // beta环境
const BASE_URL = process.env.VUE_APP_API_URL
let loadingInstance // 创建Loading 的实例
// 配置发送请求前的拦截器可以设置token信息
axios.interceptors.request.use((config) => {
  // loading开始loadingInstance.start()
  let isRefreshToken = new Date().getTime() - sessionStorage.getItem('start_time') < sessionStorage.getItem('expires_in') - 5 * 60 * 1000
  if (isRefreshToken) {
    config.headers['Authorization'] = `Bearer ${sessionStorage.getItem('access_token')}`
    return config
  } else {
    return new Promise((resolve, reject) => {
      getToken().then((response) => {
        sessionStorage.setItem('access_token', response.data.access_token)
        sessionStorage.setItem('refresh_token', response.data.refresh_token)
        sessionStorage.setItem('expires_in', response.data.expires_in * 1000)
        sessionStorage.setItem('start_time', new Date().getTime())
        resolve(config)
        return config
      }).catch((err) => {
        console.log(err)
      })
    })
  }
}, (error) => {
  // 出错,也要loading结束
  loadingInstance.close()
  return Promise.reject(error)
})
function getToken () {
  let loginData = qs.stringify({
    refresh_token: sessionStorage.getItem('refresh_token'),
    grant_type: 'refresh_token'
  })
  return new Promise((resolve, reject) => {
    instance.post(`${BASE_URL}/auth/oauth/token`, loginData, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Authorization': 'Basic bWluZ3BheS13ZWI6bWluZ3BheS13ZWI='
      }
    }).then((res) => {
      resolve(res)
    }).catch((err) => {
      console.log(err)
    })
  })
}
const $http = {
  post: (url, data) => {
    return new Promise((resolve, reject) => {
      axios.post(`${BASE_URL}${url}`, data, {
        headers: {
          'Content-Type': 'application/json; charset=UTF-8'
        }
      }).then((res) => {
        return resolve(res)
      }).catch((error) => {
        return reject(error)
      })
    })
  },
  get: (url) => {
    return new Promise((resolve, reject) => {
      axios.get(`${BASE_URL}${url}`).then((res) => {
        return resolve(res)
      }).catch((error) => {
        return reject(error)
      })
    })
  }
}
export { $http }