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

2022-12-03  本文已影响0人  二荣xxx

一、关于循环出来的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
  }
},
上一篇下一篇

猜你喜欢

热点阅读