elmentUI el-table 总结行

背景

  • 原因:表格展示的都是明细数据,需要对当前的明细数据的部分字段进行汇总
  • 难点:汇总的条件不一定,有时候客户查的是1天,有时候是10天

官方写法

只开启开关

  • 开启汇总开关
  • 如果没有汇总方法,
    • 会自动汇总所有的 数字字段
    • 汇总都是当前页的数据,而不是当前查询的所有结果
<el-table show-summary></el-table>

官方实例

传入自定义汇总方法getSummaries

<el-table show-summary :summary-method="getSummaries"></el-table>
  • 自定义汇总方法
  • 官方的写法是典型的reduce写法
getSummaries(param) {
  
        const { columns, data } = param;
        const sums = [];
        columns.forEach((column, index) => {
          // column 是每一列,index 表示列的索引,第一列的时候不计算合计,显示自定义的文字内容
          if (index === 0) {
            sums[index] = '合计';
            return;
          }
          //下面这一坨代码就是把每一列中的所有单元格中的值转化成Number型,
          //然后对转化后的结果进行判断,如果是number型,则进行累加,
          //如果NaN型,说明单元格里是一些无法转化成number型的值,则返回自定义的内容
          // console.log(this.noticeList);
            const values = data.map(item => Number(item[column.property]));
            // console.log(column);
            // 判断需要统计数据的列
            if (column.property === 'arrivalQty'||column.property === 'qty'||column.property === 'costPrice'||column.property === 'arrivalCostPrice'||column.property === 'transitQty'||column.property === 'amount'||column.property === 'arrivalAmount'||column.property === 'transitAmount') {
              sums[index] = values.reduce((prev, curr) => {
                const value = Number(curr);
                if (!isNaN(value)) {
                  return prev + curr;
                } else {
                  return prev;
                }
              }, 0);
              if(column.property === 'transitQty'||column.property === 'arrivalQty'){
                // 处理数据的格式为千分位逗号隔开
                sums[index]=sums[index].toLocaleString('zh-CN').replace(/\./g, '');
                // console.log(sums[index]);
              }
              else{
                // 处理数据的格式为千分位逗号隔开,数据保留两位小数
                sums[index]=sums[index].toLocaleString('zh-CN', {style: 'currency',currency: 'CNY',}).slice(1)
              }
            } else {
              sums[index] = '/';
            }
        });
        // console.log(sums);
        return sums;
      },

自定义汇总方法

  • 不使用官方写的reduce方法,使用自定义的方法进行汇总
 // 获取汇总数据
    getSummaries (param) {
      const { columns, data } = param;
      const sums = [];
      console.log(param)
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = '合计';
          return;
        }
        // 产出重量的汇总
        if (column.property == 'weightOut') {
          const values = data.map((item) => Number(item[column.property]));
          if (!values.every((value) => isNaN(value))) {
            sums[index] = 99.8
          }
        }

        // 投入重量之和的汇总
        if (column.property == 'weightInTotal') {
          const values = data.map((item) => Number(item[column.property]));
          if (!values.every((value) => isNaN(value))) {
            sums[index] = 100.2
          }
        }

        // 损耗重量之和
        if (column.property == 'wastageWeight') {
          const values = data.map((item) => Number(item[column.property]));
          if (!values.every((value) => isNaN(value))) {
            sums[index] = 0.4
          }
        }

        // 损耗比率平均
        if (column.property == 'wastageRate') {
          const values = data.map((item) => Number(item[column.property]));
          if (!values.every((value) => isNaN(value))) {
            sums[index] = 33.3 + '%'
          }
        }
      });
      return sums;
    },

参考链接

https://blog.csdn.net/m0_62095536/article/details/132897851

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值