树结构勾选内容转换为层级平铺表格

前提是不能跨级勾选,就是勾选了4级就不能勾选1、2、3了,所以结构也相对简单,只用考虑行合并,不用考虑列合并

递归将树结构的各层父级名称插入节点,拿到勾选的数据后循环出各条数据各层父级有多少条,也就是表格各级需要合并的行数

// 递归树结构
setlevel(data, flabel, fname = {}, level = 2) {
      data.map((ele) => {
        ele.level = level // 层级可以用来合并表头名称列,如果勾选到第四级,那么名称列就要合并4列
        ele.id = ele.name
        ele.label = ele.name
        ele.f_label = flabel
        ele.fname = fname // 将父级名称放到这里
        if (ele.children) {
          let _level = level + 1
          let _fname = JSON.parse(JSON.stringify(fname))
          _fname['name' + level] = ele.name // 将父级名称放到这里
          ele.children = this.setlevel(ele.children, flabel, _fname, _level)
        }
      })
      return data
    }

// 父级合并的行数
tableChange(data){
      let rowspans = {}
      data.map(el => {
        for (let k in el.fname){
          if (!rowspans[el.fname[k]]){
            rowspans[el.fname[k]] = 1
          } else {
            rowspans[el.fname[k]]++
          }
        }
      })
      this.data.textareas.jgcomp.tabledata.rowspans = rowspans
    }

渲染表格:除了第一行之外,各行的各层级父名称和上一行的不一样才渲染

<tbody>
              <tr :key='it' v-for="(it, index) in data.jgcomp.select.flgz.value">
                <template v-for="(val,k) in it.fname">
                  <template v-if='index'>
                    <td :key="val" :rowspan="data.jgcomp.tabledata.rowspans[val]" v-if="val !== data.jgcomp.select.flgz.value[index-1].fname[k]">{{val}}</td>
                  </template>
                  <template v-else>
                    <td :key="val" :rowspan="data.jgcomp.tabledata.rowspans[val]">{{val}}</td>
                  </template>
                </template>
                <td>{{it.name}}</td>
                <td>{{it.data}}</td>
              </tr>
            </tbody>

有其他简单的好方法请评论,谢谢

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值