el-table 表格最后一行显示总计

table的合计功能

需求:计算表格中最后一列的总和,其他数字列不进行计算。

官网中的示例是所有数字列都进行计算总和的。所以需要自己处理。
在这里插入图片描述

参考官网知识点:

    summary-method 自定义的合计计算方法 Function({ columns, data })

实现代码如下:

给table添加:summary-method="getSummaries"
 <el-table ref="table" size="small" :data="shopList" fit show-summary :summary-method="getSummaries">
  <el-table-column label="项目" align="center" prop="proName"></el-table-column>
  <el-table-column label="单笔(元)" align="center" prop="perMoney"></el-table-column>
  <el-table-column label="数量" align="center" prop="num"></el-table-column>
  <el-table-column label="合计(元)" align="center" prop="total"></el-table-column>
</el-table>
  1. 对应的函数如下:
getSummaries(param) {
//此处打印param可以看到有两项,一项是columns,一项是data,最后一列可以通过columns.length获取到。
  const { columns, data } = param
  const len = columns.length
  const sums = []
  columns.forEach((column, index) => {
  //如果是第一列,则最后一行展示为“总计”两个字
    if (index === 0) {
      sums[index] = '总计'
      //如果是最后一列,索引为列数-1,则显示计算总和
    } else if (index === len - 1) {
      const values = data.map(item => Number(item[column.property]))
      if (!values.every(value => isNaN(value))) {
        sums[index] = values.reduce((prev, curr) => {
          const value = Number(curr)
          if (!isNaN(value)) {
            return prev + curr
          } else {
            return prev
          }
        }, 0)
      } else {
        sums[index] = 'N/A'
      }
      //如果是除了第一列和最后一列的其他列,则显示为空
    } else {
      sums[index] = ''
    }
  })
  return sums
}
### 实现 Element UI `el-table` 组件中的总计行 为了实现在 `el-table` 组件中添加最后一行作为总计行的功能,可以利用 `show-summary` 属性和 `summary-method` 方法。通过这些配置项,可以根据特定逻辑计算并展示每一列的汇总数据。 #### 使用 show-summary 和 summary-method 当启用 `show-summary="true"` 时,表格会在最下方自动增加一行用于显示各字段的小结信息。而 `summary-method` 则允许开发者自定义这一总结行的内容及其样式[^1]。 对于希望在表尾追加多条记录的情况——比如既要有每页小计也要有累计总数,则需调整 `summary-method` 函数返回的结果结构: ```javascript methods: { getSummaries(param) { const { columns, data } = param; const sums = []; // 进行业务逻辑处理,这里假设是从服务器获取的数据对象中有两个特殊键 'subtotal' 和 'total' let subtotalValue = this.serverData.subtotal || 0; // 当前页小计 let totalValue = this.serverData.total || 0; // 总计 columns.forEach((column, index) => { if (index === 0) { sums[index] = "当前页小计"; return; } switch(column.property){ case 'amount': sums[index] = subtotalValue.toFixed(2); break; default: sums[index] = ''; } }); // 添加第二行即总计行 sums.push(''); columns.forEach((column, index) => { if(index===0){ sums[sums.length-1]="总计"; return ; } switch(column.property){ case 'amount': sums[sums.length-1]=totalValue.toFixed(2); break; default: sums[sums.length-1]=''; } }); return sums; } } ``` 上述代码片段展示了如何构建一个包含两行(分别为“当前页小计”与“总计”)在内的定制化摘要函数。注意这里的 `this.serverData` 应该由实际项目环境下的 API 请求所获得的实际响应体替换掉[^5]。 此方式不仅满足了题目描述的需求,还提供了灵活性以便适应更多复杂场景下的统计数据呈现需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值