Element 单元格合计(多行合计、合计列合并)

前言

基本内容自行查看官方文档,这里说一下比较特殊的需求。

合计行不显示

问题 最近做表格合计发现,合计行在页面初次加载时不会显示,但是窗口大小改变后,合计行正常显示。

解决
数据变化,触发组件的updated生命周期,对 Table 进行重新布局

<el-table ref="tableRef" show-summary border>
</el-table>

updated () {
  this.$nextTick(() => {
    this.$refs.tableRef.doLayout();
  })
},

多行合计

正常合计都是一行的,官方文档的例子也是单行合计的。奈何产品经理搞了个多行合计。
这个查了一下,合并方法返回的那个数组,数组元素可以是html标签。

实例

 // 获取合计信息
   getSummaries(param) {
       const { columns, data } = param;
       const sums = [];
       columns.forEach((column,index) => {
           if(index == 0) {
               sums[0] = <div>
                   <div>合计</div>
                   <hr />
                   <div> 备注</div>
               </div> ;
           }
       });
       return sums;
   }

结果
在这里插入图片描述

合计列合并

多行合计也就罢了,还搞个列合并,真的是头都要大了。要搞一个下面这样的
在这里插入图片描述
打印输出一下:column,这是个对象,里面有个colSpan,可以用这个属性来控制合并几列

// 获取合计信息
getSummaries(param) {
    const { columns, data } = param;
    const sums = [];
    columns.forEach((column,index) => {
        if(index == 0) {
            sums[0] = <div>
                <div>合计</div>
                <hr />
                <div> 备注</div>
            </div> ;
            column.colSpan = 3;
            //  console.log(column);
        }else if(index == 1) {
            sums[1] = <div>
                <div style="display:flex;">
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;border-right:1px solid;">1</div>
                    <div style="flex:1;">1</div>
                </div>
                <hr />
                <div> 11月投产525</div>
            </div>;
            column.colSpan = 9;
        }
    });

    return sums;
}

结果
在这里插入图片描述
补充:

有个地方需要注意一下,上面表格的那几列(从投产数量到总装中),每一列的最小宽度min-width设置相同的值,这样可以尽可能保证每一列的宽度一致。下面的合计用弹性布局,让每一个div的宽度一致并且与上面的列尽可能对应。

如果要使用data 里的属性要如下操作:

 data() {
     return {
         name: 'sss'
     };
 },

 <div style="flex:1;border-right:1px solid;">{this.name}</div>

如果你要是想加一个事件呢?别说还真行

  sums[4] = <el-button type="text" onClick={() => this.editRemark(this.firstTable.totalNum)}>编辑</el-button>;

那为什么可以这样写呢?合计行应该是借助了vue的render函数生成的,对render函数不太熟的可以看一下我的这篇文章:Vue使用render函数(以js文件的形式生成组件

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
您好,要在 Element UI表格中使用多行合计并计算不同的值,您可以使用 `getSummaries` 方法来实现。 首先,在表格组件中的 `columns` 属性中定义需要进行合计,并给每添加 `sumMethod` 属性来指定合计的方法。例如: ```html <el-table :data="tableData" :columns="columns" :summary-method="getSummaries"></el-table> ``` 然后,在 Vue 实例中定义 `getSummaries` 方法来计算合计值。这个方法会接收到一个参数 `param`,其中包含了当前显示的数据以及需要合计信息。您可以根据需要进行合计的逻辑,并返回一个对象来指定每个需要合计合计值。例如: ```javascript methods: { getSummaries(param) { const { columns, data } = param; const sums = []; columns.forEach((column, index) => { if (index === 0) { sums[index] = '合计'; return; } if (column.sumMethod) { sums[index] = data.reduce((prev, curr) => { return prev + Number(curr[column.property]); }, 0); } else { sums[index] = ''; } }); return sums; } } ``` 在上述示例中,我们首先将第一合计值设置为固定的 `'合计'`,然后对其他需要合计进行求和操作,并将结果返回。 请注意,`sumMethod` 属性可以是一个自定义函数,您可以根据需要进行更复杂的计算逻辑。此外,您还可以在 `getSummaries` 方法中访问其他组件的数据和方法。 希望以上信息对您有所帮助!如果您还有其他问题,请随时向我提问。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值