美文网首页
循环的el-teble列合并以及表头Render方法、selec

循环的el-teble列合并以及表头Render方法、selec

作者: 二荣xxx | 来源:发表于2022-12-03 22:10 被阅读0次

    一、关于循环出来的table列合并

    经过多方尝试这个方法是有用的

    <div v-for="(t, index) in tableList" :key="index">
      <md-table
        :columns="columns"
        :data="t.list"
        :span-method=(index)=>"heBingLie(index)"
      >
        </md-table>
    </div>
    
    flitterData(arr,columnIndex ) {
      let spanOneArr = []
      let concatOne = 0
      arr.forEach((item, index) => {
        if (index === 0) {
          spanOneArr.push(1)
        } else {
          //name 修改
          if (columnIndex===0 && item.xinagMu === arr[index - 1].xinagMu) {
            //第一列需合并相同内容的判断条件
            spanOneArr[concatOne] += 1
            spanOneArr.push(0)
          } else {
            spanOneArr.push(1)
            concatOne = index
          }
        }
      })
      return {
        one: spanOneArr
      }
    },
    heBingLie({ row, column, rowIndex, columnIndex },index) {
    // 需要合并的列
      if (columnIndex === 0 || columnIndex === 1 || columnIndex === 2) {
        const arr = this.tableList.map(item => {
          const _row = this.flitterData(item.list,columnIndex ).one[rowIndex]
          const _col = _row > 0 ? 1 : 0
          return {
            rowspan: _row,
            colspan: _col
          }
        })
        return { ...arr[index] }
      }
    }
    

    二、el-table表头没有插槽可以用,那就只能用Render了

    下面的方法是实现表头popover的方法。在Render里面使用组件记得提前引入。以下代码中使用到了this.$createElement是因为要取组件的ref元素,普通情况下直接用h函数就行。具体原因是,h函数是作用在渲染的时候,而ref是取渲染之后的实例。所以这个时候实例还(不存在)在渲染中,ref是undefined

    renderHeader: h => {
      return this.$createElement(
        'div',
        {
          style: 'display: flex;justify-content: space-between;align-items: center;'
        },
        [
          this.$createElement('span', ''),
          this.$createElement('span', '药品'),
          this.$createElement(
            Popover,
            {
              ref: 'popover',
              props: {
                trigger: 'click'
              }
            },
            [
              this.$createElement(Icon, {
                slot: 'reference',
                props: {
                  name: 'shezhi-s',
                  color: '#40a9fe'
                },
                style: 'cursor: pointer'
              }),
              this.list.map((i, index) => {
                return this.$createElement(Checkbox, {
                  props: {
                    value: i.isCheck,
                    label: i.label,
                    disabled: i.isDisabled
                  },
                  on: {
                    change: value => {
                      i.isCheck = value
                      this.handleClick(i, value)
                      this.$refs.popover.doClose()
                    }
                  }
                })
              })
            ]
          )
        ]
      )
    },
    

    三、el-tabke的selectable

    selectable用于手动对table的checkBox进行手动勾选

    {
      type: 'selection',
      selectable: row => {
        return !row.yiShengCBZ
      }
    },
    

    相关文章

      网友评论

          本文标题:循环的el-teble列合并以及表头Render方法、selec

          本文链接:https://www.haomeiwen.com/subject/ysjmfdtx.html