Skip to content

Ant Design Vue Table 加一个合计行

众所周知,Vue 2版本的Ant Design Vue的Table组件并没有合计功能,那么就手动增加一个。

看了参考的文章,可能是因为原本的table的实际金额列因为业务写了一个customRender,方案二没有生效,于是选择了直观的方案一。方案一的好处就是只需要统计合计,把合计push进dataSource里就好。

jsx
getList(){
  // 请求数据 ...

  if (res.success) {
    let r = res.result.records || res.result;

    // 计算合计
    if (Array.isArray(r) && r.length > 0) {
      // 需要计算的字段:amount, containerQuantity, quantity, amount
      // 使用reduce求和
      let sumAmount = r.reduce((acc, cur) => acc + cur.amount, 0);
      let sumQuantity =  r.reduce((acc, cur) => acc + cur.quantity, 0);

      // 克隆数组的第一项赋值给lastItem
      let sumRow = { ...r[0] };

      // 遍历sumRow的key,用switch case判断是否为需要计算的字段,是则赋值给上面计算好的总和
      for (const key in sumRow) {
        switch (key) {
          // id为第一列,显示'合计'
          case 'id':
            sumRow[key] = '合计';
            break;
          case 'amount':
            sumRow[key] = sumAmount;
            break;
          case 'quantity':
            sumRow[key] = sumQuantity;
            break;
          default:
          sumRow[key] = null;
            break;
        }
      }
      // 将计算好的sumRow push进数组,
      r.push(sumRow);
    }

    // 把增加了合计列
    this.dataSource = r;

  } else {
  // ..
  }

}
html
<template>
	<a-table
        size="middle"
        :columns="isDetail ? columns2 : columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        @change="handleTableChange">
  </a-table>
</template>

坑:

之前写的sumRow[key] = '',后来又在金额显示上加了filter,显示.00两位小数,于是产生了一些计算,变成sumRow[key] = null 就没问题了。

jsx
switch(){
// ...
          default:
          sumRow[key] = null;
            break;

// ...
}

Released under the MIT License.