工作总结系列---【vue页面实现导出效果的两种方法】

工作情景:在工作中,页面有一个导出表格按钮,点击就会出现表格,作为工作小白,第一次遇到这个问题不知道如何把表格从底部弹出,不过最后实现效果了

实现步骤:
方法一:后端返回的是一个文件流形式的(需要处理文件流,转为blob)

1.封装请求:
ecport function exportTableApi(paramsdata){
 return Request({
 url:'url',
 method:"get",
 params:{...paramsdata},
 responseType:"blob" // 记得写上
 })
}

<template>
  <div><button @click="exporttable">导出表格</button></div>
</template>

<script>
export default {
  data() {
    return {
      paramsObj: "",
      yearTitle: "",
      monthTitle: "",
    };
  },
 methods:{
    // 点击发送请求:
   getExportTable(params){
    exportTableApi(params).then((res)=>{
    // 转码处理(工作中遇到下载word文档,加上转码这一部分就解决了  目前不知道为啥 先记录一下吧  遇到问题再来搬)
    // var raw = window.atob(res);
    // var uInt8Array = new Uint8Array(raw.length);
    // for (var i = 0; i < raw.length; i++) {
    //  uInt8Array[i] = raw.charCodeAt(i);
    // }
    // let blob = new Blob([uInt8Array],{
    //    type: 'application/msword' // 发现去掉可以导出(下载)pdf图片 Excel docx文件等
    // })
    let downloadElement=document.createElement("a");
    let blob=new Blob([res],{
      type:"application/vnd.ms-excel;charset=utf-8"
    });
    const fileName="案件占比.xls";
    let href=window.URL.createObjectURL(blob);//创建下载的链接
    downloadElement.href=href;
    downloadElement.download=fileName;//下载后文件名
    // downloadElement.setAttribute('download','案件占比.xls');
    document.body.appendChild(downloadElement);
    downloadElement.click();//点击下载
    document.body.removedChild(downloadElement);//下载完成移除元素
    window.URL.revokeObjectURL(href) //释放blob
    })
    .catch(err=>{
    console.log("下载失败,err")
    })
	
   },
    // 3.点击发送请求
   exporttable(){
       this.getExportTable()
   }
}
};
</script>

<style>
</style>

方法二:后端已经处理好文件,前端只需要使用window.open打开

getExportTable(params){
	window.open(getBaseUrl() + ‘page/rest/xxxxxx’ + '?' + params )
}
// 处理域名和端口
export function getBaseUrl(){
	return process.env.NODE_ENV === "development"? process.env.BASE_API:`${location.protocol}//${location.host}/cmtmdr`
}

posted on 2021-08-09 20:36  码农小小海  阅读(147)  评论(0编辑  收藏  举报

导航