前端调用后端接口 导出excel, 并解决导出失败转化blob失败类型消息

接口API:

   P -- 传参,responseType:'blob' -- 设置导出类型为 blob,  timeout: 600000 -- 单独设置导出时间
   export const putinDetailexport = P => post(V1+'/materialOrder/selected/export', P,{responseType:'blob'},{timeout: 600000})

业务代码:

// 导出新接口
      handleExportNew(){
	        this.$store.dispatch(this.ACTIONS.EXPORTNEW, { ...this.putInForm },{ responseType: "blob" }).then(result => {
		          if(result){
			            let blob = new Blob([result], { type: "application/vnd.ms-excel" });
			            const link = document.createElement("a");
			            let fileName = decodeURIComponent("入库信息.xls");    ----- **这里加后缀 .xls 是因为有些浏览器 下载后没有类型导致打不开**
			            var url = window.URL.createObjectURL(blob);
			            link.style.display = "none";
			            link.href = url;
			            link.setAttribute("download", fileName);
			            document.body.appendChild(link);
			            link.click();
			            document.body.removeChild(link);
			            //  清空勾选
			            this.$refs.multipleAssets.clearSelection();
		          }
	        })
      },

拦截器处理错误消息: – 要处理的原因是因为 导出操作失败接口将信息转成blob类型,导致不能 获取错误信息

// 添加响应拦截器
request.interceptors.response.use(function (response) {
        loading.close()
        if(!response.data.rows){
            response.data['rows'] = []
        }
        if(!response.data.data){
            response.data['data'] = {}
        }
        return response
  }, function (error) {
        loading.close()
        if(error.message.indexOf('timeout') !== -1) {
              Message.error({message: '网络延迟,请求超时,请再次尝试!'})
        } else if(error.response.status === 400){
              if(error.response.data.code == 1001){
                store.commit('count',true)  // 当1001 需要弹框提醒 资产上限
              }else {
              		--------这里开始处理 导出错误转化
                    if(error.response.config.responseType == 'blob'){   //解决 blob请求类型 错误信息
                        let blob = new Blob([error.response.data])
                        let reader = new FileReader()
                        reader.readAsText(blob,'utf-8')
                        reader.onload = function () {
                            try{
                                let data = JSON.parse(reader.result)
                                Message.error({message: data.message ||'操作有误,请重新操作!'})
                            }catch (e) {
                                Message.error({message: '系统错误请联系管理员'})
                            }
                        }
                     ---------- 结束
                    }else{
                        if(error.response.data.data){
                            return Promise.reject(error)
                        }else{
                            Message.error({message: error.response.data.message ||'操作有误,请重新操作!'})
                        }
                    }
              }
        } else if (error.response.status === 429){
              Message.error({message:'亲,当前用户有点多哦,请稍等几分钟!'})
        } else {
              Message.error({message: '系统错误请联系管理员'})
        }
        console.log(error)

  });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值