|
|
|
|
@ -0,0 +1,92 @@
|
|
|
|
|
import axios from 'axios'
|
|
|
|
|
import { getToken } from '@/utils/auth'
|
|
|
|
|
import { Loading, Message } from 'element-ui'
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @params {string} url 请求拼接地址
|
|
|
|
|
* @params {object} info 请求参数params或data
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
let loading;
|
|
|
|
|
export async function download(url,method='get',info,filename){
|
|
|
|
|
|
|
|
|
|
loading = Loading.service({
|
|
|
|
|
lock:true,
|
|
|
|
|
background:"rgba(0,0,0,0.4)",
|
|
|
|
|
text:"文件正在生成中..."
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
let options = {
|
|
|
|
|
baseURL:process.env.VUE_APP_BASE_API,
|
|
|
|
|
url,
|
|
|
|
|
method,
|
|
|
|
|
responseType: 'blob',
|
|
|
|
|
timeout:10000,
|
|
|
|
|
headers: {
|
|
|
|
|
Accept: 'application/json','Content-Type':'application/json; charset=utf-8',
|
|
|
|
|
withCredentials: true,
|
|
|
|
|
Authorization:"Bearer " + getToken()
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
if(method === 'get'){
|
|
|
|
|
Object.defineProperty(options,'params',{
|
|
|
|
|
value:info,
|
|
|
|
|
enumerable:true,
|
|
|
|
|
writable:false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
if(method === 'post'){
|
|
|
|
|
Object.defineProperty(options,'data',{
|
|
|
|
|
value:info,
|
|
|
|
|
enumerable:true,
|
|
|
|
|
writable:false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const response = await axios.request(options)
|
|
|
|
|
|
|
|
|
|
loading.close()
|
|
|
|
|
|
|
|
|
|
// 提取文件名
|
|
|
|
|
if(!filename){
|
|
|
|
|
filename = response.headers['content-disposition']?.match(
|
|
|
|
|
/filename=(.*)/
|
|
|
|
|
)[1] || ''
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 将二进制流转为blob
|
|
|
|
|
const blob = new Blob([response.data], { type: 'application/octet-stream' })
|
|
|
|
|
if (typeof window.navigator.msSaveBlob !== 'undefined') {
|
|
|
|
|
// 兼容IE,window.navigator.msSaveBlob:以本地方式保存文件
|
|
|
|
|
window.navigator.msSaveBlob(blob, decodeURI(filename))
|
|
|
|
|
} else {
|
|
|
|
|
// 创建新的URL并指向File对象或者Blob对象的地址
|
|
|
|
|
const blobURL = window.URL.createObjectURL(blob)
|
|
|
|
|
// 创建a标签,用于跳转至下载链接
|
|
|
|
|
const tempLink = document.createElement('a')
|
|
|
|
|
tempLink.style.display = 'none'
|
|
|
|
|
tempLink.href = blobURL
|
|
|
|
|
tempLink.setAttribute('download', decodeURI(filename))
|
|
|
|
|
// 兼容:某些浏览器不支持HTML5的download属性
|
|
|
|
|
if (typeof tempLink.download === 'undefined') {
|
|
|
|
|
tempLink.setAttribute('target', '_blank')
|
|
|
|
|
}
|
|
|
|
|
// 挂载a标签
|
|
|
|
|
document.body.appendChild(tempLink)
|
|
|
|
|
tempLink.click()
|
|
|
|
|
document.body.removeChild(tempLink)
|
|
|
|
|
// 释放blob URL地址
|
|
|
|
|
window.URL.revokeObjectURL(blobURL)
|
|
|
|
|
}
|
|
|
|
|
}catch (err){
|
|
|
|
|
console.error(err)
|
|
|
|
|
loading.close()
|
|
|
|
|
Message({
|
|
|
|
|
type:'error',
|
|
|
|
|
message:err
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|