vue element-UI 實(shí)現(xiàn)導(dǎo)出excel 功能

前端項(xiàng)目實(shí)現(xiàn)請(qǐng)求后臺(tái)接口

步驟一:安裝axios組件,一般使用命令:npm install axios --save
步驟二:為了項(xiàng)目規(guī)范整潔复濒,把一些配置請(qǐng)求后臺(tái)統(tǒng)一前綴,以及一些攔截器,代碼如下(文件在@/utils/request)
import axios from 'axios'

// create an axios instance
const service = axios.create({
  baseURL: 'http://10.246.34.23:10000',
  timeout: 5000
})

// request interceptor
service.interceptors.request.use(
  config => {
    // do something before request is sent

    if (store.getters.token) {
      // let each request carry token
      // ['X-Token'] is a custom headers key
      // please modify it according to the actual situation
      config.headers['Authorization'] = 'TOKEN ' + getToken()
    }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  /**
   * If you want to get http information such as headers or status
   * Please return  response => response
  */

  /**
   * Determine the request status by custom code
   * Here is just an example
   * You can also judge the status by HTTP Status Code
   */
  response => {
    const res = response.data

    if (res.code !== 0) {
      // 處理下載文件流
      if (res instanceof Blob) {
        return response
      }
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      })

      // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        // to re-login
        MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
          confirmButtonText: 'Re-Login',
          cancelButtonText: 'Cancel',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        })
      }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  error => {
    console.log('err' + error) // for debug
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service
步驟三:編寫統(tǒng)一存放API地址文件汉买,并且傳參數(shù)指定請(qǐng)求方式(文件在'@/api/account):
// 交易賬號(hào)列表下載
export function accountDownload(query) {
  return request({
    url: '/transaction-account/information-maintenance/download',
    method: 'get',
    responseType: 'blob',
    params: query
  })
}

****** 在和后臺(tái)交互的時(shí)候瓷蛙,如果后臺(tái)返回給我們的是二進(jìn)制流數(shù)據(jù)即寡,我們就要在發(fā)送的時(shí)候加上{responseType:'blob'}這行代碼修然,這樣返回?cái)?shù)據(jù)給我們的就不是亂碼了笛钝。

步驟四:Vue頁(yè)面調(diào)用API接口,并且實(shí)現(xiàn)文件下載
<template>
<el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-download" @click="exportExcel">
      導(dǎo)出賬號(hào)信息
</el-button>
</template>

<script>
import { accountDownload } from '@/api/account'

export default {
  methods: {
    exportExcel () {
      accountDownload().then(response => {
        if (response) {
          // 創(chuàng)建URL
          let url = window.URL.createObjectURL(new Blob([response.data]))
          // 插入一個(gè)a標(biāo)簽愕宋,隱藏玻靡,設(shè)置href屬性,觸發(fā)點(diǎn)擊方法
          let link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
          link.setAttribute('download', '導(dǎo)出賬號(hào)信息.xlsx')
          document.body.appendChild(link)
          link.click()
          
          //下載完成后
          document.body.removeChild(link)
          window.URL.revokeObjectURL(url)
        }
       
      })
    }
  }
}

記錄碰到的問(wèn)題中贝,讓自己更進(jìn)一步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末囤捻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雄妥,更是在濱河造成了極大的恐慌,老刑警劉巖依溯,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件老厌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡黎炉,警方通過(guò)查閱死者的電腦和手機(jī)枝秤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)慷嗜,“玉大人淀弹,你說(shuō)我怎么就攤上這事丹壕。” “怎么了薇溃?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵菌赖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我沐序,道長(zhǎng)琉用,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任策幼,我火速辦了婚禮邑时,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘特姐。我一直安慰自己晶丘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布唐含。 她就那樣靜靜地躺著浅浮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪觉壶。 梳的紋絲不亂的頭發(fā)上脑题,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音铜靶,去河邊找鬼叔遂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛争剿,可吹牛的內(nèi)容都是我干的已艰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚕苇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哩掺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涩笤,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嚼吞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蹬碧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舱禽,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年恩沽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了誊稚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖里伯,靈堂內(nèi)的尸體忽然破棺而出城瞎,到底是詐尸還是另有隱情,我是刑警寧澤疾瓮,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布脖镀,位于F島的核電站,受9級(jí)特大地震影響爷贫,放射性物質(zhì)發(fā)生泄漏认然。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一漫萄、第九天 我趴在偏房一處隱蔽的房頂上張望卷员。 院中可真熱鬧,春花似錦腾务、人聲如沸毕骡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)未巫。三九已至,卻和暖如春启昧,著一層夾襖步出監(jiān)牢的瞬間叙凡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工密末, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留握爷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓严里,卻偏偏與公主長(zhǎng)得像新啼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刹碾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容