ele表格合并行之后的selection选中

bug说明

ele表格合并行之后,还需要添加复选框选择记录做操作的情况下,
用ele的@selection-change,@select,@select-all是有bug的。
选中合并列的复选框时,其实他只是给你选中了合并列的第一条,如图

   <el-table :data="checkList" ref="checkTable"  @selection-change="checkSelection" v-loading="checkLoading" :span-method="rowSpan" fit  highlight-current-row height="300" class="dialog-table">
        <el-table-column type="selection" width="65"></el-table-column>
        <el-table-column align="center" label="运单号" width="150" prop="transNumber">
        </el-table-column>
        <el-table-column align="center" label="账单号" width="150" prop="billNo">
         </el-table-column>
         <el-table-column align="center" label="运行费用(元)" width="120"  prop="money">
         </el-table-column>
     </el-table>
复制代码
       checkSelection (val, row) {
            this.multiCheckSelection = val
        }
复制代码

比如全选之后,你取消1的复选框,这个时候@selection-change传入的值,就是B,C,D的值。
但是正常人取消1的复选框,肯定是想传入C,D的值呀,那咋办?

于是想了个办法

checkSelection 执行这个方法的时候,我去判断选择的记录是否属于合并行中一条A,是则找出他的couple--B(如上图A,B就是couple), 把B对象也放到this.multiCheckSelection中去,
然后这需要用@select和@select-all。
但是这又有问题,比如取消A的时候,我能把B也取消,可如果再取消2的话,B就还是@selection-change传入的val
所以用数据来计算是否选中行不通咯

于是又想了个办法

数据不行,噢!可以用dom选中取消,就是直接模拟手动选中取消,ele不给联动couple就我们自己联动呗。
最后的代码如下

<el-table :data="checkList" ref="checkTable" 
@select="checkSelection" 
@select-all="checkSelection" 
@selection-change="checkSelection" 
v-loading="checkLoading" 
:span-method="rowSpan" 
fit  
highlight-current-row height="300" 
class="dialog-table">
复制代码
checkSelection (val, row) {
    if (!row) { // 没有row则是全选的情况
      this.multiCheckSelection = val
      return
    }
    let arr = []
    let valArr = []
    let isChk = true // 是否是勾选
    val.forEach(item => {
        arr.push(item.id)
    })
    if (arr.indexOf(row.id) === -1) { // 是取消勾选
       isChk = false
    }
    // 把对应couple单 选中/取消
    this.checkList.forEach(item => {
      if (this.isCouple(item, row)) {
        this.$nextTick(() => {
          this.$refs.checkTable.toggleRowSelection(item, isChk) 
          // 该处也会触发checkSelection方法,因为触发了selection-change
          // 类似于递归了,这就解决了第一个方案的问题
        })
      }
    })
    if (!isChk) {
      val.forEach(item => {
        if (!this.isCouple(item, row)) {
          valArr.push(item)
        }
      })
    } else { // 把列表中是couple的都选中
      this.checkList.forEach(item => {
        if (this.isCouple(item, row)) {
          valArr.push(item)
        }
      })
    }
    this.multiCheckSelection = valArr
},

// 是否是成对的记录,也就是合并在一起的记录
isCouple (row1, row2) {
   return row1.transNumber === row2.transNumber && row1.createTime === row2.createTime
},
复制代码

这解决方案需要先了解@selection-change,@select,@select-all这三个方法
@selection-change是选中状态改变,无论是手动还是代码动 @select,@select-all手动的单选和全选

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值