vue 文件导出

import $nehttp from '@/utils/neHttpRequest'

import { Message } from 'element-ui'

export default function (config) {

  const url = config.url

  const method = config.method || 'get'

  const params = config.params || null

  const fileName = config.fileName || ''

  const data = config.data || null

  const headers = config.headers || {}

  const callback = config.callback || null

  Object.assign(headers, {

    token: sessionStorage.getItem('token') || ''

  })

  $nehttp({

    url: $nehttp.gatewayApi(url),

    method,

    params: $nehttp.adornParams(params),

    data: $nehttp.adornData(data),

    responseType: 'blob',

    headers

  }).then(res => {

    if (res.data.type === 'application/json') {

      if (callback) {

        callback()

      }

      const blob = new Blob([ res.data ])

      const reader = new FileReader()

      reader.addEventListener('loadend', function () {

        const result = JSON.parse(reader.result)

        if (result.code !== '000000') {

          Message.error('导出失败,' + result.msg)

        }

      })

      reader.readAsText(blob, 'UTF-8')

    } else {

      const blob = new Blob([ res.data ])

      const url = URL.createObjectURL(blob)

      const a = document.createElement('a')

      a.href = url

      // 指定生成的文件名

      if (fileName === '') {

        const disposition = res.headers[ 'content-disposition' ]

        a.download = decodeURI(disposition.substring(disposition.indexOf('=') + 1))

      } else {

        a.download = fileName

      }

      document.body.appendChild(a)

      const evt = document.createEvent('MouseEvents')

      evt.initEvent('click', false, false)

      a.dispatchEvent(evt)

      document.body.removeChild(a)

      window.URL.revokeObjectURL(url)

      if (callback) {

        callback()

      }

    }

  })

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容