element table自定义合计行

element table自定义合计行

需求要求表尾合计行与模块租赁面积比较,如果相同则不做修改,不同则需要变红,并且总数后插入文字。
看到需求我觉得很简单,直接上手就做,在summary-method合计方法中判断,取到表尾更改样式即可,但现实很骨感,竟然取不到<td>
在这里插入图片描述
斟酌后我才想到,需要加个this.$nextTick(()=>{})方法,这样便能完整的拿到所有的td标签,我们可以使用this.$refs.tableRef.$refs.footerWrapper.querySelector('.el-table__footer').querySelectorAll('td')获取到所有的td,获取到的td为数组,再去修改td的样式。

所有的代码如下:

 <el-table size="mini" :data="involvedOrgs" :summary-method="getSummaries" show-summary ref="tableRef"
                        style="width: 100%;margin-top:10px;">
                        <el-table-column prop="orgType" label="涉及机构类型" width="200"></el-table-column>
                        <el-table-column prop="orgName" label="涉及机构名称" min-width="200"></el-table-column>
                        <el-table-column prop="organizationArea" label="该机构面积" min-width="200"></el-table-column>
                        <el-table-column label="操作" fixed="right" align="center" width="80">
                            <template slot-scope="scope">
                                <el-button :disabled="disalbedForm" size="mini" type="danger"
                                    @click="removeInvolvedOrg(scope.$index)">删除
                                </el-button>
                            </template>
                        </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);
                        if(index == 2){
                            let newVal = sums[index];
                            this.rentRefundForm.baseInfo.organizationAreaList = sums[index].toFixed(2);
                            this.$nextTick(()=>{
                                let td = this.$refs.tableRef.$refs.footerWrapper.querySelector('.el-table__footer').querySelectorAll('td')
                                if (td.length != 0) {
                                    for (var i = 0; i < td.length; i++) {
                                        // let html = this.$refs.tableRef.$refs.footerWrapper.querySelector('.el-table__footer').querySelectorAll('td')[i].querySelector('.cell'); 获取这里可以直接修改DOM
                                        if(newVal == this.rentRefundForm.baseInfo.rentalArea){
                                            if(i == 0){
                                                td[0].style.color = 'black'
                                            }else if(i == 2) {
                                                td[2].innerHTML =  newVal.toFixed(2)
                                                td[2].style.color = 'black'
                                            }
                                        }else {
                                            if(i == 0){
                                                td[0].style.color = 'red'
                                            }else if(i == 2) {
                                                td[2].innerHTML =  newVal.toFixed(2) + '(各职场合计值与租赁面积(m2)不一致)'
                                                td[2].style.color = 'red'
                                            }
                                        }
                                    }
                                }
                            })

                        }
                    } else {
                        sums[index] = '-';
                    }
                });
                return sums;
            },

效果图如下
在这里插入图片描述

这样便可以动态修改表尾合计行啦。

----分割线 如果只需要修改表尾行样式,则直接取 .el-table__footer-wrapper tbody td即可

----分割线 如果需要修改行样式,则使用官方文档:row-style方法(此方法不能修改合计行)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值