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

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

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

目前使用

handleExport () {
      this.exportName = `通訊錄`
      let params = tools.deepClone(this.searchParams)
      params.search.size = this.total
      接口請(qǐng)求地址(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對(duì)象
      }).catch(err => {
        this.$message.error(err)
      })
    },

需求說(shuō)明

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

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

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

一、后端返回的是地址

// 頁(yè)面代碼
<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)    //通過(guò)這個(gè)打開網(wǎng)頁(yè)就可下載導(dǎo)出
      })
       .catch(err => console.log(err))
}

二、后端返回的是文件流

(1)設(shè)置請(qǐng)求頭

/**
* 按照部門人員導(dǎo)出(包括事件類型)
* @param {*} pType
* @returns
*/
export function exportDetailOrder(pType) {
  return request({
      url: '/exportEventDetailByDepart',
      method: 'get',
      responseType: 'blob',  //需要在此處設(shè)置請(qǐng)求頭,設(shè)置請(qǐng)求的類型為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)計(jì)報(bào)表'
                    document.body.appendChild(link)
                    // 模擬點(diǎn)擊事件
                    link.click()  //設(shè)置點(diǎn)擊事件
                })
                .catch(err => {
                    console.log(err)
                })
        }

(3)附加說(shuō)明

有的時(shí)候做到上述幾步還是不能導(dǎo)出,debugger之后,發(fā)現(xiàn)接口調(diào)用的時(shí)候直接走的.catch,沒(méi)走.then,所以需要我們?cè)谌猪憫?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ā)生錯(cuò)誤!'))
    } 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對(duì)象
    });
};

總結(jié) 

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    Vite代理如何解決跨域問(wèn)題詳解

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

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

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

    vue3集成jsoneditor的方法詳解

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

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

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

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

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

最新評(píng)論

登封市| 萍乡市| 通山县| 广南县| 洪江市| 泸溪县| 北宁市| 澜沧| 蒲江县| 沈丘县| 故城县| 阳朔县| 吉林省| 巧家县| 马龙县| 汉寿县| 洛川县| 新沂市| 丹江口市| 江山市| 南华县| 东港市| 益阳市| 平乐县| 航空| 常熟市| 奉节县| 海口市| 文昌市| 武宣县| 孝昌县| 龙山县| 辉县市| 潞城市| 福海县| 江城| 镇安县| 芒康县| 舞阳县| 屏边| 北流市|