request.js 2.51 KB
const successCode = [200, '0']

async function axiosRequest(config) {
  const {
    methot,
    url,
    isMock,
    timeOut = 10000,
    mockTimeOut = 200,
    prefix,
    weakNetwork = false,
    appStatus = true,
    showError = true,
    environment = 'sit',
    data = {},
    params = {}
  } = config

  return new Promise((resolve) => {
    let mockUrl = url
    if (isMock) mockUrl = '/mock' + mockUrl
    if (isMock) {
      setTimeout(() => {
        const code = '0'

        if (weakNetwork) {
          resolve({
            network: 0,
            success: false,
            data: null
          })
        }

        if (appStatus) {
          appBlock(true)
        }

        if (!successCode.includes(code) && showError) {
          // errorBlock('./image/error.svg', '内容获取失败')
          errorBlock('./image/content_fail.svg', '获取内容失败')
        }

        const data = mockList.find(el => el.url === mockUrl).data

        resolve({
          success: successCode.includes(code),
          data: successCode.includes(code) ? data ? deepCopy(data) : null : null
        })
      }, mockTimeOut)
      return
    }

    const VUE_BASE_API = window.config.VUE_BASE_API[environment]

    let responseUrl = VUE_BASE_API + prefix + url
    if (methot.toLowerCase() === 'get' && Object.keys(delectEmptyObj(params)).length) {
      responseUrl = `${responseUrl}?${tansParams(params)}`
    }
    const ajaxConfig = {
      method: methot,
      url: responseUrl,
      timeout: timeOut,
      headers: config.headers
    }

    if (data && Object.keys(data).length) ajaxConfig.data = data

    axios.request(ajaxConfig).then(res => {
      if (appStatus) {
        appBlock(true)
      }

      const { data } = res

      if (!successCode.includes(data.code) && showError) {
        if (navigator.onLine) {
          errorBlock('./image/content_fail.svg', '获取内容失败')
        } else {
          errorBlock('./image/no_net.svg', '暂无网络')
        }
      }

      resolve({
        success: successCode.includes(data.code),
        data: successCode.includes(data.code) ? data.data : data
      })
    }).catch(err => {
      if (showError) {
        if (err.message.includes('timeout')) {
          errorBlock('./image/no_net.svg', '暂无网络')
        } else if (navigator.onLine) {
          errorBlock('./image/content_fail.svg', '获取内容失败')
        } else {
          errorBlock('./image/no_net.svg', '暂无网络')
        }
      }

      resolve({
        success: false
      })
    })
  })
}