下载APP

axios

import axios from 'axios'
import config from './config'
import router from '../router/index'
import util from './util'
import { Message } from 'view-design'
import { flatten } from 'lodash'
import qs from 'qs'

const whitelist = ['/tpi/quanweidu/enterprise/info', '/wechat/corp/js-api-config']
axios.defaults.withCredentials = true// 让ajax携带cookie
axios.defaults.timeout = 18 * 10 * 1000// 超时

axios.interceptors.request.use(
  config => {
    const token = window.localStorage.getItem('token')
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token
    }
    if (/authentication/.test(config.url) || /openwechat/.test(config.url)) {
      config.headers['Authorization'] = 'Basic c2VydmljZV9hY2NvdW50OjEyMzQ1Ng=='
      config.headers['osType'] = 1
      config.headers['appVer'] = 300
      config.headers['Content-Type'] = 'application/json;charset=UTF-8'
    }
    return config
  }
  // err => {
  //   return Promise.reject(err)
  // }
)

axios.interceptors.response.use(
  async(response) => {
    if (response.data.code === 1000) {
      router.push({ path: '/login' })
    } else if (response.data.code === 1001) {
      // 重刷token
      const flag = await util.refreshToken()
      if (flag == 1) {
        return axios.request(response.config)
      }
    } else if (response.data.code === 10000) {
      Message.error('操作失败')
      return response
    } else {
      return response
    }
  },
  err => {
    if (err.response) {
      if (err.response.status === 401 || err.response.status === 400) {
        router.push({ path: '/login' })
      } else if (err.response.status === 500 || err.response.status === 503) {
        if (whitelist.indexOf(err.response.data.path) == -1) {
          router.push({ path: '/500' })
        }
      }
    }
    // return Promise.reject(err)
  }
)

export function get(url, params = {}) {
  return new Promise((resolve, reject) => {
    axios.get(config.baseUrl + url, {
      params: params,
      paramsSerializer: (params) => {
        return qs.stringify(params, { arrayFormat: 'indices', allowDots: true })
      }
    })
      .then(res => {
        if (res) { resolve(res.data) }
      })
      .catch(err => {
        reject(err)
      })
  })
}

export function getT(url, params = {}) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params,
      paramsSerializer: (params) => {
        return qs.stringify(params, { arrayFormat: 'indices', allowDots: true })
      }
    })
      .then(res => {
        if (res) { resolve(res.data) }
      })
      .catch(err => {
        reject(err)
      })
  })
}

export function post(url, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  return new Promise((resolve, reject) => {
    axios.post(config.baseUrl + url,
      params,
      {
        header
      }
    )
      .then(res => {
        if (res) { resolve(res.data) }
      })
      .catch(err => {
        reject(err)
      })
  })
}

export function patch(url, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  return new Promise((resolve, reject) => {
    axios.patch(config.baseUrl + url,
      params,
      {
        header
      }
    )
      .then(res => {
        if (res) { resolve(res.data) }
      })
      .catch(err => {
        reject(err)
      })
  })
}

export function del(url, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  return new Promise((resolve, reject) => {
    axios.delete(config.baseUrl + url,
      params,
      {
        header
      }
    )
      .then(res => {
        if (res) { resolve(res.data) }
      })
      .catch(err => {
        reject(err)
      })
  })
}

export function put(url, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  return new Promise((resolve, reject) => {
    axios.put(config.baseUrl + url,
      params,
      {
        header
      }
    )
      .then(res => {
        if (res) { resolve(res.data) }
      })
      .catch(err => {
        reject(err)
      })
  })
}

export function exportGet(url, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  return new Promise((resolve, reject) => {
    axios({
      method: 'GET',
      headers: header,
      url: config.baseUrl + url,
      params: params,
      paramsSerializer: params => {
        return qs.stringify(params, { indices: false })
      },
      responseType: 'blob'
    }).then(res => {
      // 截取文件名
      let fileName = res.headers['content-disposition'] ? decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1]) : '导出文件.xlsx'
      fileName = fileName.replace(/\"/g, '')
      // 将`blob`对象转化成一个可访问的`url`
      const url = window.URL.createObjectURL(new Blob([res.data]))
      const link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', fileName)
      document.body.appendChild(link)
      link.click()
      URL.revokeObjectURL(link.url) // 释放URL 对象
      document.body.removeChild(link)

      resolve(res)
    }).catch(err => {
      reject(err)
    })
  })
}

export function exportPost(url, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  return new Promise((resolve, reject) => {
    axios({
      method: 'POST',
      headers: header,
      url: config.baseUrl + url,
      data: params,
      paramsSerializer: params => {
        return qs.stringify(params, { indices: false })
      },
      responseType: 'blob'
    }).then(res => {
      // 截取文件名
      let fileName = res.headers['content-disposition'] ? decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1]) : '导出文件.xlsx'
      fileName = fileName.replace(/\"/g, '')
      // 将`blob`对象转化成一个可访问的`url`
      const url = window.URL.createObjectURL(new Blob([res.data]))
      const link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', fileName)
      document.body.appendChild(link)
      link.click()
      URL.revokeObjectURL(link.url) // 释放URL 对象
      document.body.removeChild(link)

      resolve(res)
    }).catch(err => {
      reject(err)
    })
  })
}

// 待办跟催导出
export function exportFollow(url, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  return new Promise((resolve, reject) => {
    axios({
      method: 'GET',
      headers: header,
      url: config.baseUrl + url,
      params: params,
      paramsSerializer: params => {
        return qs.stringify(params, { indices: false, arrayFormat: 'indices', allowDots: true })
      },
      responseType: 'blob'
    }).then(res => {
      // 截取文件名
      let fileName = res.headers['content-disposition'] ? decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1]) : '导出文件.xlsx'
      fileName = fileName.replace(/\"/g, '')
      // 将`blob`对象转化成一个可访问的`url`
      const url = window.URL.createObjectURL(new Blob([res.data]))
      const link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', fileName)
      document.body.appendChild(link)
      link.click()
      URL.revokeObjectURL(link.url) // 释放URL 对象
      document.body.removeChild(link)

      resolve(res)
    }).catch(err => {
      reject(err)
    })
  })
}

export function anpaiAjax(url, type, params, headers = {}) {
  const header = JSON.stringify(headers) == '{}' ? config.headers : headers
  const obj = {
    method: type,
    headers: header,
    url: config.anpaiUrl + url
  }
  if (type == 'GET') {
    obj.params = params
  } else {
    obj.data = params
  }
  return new Promise((resolve, reject) => {
    axios(obj).then(res => {
      if (res) { resolve(res.data) }
    }).catch(err => {
      resolve(res.data)
    })
  })
}

export function postFormData(url, params = {}) {
  return new Promise((resolve, reject) => {
    axios.post(config.baseUrl + url,
      params,
      {
        headers: {
          'Content-Type': 'multipart/form-data',
          'Accept': 'application/json'
        }
      }
    )
      .then(res => {
        if (res) { resolve(res.data) }
      })
      .catch(err => {
        reject(err)
      })
  })
}

在线举报