el-table合计行前置在首行,自定义合计行方法

背景

el-table原生合计行是在标签内增加show-summary属性,在表尾实现设计合计,且只对表格当前页面显示的列数据进行合计。element-UI效果如下图所示。
在这里插入图片描述
现要求在首行显示合计行,并自定义合计逻辑实现如下效果。
在这里插入图片描述
图示表格中,成本、收入、利润可以由列累加得;而利润率不能简单的直接累加,否则会出现利润率越来越高的情况,不符合生活常识和实际情况,因此该列的合计逻辑依然是【利润率 = 利润/收入】

前端

show-summary显示合计,:summary-method声明使用自定义合计方法。

<el-table v-loading="loading" :data="costList" border
                          :header-cell-style="{backgroundColor: '#DFEBF8'}"
                          show-summary
                          :summary-method = "getSummaryMethod"">
                          <el-table-column……/>
                          <el-table-column……/>
                          <el-table-column……/>
                          <el-table-column……/>
                          <el-table-column……/>

</el-table>                          
  1. 合计行位置放到首行
methods:{    
    /** 合计行设置 */
    showSummariesPosition () {
      // 合计行显示在表头
      let table = document.querySelector('.el-table')
      let footer = document.querySelector('.el-table__footer-wrapper')
      let body = document.querySelector('.el-table__body-wrapper')
      table.removeChild(footer)
      table.insertBefore(footer, body)
    },
 }
  1. 定义合计逻辑方法
  data() {
    return {
    costList:[],	//接收后端数据
    }
  },
  created() {
    this.getSummaryMethod();
  },
  methods: {
	/** 自定义合计逻辑 */
    getSummaryMethod(params) {
      const { columns, data } = params;
      const sums = [];  //累加和
      const totalValue = [];  //存储列表,封装合计行要显示的数据
      columns.forEach((column, index) => {		//参数(列,列下标)
        sums [index] =0;	//累加和,初始化为0
        var i;
        if (index === 0) {	//第一列显示“合计”字样
          totalValue[index] = "合计";
          return;
        }
        if (index === 1) {  //第二列----总成本
          for (i = 0; i < this.costList.length; i++){	//循环累加
            sums[index] = this.costList[i].totalCost+sums[index];	
          };
          totalValue[index] = (sums[index]/10000).toFixed(2) + '万元';//格式化,保留两位小数
          //把累加和写入合计行列表
          return ;
        }
       if (index === 2) {   //第三列----总产值
         for (i = 0; i < this.costList.length; i++) {
           sums[index] = this.costList[i].totalOutput+sums[index];
         }
         totalValue[index] = (sums[index]/10000).toFixed(2) + '万元';
          return ;
        }
        if (index === 3) {    //第四列----利润
          sums[3] = sums[2]-sums[1];
          totalValue[index] = (sums[3]/10000).toFixed(2) + '万元';
          return ;
        }
        if (index === 4) {    //第五列----利润率 = 利润/收入
          totalValue[index] = (sums[3]/sums[2]*100).toFixed(2) + '%';
          return ;
        }
      });
      return totalValue;	//返回合计行列表
    },
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在el-table中添加自定义合计,你需要进以下几个步骤: 1. 在el-table中添加合计的位置。你可以选择将合计插入到表格数据中的任意位置,例如,在第二的位置插入合计(索引为1)。 2. 在表格数据中添加合计的数据。你可以根据实际需求为合计添加相应的数据。 3. 在el-table中定义合计的模板。你可以使用<template>标签来定义合计的样式和内容。 4. 使用计算属性来处理表格数据,并在合适的位置插入合计的数据。在计算属性中,你可以通过对原始表格数据进处理,将合计的数据插入到正确的位置。 下面是一个示例代码,演示了如何在el-table中添加自定义合计: ``` <template> <el-table :data="computedTableData"> <el-table-column type="index" label="序号" width="80"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="score" label="分数"></el-table-column> <!-- 添加合计的模板 --> <template slot="append"> <el-table-column label="合计"> <template slot-scope="scope"> {{ getTotal(scope.$index) }} </template> </el-table-column> </template> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, score: 80 }, { name: '李四', age: 20, score: 90 }, { name: '王五', age: 22, score: 85 } ] }; }, computed: { computedTableData() { let totalRow = { name: '合计', age: 0, score: 0 }; // 在合适的位置插入合计的数据 this.tableData.splice(1, 0, totalRow); return this.tableData; } }, methods: { getTotal(index) { // 计算合计值 let total = 0; for (let i = 0; i < this.tableData.length; i++) { total += this.tableData[i].score; } return total; } } }; </script> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值