封装Vue可选择列导出表格组件

摘要:
范围row[item.prop]:'-'}导出表/**组件函数:可以选择列来导出表。

1、创建ExportExcel.vue组件

<template>
 <div class="export_tools">
  <div v-show="false">
   <el-table id="out-table" style=" 100%;" :data="exportTable">
    <template v-for="(item, index) in exportTitle">
     <el-table-column
      v-if="item.isExport"
      :prop="item.prop"
      :label="item.label"
      align="center"
      :key="index"
     >
      <template slot-scope="scope">
       <span>{{ scope.row[item.prop] ? scope.row[item.prop] : '-' }}</span>
      </template>
     </el-table-column>
    </template>
   </el-table>
  </div>
  <el-button v-if="showExportBtn" type="primary" v-debounce="export_data" icon="el-icon-download">导出表格</el-button>
 </div>
</template>

<script>
/**
 * 组件功能:可选择列导出表格。
 * 组件说明:需要从父组件中传入四个值,如下
 *  1、exportTable:需要导出的表格数据;
 *  2、exportTitle:表格中有哪些列是可以导出的;格式如下(isExport为true则导出此列,false则不导出此列):
 *          [
 *              {
 *                  prop:'对应的字段1',
 *                  label:'列名1',
 *                  isExport: true
 *              },
 *              {
 *                  prop:'对应的字段2',
 *                  label:'列名2',
 *                  isExport: false
 *              }
 *          ]
 *  3、excelName:导出的文件名,最后导出后文件的格式为:年-月-日 时_分_秒-excelName.xlsx,
 *  如 excelName 为 ‘通道数据表格’,则最后导出的文件名是:2022-01-14 10_40_52-通道数据表格.xlsx
 *  4、showExportBtn:是否显示 “导出表格” 按钮,默认显示,如不显示的话可以通过ref的方式直接调用 export_data 方法来导出表格。
 */
import FileSaver from 'file-saver'
import XLSX from 'xlsx'
export default {
 name: 'ExportExcel',
 props: {
  exportTable: {
   type: Array,
   required: true,
   default: [],
  },
  exportTitle: {
   type: Array,
   required: true,
   default: [],
  },
  excelName: {
   type: String,
   required: true,
   default: 'Data',
  },
  showExportBtn: {
   type: Boolean,
   required: false,
   default: true,
  },
 },
 data() {
  return {}
 },
 methods: {
  // 导出 excel 表格
  export_data() {
   if (this.exportTable.length == 0) return this.$message.warning('表格为空,无法导出...')
   // 为el-table添加一个id:out-table
   let wb = XLSX.utils.table_to_book(document.querySelector('#out-table'))
   let wbout = XLSX.write(wb, {
    bookType: 'xlsx', // 导出的文件类型
    bookSST: true,
    type: 'array',
   })
   try {
    FileSaver.saveAs(
     new Blob([wbout], { type: 'application/octet-stream' }),
     `${this.$dayjs().format('YYYY-MM-DD HH_mm_ss')}-${this.excelName}.xlsx`
    )
    setTimeout(() => {
     return this.$message.success('表格导出成功...')
    }, 1000)
   } catch (e) {
    if (typeof console !== 'undefined') console.log(e, wbout)
   }
   return wbout
  },
 },
 mounted() {},
}
</script>

<style lang="scss" scoped></style>

2、在父组件中引入

import ExportExcel from '../commonTools/ExportExcel.vue' // 导出表格组件

3、在components中注册组件

 components: {
  'export-excel': ExportExcel,
 },

4、在template中使用组件

<export-excel
     :exportTable="tableData"
     :excelName="excel_name"
     :exportTitle="export_title"
    ></export-excel>

注意:需要安装依赖

npm install --save xlsx file-saver

免责声明:文章转载自《封装Vue可选择列导出表格组件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)vi/vim 常用技巧下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue 优化小技巧 之 require.context()

1、require.context() 回忆一下 当我们引入组件时   第一步 创建一个子组件   第二步 import ... form ...     第三步 components:{..}       第四步 页面使用 <...></...>   代码实现:                                 ...

vue版本更新

之前电脑已经安装 Node环境和 vue-cli脚手架,但是过段时间没有使用,然后现在用 vue-cli 搭建项目的时候,启动服务器的时候报错,无法启动成功,摸索半天,发现是因为 Node和vue-cli 的版本过低,都需要更新,更新过后成功启动...... 以下是 Node 和 vue-cli 更新的总结: 一. vue-cli更新   在百度了好久,...

vue 记录 mode:history 模式 踩过的坑

先上官网文档地址 https://router.vuejs.org/zh/guide/essentials/history-mode.html 由于公司内容原因没有https的测试域名 所以在正式接口后加了个、/t/  eg:https:xxxx.com  测试接口域名====>https:xxxx.com/t 1.需要在路由文件  router /...

vscode如何配置ts的lint,如何配置才能让eslint和prettier不冲突一键格式化代码(vue开发使用)

最近在使用ts,发觉tslint在vscode上使用很不方便,不如eslint一键格式化高效,就想着能不能配置下vscode让其像写js一样爽 这篇文章主要解决2个问题,第一个是如何让vscode使用ts的lint,第二个是如何配置才能让eslint和prettier这2个代码格式化的vscode插件不互相冲突 vscode使用ts的lint 首先ts的l...

vue实现文件下载功能

对接口进行请求: //导出excel表到桌面 getData.exportexcel = (data)=>{ return http({ method: 'post', url: baseUrl + '/exportexcel/', data: { firstName: 'Fred', l...

vue升级Babel支持可选链和合并空值运算符

一、babel作用: (我偷懒了,直接用官网介绍) Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。据我所知, 无论是webpack项目还是vite项目都需要使用到babel来编译(.vue)文件。=> vite3支持jsx...