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

背景

el-table原生合计行是在标签内增加show-summary属性,在表尾实现设计合计,且只对表格当前页面显示的列数据进行合计。element-UI效果如下图所示。

现要求在首行显示合计行,并自定义合计逻辑实现如下效果。

图示表格中,成本、收入、利润可以由列累加得;而利润率不能简单的直接累加,否则会出现利润率越来越高的情况,不符合生活常识和实际情况,因此该列的合计逻辑依然是【利润率 = 利润/收入】

前端

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

html 复制代码
<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. 合计行位置放到首行
javascript 复制代码
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. 定义合计逻辑方法
javascript 复制代码
  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;	//返回合计行列表
    },
}
相关推荐
佳腾_5 分钟前
【Web应用服务器_Tomcat】三、Tomcat 性能优化与监控诊断
前端·中间件·性能优化·tomcat·web应用服务器
brzhang10 分钟前
告别 CURD,走向架构:一份帮你打通任督二脉的知识地图
前端·后端·架构
Moment17 分钟前
在 React 里面实现国际化实现是太简单了 🙂‍↔️🙂‍↔️🙂‍↔️
前端·javascript·react.js
兜小糖的小秃毛18 分钟前
el-Input输入数字自动转千分位进行展示
前端·javascript·vue.js
兜小糖的小秃毛18 分钟前
文号验证-同时对两个输入框验证
开发语言·前端·javascript
brzhang19 分钟前
代码越写越乱?掌握这 5 种架构模式,小白也能搭出清晰系统!
前端·后端·架构
J总裁的小芒果26 分钟前
el-table 自定义列、自定义数据
前端·javascript·vue.js
晚风予星27 分钟前
简记|React+Antd中实现 tooltip、ellipsis、copyable功能组件
前端·react.js
brzhang34 分钟前
告别『上线裸奔』!一文带你配齐生产级 Web 应用的 10 大核心组件
前端·后端·架构
程序员Bears35 分钟前
深入理解CSS3:Flex/Grid布局、动画与媒体查询实战指南
前端·css3·媒体·visual studio code