最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue導(dǎo)出excel的兩種實現(xiàn)方式代碼

 更新時間:2023年08月23日 09:54:30   作者:Humor_L  
這篇文章主要給大家介紹了關(guān)于vue導(dǎo)出excel的兩種實現(xiàn)方式,在項目中我們可能會碰到導(dǎo)出Excel文件的需求,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下

目前使用

handleExport () {
      this.exportName = `通訊錄`
      let params = tools.deepClone(this.searchParams)
      params.search.size = this.total
      接口請求地址(params).then(res => {
        const href = window.URL.createObjectURL(new Blob([res]))
        const link = document.createElement('a')
        link.style.display = 'none'
        link.href = href
        link.setAttribute('download', this.exportName + '.xls')
        document.body.appendChild(link)
        link.click()
        document.body.removeChild(link) // 下載完成移除元素
        window.URL.revokeObjectURL(href) // 釋放掉blob對象
      }).catch(err => {
        this.$message.error(err)
      })
    },

需求說明

通過vue實現(xiàn)導(dǎo)出有兩種方式:

(1)后端返回的是一個地址,直接拼接打開下載就行

(2)后端返回的是文件流的形式,這個時候就需要在請求頭還有返回值的地方設(shè)置一下

一、后端返回的是地址

// 頁面代碼
<el-button
       type="primary"
       size="mini"
       class="filter-item"
       icon="el-icon-download"
       style="margin: 12px 20px 0 0; float: right"
       @click="onExportClick"
       >
       導(dǎo)出
</el-button>
 onExportClick() {//導(dǎo)出方法
     exportDevices(this.listQuery) //導(dǎo)出接口
      .then(result => {
         const url = result.data
         window.open(url)    //通過這個打開網(wǎng)頁就可下載導(dǎo)出
      })
       .catch(err => console.log(err))
}

二、后端返回的是文件流

(1)設(shè)置請求頭

/**
* 按照部門人員導(dǎo)出(包括事件類型)
* @param {*} pType
* @returns
*/
export function exportDetailOrder(pType) {
  return request({
      url: '/exportEventDetailByDepart',
      method: 'get',
      responseType: 'blob',  //需要在此處設(shè)置請求頭,設(shè)置請求的類型為blob文件流的形式
      params: {
          pType
      }
  })
}

(2)設(shè)置返回結(jié)果,處理返回我文件流

onExportClick() {  //導(dǎo)出的方法
            exportDetailOrder(this.pType)  //導(dǎo)出的接口
                .then(result => {
                    console.log(result)
                    const link = document.createElement('a')  //創(chuàng)建a標(biāo)簽
                    const blob = new Blob([result], { type: 'application/vnd.ms-excel' }) //設(shè)置文件流
                    link.style.display = 'none'
                    // 設(shè)置連接
                    link.href = URL.createObjectURL(blob)  //將文件流轉(zhuǎn)化為blob地址
                    link.download = '處理人員維修工單統(tǒng)計報表'
                    document.body.appendChild(link)
                    // 模擬點擊事件
                    link.click()  //設(shè)置點擊事件
                })
                .catch(err => {
                    console.log(err)
                })
        }

(3)附加說明

有的時候做到上述幾步還是不能導(dǎo)出,debugger之后,發(fā)現(xiàn)接口調(diào)用的時候直接走的.catch,沒走.then,所以需要我們在全局響應(yīng)攔截做一些判斷。

//一般在utils下面的requext.js文件里面
export function validResponse(res, errorMessage) {
    if (res instanceof Blob) {  //如果返回的是文件流的形式,直接return res
        return res
    } else if (res.code !== 200 && res.code !== 201 && res.code !== 204) {
        return Promise.reject(new Error(res.message || '發(fā)生錯誤!'))
    } else {
        return res
    }
}

目前用的:

handleExport() {
              let me = this
              let url = '/fcst/gpcprevention/exportGpcSummary'
              let filename = me.reportname
              let exportparams = {
                taskyear: utils.formatDate(me.searchParams.taskyear, 'yyyy'),
                reportid: me.searchParams.reportid,
                  char1:me.searchParams.char1,
              }
              utils.onDownload(me, url, filename, exportparams);
            }

utils.onDownload方法:

utils.onDownload = function (vm,url,filename,searchParams) {
    let params = utils.addFormData(searchParams);
    vm.$axios(
        {
            method: 'post',
            url: url,
            data: params,
            responseType: 'blob'
        }
    ).then(function(res) {
        let href = window.URL.createObjectURL(new Blob([res]));
        let link = document.createElement('a');
        link.style.display = 'none';
        link.href = href;
        link.setAttribute('download', filename + '.xls');
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link); // 下載完成移除元素
        window.URL.revokeObjectURL(href); // 釋放掉blob對象
    });
};

總結(jié) 

到此這篇關(guān)于vue導(dǎo)出excel的兩種實現(xiàn)方式的文章就介紹到這了,更多相關(guān)vue導(dǎo)出excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解VueUse中useAsyncState的實現(xiàn)原理

    一文詳解VueUse中useAsyncState的實現(xiàn)原理

    在Vue 3 Composition API中,我們可以使用自定義鉤子函數(shù)來封裝可復(fù)用的邏輯,useAsyncState是一個用于管理異步狀態(tài)的自定義鉤子函數(shù),本文將給大家介紹一下useAsyncState的實現(xiàn)原理,感興趣的朋友可以參考下
    2024-01-01
  • Vue3使用sessionStorage保存會話數(shù)據(jù)的實現(xiàn)方式

    Vue3使用sessionStorage保存會話數(shù)據(jù)的實現(xiàn)方式

    在前端開發(fā)中,我們常常需要在用戶會話期間保存一些數(shù)據(jù),這些數(shù)據(jù)在頁面刷新或?qū)Ш綍r依然需要存在,sessionStorage 是一種非常方便的方式來實現(xiàn)這一點,在這篇文章中,我們將探討如何在Vue3應(yīng)用中使用sessionStorage來保存會話數(shù)據(jù),需要的朋友可以參考下
    2025-01-01
  • vue使用echarts實現(xiàn)地圖的方法詳解

    vue使用echarts實現(xiàn)地圖的方法詳解

    這篇文章主要為大家詳細(xì)介紹了vue使用echarts實現(xiàn)地圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 快速解決Vue、element-ui的resetFields()方法重置表單無效的問題

    快速解決Vue、element-ui的resetFields()方法重置表單無效的問題

    這篇文章主要介紹了快速解決Vue、element-ui的resetFields()方法重置表單無效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue實現(xiàn)戶籍管理系統(tǒng)

    vue實現(xiàn)戶籍管理系統(tǒng)

    這篇文章主要介紹了Vue實現(xiàn)戶籍管理系統(tǒng),戶籍信息的添加與刪除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Vite代理如何解決跨域問題詳解

    Vite代理如何解決跨域問題詳解

    跨域是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實施的安全限制,下面這篇文章主要給大家介紹了關(guān)于Vite代理如何解決跨域問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue父組件向子組件傳遞多個數(shù)據(jù)的實例

    vue父組件向子組件傳遞多個數(shù)據(jù)的實例

    下面小編就為大家分享一篇vue父組件向子組件傳遞多個數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue3集成jsoneditor的方法詳解

    vue3集成jsoneditor的方法詳解

    JSONEditor是一個基于Web的工具,用于查看、編輯、格式化和驗證JSON,它有各種模式,這篇文章主要為大家介紹了vue3集成jsoneditor的教程,希望對大家有所幫助
    2023-09-09
  • Vue數(shù)據(jù)監(jiān)聽方法watch的使用

    Vue數(shù)據(jù)監(jiān)聽方法watch的使用

    這篇文章主要介紹了Vue數(shù)據(jù)監(jiān)聽方法watch的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • vue+axios實現(xiàn)登錄攔截的實例代碼

    vue+axios實現(xiàn)登錄攔截的實例代碼

    本篇文章主要介紹了vue+axios實現(xiàn)登錄攔截的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

沁阳市| 洛扎县| 巩留县| 布拖县| 铁力市| 青铜峡市| 且末县| 通榆县| 乐山市| 和龙市| 湖南省| 莫力| 镇宁| 鄯善县| 长岭县| 凤山市| 郓城县| 和林格尔县| 苍梧县| 泊头市| 沂南县| 甘泉县| 舞阳县| 房产| 武宁县| 和田市| 马鞍山市| 镇康县| 崇义县| 顺平县| 鹤峰县| 宜兴市| 崇左市| 民和| 观塘区| 韶山市| 承德县| 阿拉善盟| 萝北县| 上虞市| 日喀则市|