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

Vue無后端配合實現(xiàn)導(dǎo)出功能的示例代碼

 更新時間:2024年01月31日 09:52:37   作者:會說法語的豬  
這篇文章主要為大家詳細(xì)介紹了Vue如何在無后端配合的情況下實現(xiàn)導(dǎo)出功能,文中的示例代碼簡潔易懂,有需要的小伙伴可以跟隨小編一起了解一下

正常導(dǎo)出是后端來做,我們?nèi)フ{(diào)用后端接口,會返回給我們文件(前端即:axios請求,設(shè)置responseType: 'blob',然后創(chuàng)建一個a標(biāo)簽,通過window.URL.createObjectURL將blob轉(zhuǎn)為一個路徑,為a標(biāo)簽增加download屬性,給其一個文件名稱,執(zhí)行click事件即可下載);但是沒有后端的情況下怎么做呢?下面來簡單介紹一下:

首先安裝兩個插件 

npm i file-saver -S
npm i xlsx -S

封裝一下 

method.js 

import * as XLSX from 'xlsx'
import FileSaver from 'file-saver'
 
// 導(dǎo)出Excel(根據(jù)表格當(dāng)前的數(shù)據(jù)進(jìn)行導(dǎo)出)
export function exportExcel1(dom, fileName) {
  // 前面這五行代碼作用就是去掉導(dǎo)出重復(fù)的表 就是導(dǎo)出的時候我這邊會導(dǎo)出兩個一樣的表格,可能是因為右側(cè)的fixed導(dǎo)致的,所以在導(dǎo)出的時候要刪除掉
  let tableDom = dom.cloneNode(true)
  let elTableFixedRight = tableDom.querySelector(".el-table__fixed-right")
  let elTableFixed = tableDom.querySelector(".el-table__fixed")
  if(elTableFixedRight) tableDom.removeChild(elTableFixedRight);
  if(elTableFixed) tableDom.removeChild(elTableFixed);
 
  let wb = XLSX.utils.table_to_book(tableDom, { raw: true })
  let wbout = XLSX.write(wb, {
    bookType: 'xlsx',
    bookSST: true,
    type: 'array'
  })
  try {
    FileSaver.saveAs( new Blob([wbout], { type: "application/octet-stream" }), fileName);
  } catch(e) {
    console.error(e, wbout, '----->>>')
  }
}
 
// 導(dǎo)出Excel (根據(jù)數(shù)據(jù) 自定義導(dǎo)出  一般表格會分頁展示數(shù)據(jù),如果按照上面的方式 只會導(dǎo)出當(dāng)前頁的,如果想導(dǎo)出所有數(shù)據(jù) 就使用該方法)
export function exportExcel(tableList, fileName) {
  let tableData = [['故障報警', '設(shè)備名稱', '故障內(nèi)容', '系統(tǒng)', '狀態(tài)', '開始時間', '結(jié)束時間']]
  tableList.forEach(item => {
    tableData.push([ item.alarm, item.equipname, item.point, item.system, item.status, item.starttime, item.endtime ])
  })
  let ws = XLSX.utils.aoa_to_sheet(tableData)
  let wb = XLSX.utils.book_new()
  XLSX.utils.book_append_sheet(wb, ws)
  let wbout = XLSX.write(wb, {
    bookType: 'xlsx',
    bookSST: true,
    type: 'array'
  })
  try {
    FileSaver.saveAs( new Blob([wbout], { type: "application/octet-stream" }), fileName);
  } catch(e) {
    console.error(e, wbout, '----->>>')
  }
}
 
// 暫時沒用下面這兩個方法(也是可以的)
// 將一個sheet轉(zhuǎn)成最終的excel文件的blob對象,然后利用URL.createObjectURL下載
export function sheet2blob(dom, sheetName) {
  // 前面五行代碼作用就是去掉導(dǎo)出重復(fù)的表 就是導(dǎo)出的時候我這邊會導(dǎo)出兩個一樣的表格,可能是因為右側(cè)的fixed導(dǎo)致的,所以在導(dǎo)出的時候要刪除掉
  let tableDom = dom.cloneNode(true)
  let elTableFixedRight = tableDom.querySelector(".el-table__fixed-right")
  let elTableFixed = tableDom.querySelector(".el-table__fixed")
  if(elTableFixedRight) tableDom.removeChild(elTableFixedRight);
  if(elTableFixed) tableDom.removeChild(elTableFixed);
  const sheet = XLSX.utils.table_to_sheet(tableDom);//將一個table對象轉(zhuǎn)換成一個sheet對象
  sheetName = sheetName || 'sheet1';
  var workbook = {
      SheetNames: [sheetName],
      Sheets: {}
  };
  workbook.Sheets[sheetName] = sheet; // 生成excel的配置項
 
  var wopts = {
      bookType: 'xlsx', // 要生成的文件類型
      bookSST: false, // 是否生成Shared String Table,官方解釋是,如果開啟生成速度會下降,但在低版本IOS設(shè)備上有更好的兼容性
      type: 'binary'
  };
  var wbout = XLSX.write(workbook, wopts);
  var blob = new Blob([s2ab(wbout)], {
      type: "application/octet-stream"
  }); // 字符串轉(zhuǎn)ArrayBuffer
  function s2ab(s) {
      var buf = new ArrayBuffer(s.length);
      var view = new Uint8Array(buf);
      for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
      return buf;
  }
  return blob;
}
export function openDownloadDialog(url, saveName) {
  if (typeof url == 'object' && url instanceof Blob) {
      url = URL.createObjectURL(url); // 創(chuàng)建blob地址
  }
  var aLink = document.createElement('a');
  aLink.href = url;
  aLink.download = saveName || ''; // HTML5新增的屬性,指定保存文件名,可以不要后綴,注意,file:///模式下不會生效
  var event;
  if (window.MouseEvent) event = new MouseEvent('click');
  else {
      event = document.createEvent('MouseEvents');
      event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  }
  aLink.dispatchEvent(event);
}

組件中使用(按需引入) 

<el-button icon="el-icon-download" @click="downloadTpl()" size="small">導(dǎo)出</el-button>
 
<el-table
  id="myTable"
  :data="dataList"
  size="medium"
  border
  @selection-change="selectionChangeHandle"
  v-loading="loading"
  class="table"
>
  <!-- ... -->
</el-table>

import { exportExcel, sheet2blob, openDownloadDialog } from './method'
export default {
  methods: {
    // 導(dǎo)出
    exportExcel() {
      exportExcel(document.getElementById('myTable'), '故障及報警.xlsx')
      //這個只需要 XLSX 庫 應(yīng)該也是可以的,我這邊暫時沒用
      // openDownloadDialog(sheet2blob(document.getElementById('myTable')), '故障及警.xlsx')
    }
  }
}

以上就是Vue無后端配合實現(xiàn)導(dǎo)出功能的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Vue導(dǎo)出功能的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

揭阳市| 兰坪| 大悟县| 乐安县| 河曲县| 顺义区| 义乌市| 正阳县| 日照市| 乐安县| 乌拉特中旗| 固原市| 太仆寺旗| 玛沁县| 金川县| 中方县| 白山市| 车致| 兰坪| 涟水县| 彝良县| 双鸭山市| 曲水县| 闽清县| 青铜峡市| 扬州市| 汝南县| 五指山市| 苍南县| 武功县| 郓城县| 西和县| 和硕县| 乐东| 沙河市| 汪清县| 翁源县| 壤塘县| 横山县| 景谷| 栾城县|