vue中element的合计功能自定义某一列的总计

4,567 阅读2分钟

element的默认合计功能

show-summary设置为true就会在表格尾部展示合计行。默认情况下,对于合计行,第一列不进行数据求合操作,而是显示「合计」二字(可通过sum-text配置),其余列会将本列所有数值进行求合操作,并显示出来。当然,你也可以定义自己的合计逻辑。使用summary-method并传入一个方法,返回一个数组,这个数组中的各项就会显示在合计行的各列中,具体可以参考本例中的第二个表格。

图片中的示例二


HTML:
 <el-table
    :data="tableData6"
    border
    height="200"
    :summary-method="getSummaries"
    show-summary
    style="width: 100%; margin-top: 20px">
    <el-table-column
      prop="id"
      label="ID"
      width="180">
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名">
    </el-table-column>
    <el-table-column
      prop="amount1"
      label="数值 1(元)">
    </el-table-column>
    <el-table-column
      prop="amount2"
      label="数值 2(元)">
    </el-table-column>
    <el-table-column
      prop="amount3"
      label="数值 3(元)">
    </el-table-column>
    </el-table>
    js
    getSummaries(param) {
        const { columns, data } = param;
        const sums = [];
        columns.forEach((column, index) => {
          if (index === 0) {
            sums[index] = '总价';
            return;
          }
          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);
            sums[index] += ' 元';
          } else {
            sums[index] = 'N/A';
          }
        });
        return sums;
      }
    }

自定义的总计代码块

然后有时候这并不是我们需要的东西,有时候我们只需要其中的一列数据的总计或是总和,我们可以这样

    <el-table
    :data="tableData6"
    border
    height="200"
    :summary-method="getSummaries"
    show-summary
    style="width: 100%; margin-top: 20px">
    <el-table-column
      prop="id"
      label="ID"
      width="180">
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名">
    </el-table-column>
    <el-table-column
      prop="amount1"
      label="数值 1(元)">
    </el-table-column>
    <el-table-column
      prop="amount2"
      label="数值 2(元)">
    </el-table-column>
    <el-table-column
      prop="amount3"
      label="数值 3(元)">
    </el-table-column>
    </el-table>
    
    js:
    getSummaries(param) {
    // 列表数据
      const { columns, data } = param
      // 定义新的数组接收
      const sums = []
      columns.forEach((column, index) => {
      // 定义第一列的底部是' 总计'
        if (index === 0) {
          sums[index] = '总计'
          return
        }
        // 循环列表数据得到我们的各个行与列的数据
        const values = data.map(item => Number(item[column.property]))
        // 通过prop找到你需要计算的列。
        if (column.property === 'amount3') {
          sums[index] = values.reduce((prev, curr) => {
            const value = Number(curr)
            if (!isNaN(value)) {
              return prev + curr
            } else {
              return prev
            }
          }, 0)
          sums[index]
          // 定义一个值接收得到的总计的数值
          this.contaddsum = sums[index].toFixed(2)
        } else {
          sums[index] = '--'
        }
      })
      // 得到返回值
      return sums
    },

自定义列总计示例

感谢!