element-ui-table的表格树形结构的选择功能不能选中children

背景

项目的table表做的树形数据展示,但是又需要支持多选操作,发现elemen-ui的多选,只选中父级,不包括 children
在这里插入图片描述

解决方案

点击父级的时候判定有没有孩子,有的话遍历选中孩子,并且要给已选值变量进行添加,取消的时候还要从已选值中删除

代码模块

<template>
  <el-table
    ref="caseTable"
    row-key="code"
    :data="caseList"
    height="100%"
    border
    default-expand-all
    @select-all="selectAll"
    @select="handleSelect"
  >
    <el-table-column type="selection"> </el-table-column>
    <el-table-column prop="name" label="用例名称"> </el-table-column>
  </el-table>
</template>
<script>
import _ from 'lodash'

export default {
  data() {
    return {
      caseList: [
        {
          name: '12',
          code: 1
        },
        {
          name: '22',
          code: 2,
          children: [
            {
              name: '12',
              code: 3
            },
            {
              name: '33',
              code: 4
            }
          ]
        }
      ],
      haveSelect: [],
      isCheckedAll: false // 是否全选
    }
  },
  methods: {
    selectAll(selection) {
      this.haveSelect = _.cloneDeep(selection)
      this.isCheckedAll = !this.isCheckedAll
      this.select(this.caseList, this.isCheckedAll)
    },
    handleSelect(selection, row) {
      console.log(selection)
      const checked = !!selection.length
      const index = this.haveSelect.findIndex(item => item.code === row.code)
      if (checked && index < 0) {
        this.haveSelect.push(row)
      } else if (!checked && index > -1) {
        this.haveSelect.splice(index, 1)
      }
    },

    select(data, checked) {
      data.forEach(row => {
        if (!checked) {
          const index = this.haveSelect.findIndex(item => item.code === row.code)
          index > -1 && this.haveSelect.splice(index, 1)
        }
        this.$refs.caseTable.toggleRowSelection(row, checked)
        if (row.children) {
          this.select(row.children, checked)
        }
      })
    }
  }
}
</script>

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

那就可爱多一点点

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

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

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

打赏作者

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

抵扣说明:

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

余额充值