Vue 项目购物车中 使用ElementUI Table 组件对列求和

Vue 项目中 ElementUI 使用 Table 组件 , 列求和问题傻瓜指南 !!

一.目标

使用ElementUI的Table组件, 通过内置的summary-method传入一个方法来完成金额的求和.

在这里插入图片描述

二.步骤

1.在Table组件的 标签内加入属性 show-summary 和 :summary-method=“getSummaries”’
	<el-table ref="multipleTable" :data="dataList" 
		show-summary :summary-method="getSummaries" 
     <el-table-column>
2.在method中完成 getSummaries 函数

这是官网(ElementUI官方文档)的提供方案,通过这个方法可以在Table最后一行每列数据的求和结果,需要做一些更改才能使用, 要快速使用的伙伴可以继续向下看.

 methods: {
      getSummaries(param) {
        const { columns, data } = param;
        const sums = [];
        columns.forEach((column, index) => {
          if (index === 0) {
            sums[index] = '总价';
            //想深入理解的伙伴建议通过输出以下值开始读代码
            // console.log('param', param);
            // console.log('sums',sums);
            // console.log('data',data);
            // console.log('column',column);
            return;
          }
           //通过给el-table-column设置prop获取属性对所属属性值转化为Nmuber格式
          const values = data.map(item => Number(item[column.property]));
          if (!values.every(value => isNaN(value))) {
          //通过reduce求和,curr为每一列的每个列元素的值,返回值为sums[index]
            sums[index] = values.reduce((prev, curr) => {
              const value = Number(curr);
              if (!isNaN(value)) {
                return prev + curr;
              } else {
                return prev;
              }
            }, 0);
            sums[index] += ' 元';
          } else {
            sums[index] = 'N/A';
          }
        });
        //返回所有sums[index]的数组,组件内部会解析为最后一行的数据
        return sums;
      }
    }
  };

以下是我使用的方案

 methods: {
       getSummaries(param) {
       //解构赋值
       //columns:所有列的集合
       //data:你的原始数据  [{id:1,num:1,price:20},{id:2,num:1,price:20},{id:3,num:1,price:20}]
        const {
          columns,
          data
        } = param;
        //准备一个空的结果数组,用来存放每一列的和
        const sums = [];
        //设置最后一行的要设定的列值,这里有7列,选择第5,6列的位置
        columns.forEach((column, index) => {
          //价格总和的标题
          if (index === 5) {
            sums[index] = '商品金额:';
            // console.log('param', param);
            // console.log('sums',sums);
            // console.log('data',data);
            // console.log('column',column);
            return
          }
          //金额的计算   data里的num字段和price相乘
          if (index == 6) {
            const values = data.map(item => Number(item['num']));
            const price = data.map(item=>Number(item['price']))
       	    //通过reduce求和,curr为每一列的每个元素的值,return prev返回值给到sums[index]
            sums[index] = values.reduce((prev, curr, index) => {
              const value = Number(curr);
              //确定数据是否为空,不为空进行计算,为空返回原值
              if (!isNaN(value)) {
              	//curr为数量,price为单价,求得每行的金额,再通过reduce累加求和
                return prev + curr*price[index];
              } else {
                return prev;
              }
            }, 0);
          }
          //不是目标的列不添加任何内容
           else {
            	sums[index] = '';
          }
        });
        //返回所有sums[index]的数组,组件内部会把每一列结果的数组, 解析为最后一行的数据
        return sums;
      },
  };
console.log的参考在这里插入图片描述

三.总结

ElementUI Table组件的效果非常不错 , 但是使用起来要对单元格和内部的操作都要依靠它内置的函数来执行, 本文对他提供的一种自定义列表内容的方案进行修改,解决了每列数据求和困难的问题,并对组件使用提供了一些思路, 希望对各位有用.

转载自神秘代码学徒

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将Vue项目Element UITable组件导出为Excel文件,可以按照以下步骤进行操作: 1. 首先,确保你的Vue项目已经安装了Element UI和xlsx插件。如果还没有安装,可以使用以下命令进行安装: ``` npm install element-ui xlsx ``` 2. 在需要导出Table组件Vue组件,导入所需的模块和样式: ```javascript import XLSX from 'xlsx'; import 'xlsx/dist/xlsx.css'; import { Table } from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; ``` 3. 在模板使用Element UITable组件,并绑定数据: ```html <template> <div> <el-table :data="tableData" ref="table"> <!-- 表格内容 --> </el-table> <el-button type="primary" @click="exportTable">导出表格</el-button> </div> </template> ``` 4. 在Vue组件的`exportTable`方法使用XLSX库将Table组件的数据导出为Excel文件: ```javascript export default { data() { return { tableData: [ // 表格数据 ], }; }, methods: { exportTable() { const tableData = this.$refs.table.store.states.data; // 获取Table组件数据 const worksheet = XLSX.utils.json_to_sheet(tableData); // 将数据转换为worksheet对象 const workbook = XLSX.utils.book_new(); // 创建工作簿对象 XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); // 将worksheet添加到工作簿 const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' }); // 将工作簿转换为二进制数据 function s2ab(s) { // 字符串转ArrayBuffer const buf = new ArrayBuffer(s.length); const view = new Uint8Array(buf); for (let i = 0; i < s.length; i++) { view[i] = s.charCodeAt(i) & 0xff; } return buf; } const blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' }); // 创建Blob对象 const downloadLink = document.createElement('a'); // 创建下载链接 downloadLink.href = URL.createObjectURL(blob); downloadLink.download = 'table.xlsx'; // 下载文件名 document.body.appendChild(downloadLink); // 添加下载链接到页面 downloadLink.click(); // 模拟点击下载 setTimeout(() => { document.body.removeChild(downloadLink); // 下载完成后移除下载链接 URL.revokeObjectURL(downloadLink.href); // 释放URL对象 }, 200); }, }, }; ``` 在这个示例,`exportTable`方法使用`$refs`来获取Table组件的数据,并使用XLSX库将数据转换为Excel文件。然后,创建一个下载链接并模拟点击下载。最后,移除下载链接和释放URL对象。 请注意,上述示例的`tableData`和`s2ab`函数需要根据你的实际情况进行调整。`tableData`应该是你要导出的Table组件的数据,而`s2ab`函数是一个将字符串转换成ArrayBuffer的辅助函数。 使用以上步骤,你就可以将Element UITable组件导出为Excel文件了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值