前端实现vue element ui 勾选的表格数据导出

安装依赖

npm install --save xlsx file-saver
npm install -D script-loader

在src文件夹中新建文件夹(命名为excel)

新建文件夹后,在utils文件夹内新建两个js文件,分别命名为Blob.js、export2Excel.js,

在相关文件内的method方法中,写入如下代码

ExportExcel.vue子组件

<template>
    <el-button type="primary"  :loading="downloadLoading"   @click="downloadExcel">导&nbsp;&nbsp;出</el-button>
</template>

<script>
import FileSaver from 'file-saver'
import XLSX from 'xlsx'
import Blob from '@/utils/Blob.js'
import Export2Excel from '@/utils/Export2Excel.js'
export default {
  props: {
    id: {
      type: String,  //table ID名称
      default: 'table'
    },
    name: {
      type: String, //导出需要的名字
      default: 'Table'
    },
    multipleSelection:{
       type: Array, //导出需要的数据
      default: 'Table'
    }

  },
  data () {
    return {
      downloadLoading:false
    }
  },
  components: {},
  methods: {
    // 数据写入excel
    export2Excel () {
      var that = this;
      require.ensure([], () => {
        const { export_json_to_excel } = require('@/utils/Export2Excel'); // 这里必须使用绝对路径,使用@/+存放export2Excel的路径
        const tHeader = ['序号', '设备号', '通道号','接收时间','采集时间','原始值1','原始值2','计算值1','计算值2','电压']; // 导出的表头名信息
        const filterVal = ['index', 'deviceid', 'chnum','measureTime','measureTime','sdata1','sdata2','rdata1','rdata2','voltage']; // 导出的表头字段名,需要导出表格字段名
        const list = that.excelData;
        const data = that.formatJson(filterVal, list);

        export_json_to_excel(tHeader, data, '导出Table');// 导出的表格名称,根据需要自己命名
      });
    },
    // 格式转换,直接复制即可
    formatJson (filterVal, jsonData) {
      return jsonData.map(v => filterVal.map(j => v[j]));
    },
     downloadExcel () {
      this.$confirm('确定下载列表文件?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.excelData = this.multipleSelection; // multipleSelection是一个数组,存储表格中选择的行的数据。
        if(this.excelData.length !== 0) {
        this.export2Excel();
        }else{
           this.$message({
          message: '请选择至少一条数据进行操作!',
          type: 'warning'
        })
        }
        
      }).catch(() => {

      });
    },
  }
}
</script>

父组件

 <el-table
          row-key="ownerUserid"
          id="exportTab"
          class="driver-list-main"
          ref="multipleTable"
          border
          :data="userList"
          tooltip-effect="dark"
          style="width: 100%"
          :header-cell-style="{
            background: '#eef1f6',
            color: '#606266',
            'text-align': 'center',
          }"
          :cell-style="{ 'text-align': 'center' }"
          @selection-change="handleSelectionChange"
        >
          <el-table-column type="selection" width="45"> </el-table-column>
          <el-table-column  label="序号" sortable width="75">
            <template slot-scope="scope" prop="ownerUserid">
              <span v-text="getIndex(scope.$index)"> </span>
            </template>
          </el-table-column>
          <el-table-column prop="deviceid" label="设备号" sortable width="165">
          </el-table-column>
          <el-table-column prop="chnum" label="通道号" sortable width="85">
          </el-table-column>
          <el-table-column
            prop="collectTime"
            label="接收时间"
            show-overflow-tooltip
            sortable
            width="165"
          >
          </el-table-column>
          <el-table-column
            prop="measureTime"
            label="采集时间"
            show-overflow-tooltip
            sortable
            width="165"
          >
          </el-table-column>
          <el-table-column
            prop="sdata1"
            label="原始值1"
            show-overflow-tooltip
            sortable
          >
          </el-table-column>
          <el-table-column
            prop="sdata2"
            label="原始值2"
            show-overflow-tooltip
            sortable
          >
          </el-table-column>
          <el-table-column
            prop="rdata1"
            label="计算值1"
            show-overflow-tooltip
            sortable
          >
          </el-table-column>
          <el-table-column
            prop="rdata2"
            label="计算值2"
            show-overflow-tooltip
            sortable
          >
          </el-table-column>
          <el-table-column
            prop="voltage"
            label="电压"
            show-overflow-tooltip
            sortable
          >
          </el-table-column>
          <el-table-column label="操作" width="70">
            <!-- eslint-disable-next-line -->
            <template slot-scope="scope">
              <el-tooltip
                class="item"
                effect="dark"
                content="删除"
                placement="top-start"
              >
                <el-button
                  style="z-index: 99"
                  @click="deleteItem(scope)"
                  type="danger"
                  size="medium"
                  icon="el-icon-delete"
                  class="del"
                ></el-button>
              </el-tooltip>
            </template>
          </el-table-column>
        </el-table>
<el-col :xs="3" :sm="3" :lg="3" class="flex-align-center1">
                <exportExcel
                  :id="'exportTab'"
                  :name="'导出Table'"
                  :multipleSelection="multipleSelection"
                ></exportExcel>
              </el-col>

handleSelectionChange(val) {
      this.multipleSelection = val;
    },

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue Element UI提供了el-pagination组件来实现表格数据的分页功能。以下是实现步骤: 1. 在Vue组件中引入el-pagination组件并定义分页属性 ``` <template> <div> <el-table :data="tableData" border> //表格内容 </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> </template> <script> export default { data() { return { tableData: [], //表格数据 total: 0, //总记录数 pageSize: 10, //每页记录数 currentPage: 1 //当前页码 }; }, methods: { handleSizeChange(val) { this.pageSize = val; this.getData(); }, handleCurrentChange(val) { this.currentPage = val; this.getData(); }, getData() { //获取数据,并更新this.tableData和this.total } } }; </script> ``` 2. 在el-pagination组件中绑定事件和属性 - @size-change:当每页显示条数改变时触发的事件,调用handleSizeChange方法更新pageSize并重新获取数据。 - @current-change:当当前页码改变时触发的事件,调用handleCurrentChange方法更新currentPage并重新获取数据。 - :current-page:当前页码,绑定到currentPage属性。 - :page-sizes:每页显示条数数组,可以自定义,默认为[10, 20, 30, 40]。 - :page-size:每页显示条数,绑定到pageSize属性。 - layout:分页组件布局。其中total表示总记录数,sizes表示每页显示条数选择器,prev表示上一页按钮,pager表示页码按钮,next表示下一页按钮,jumper表示跳转输入框和确定按钮。 - :total:总记录数,绑定到total属性。 3. 在getData方法中获取数据并更新表格数据和总记录数 ``` getData() { //计算分页查询的参数 const start = (this.currentPage - 1) * this.pageSize; const limit = this.pageSize; //发起分页查询请求 axios.get('/api/data', { params: { start, limit } }).then(response => { this.tableData = response.data.rows; //更新表格数据 this.total = response.data.total; //更新总记录数 }); } ``` 以上就是使用Vue Element UI实现表格数据分页功能的步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值