elementUI Table的行合并通用方法

14 篇文章 0 订阅
14 篇文章 0 订阅

有些业务需求是需要table进行行合并的,所以就写了个通用的方法来处理,废话不多说,先上图

首先是内部使用el-table的方法:span-method='objectSpanMethod'

data() {
  return {
    table: [{
      id: '1',
      checkRoom: 'CTROOM',
      checkProject: '颈椎MRICT',
      checkMoney: '300.22',
      attention: '检查前空腹',
      appointmentTime: ''
    },{
      id: '1',
      checkRoom: 'CTROOM',
      checkProject: '颈椎MRICT1',
      checkMoney: '303.22',
      attention: '检查前空腹',
      appointmentTime: ''
    },{
      id: '1',
      checkRoom: 'CTROOM',
      checkProject: '颈椎MRICT22',
      checkMoney: '340.22',
      attention: '检查前空腹',
      appointmentTime: '2019-5-29 10:30'
    },{
      id: '1',
      checkRoom: 'DR',
      checkProject: '鼻骨',
      checkMoney: '340.22',
      attention: '检查前空腹',
      appointmentTime: '2019-5-29 9:30'
    }]
  };
},
created(){
  // 给table赋值,重新遍历新增rowSpan属性,checkRoom,appointmentTime为table里面需要合并的属性名称
    this.table = this.mergeTableRow({
      data: this.table,
      mergeColNames: ['checkRoom', 'checkMoney', 'attention', 'appointmentTime'], // 需要合并的列,默认合并列相同的数据
      firstMergeColNames: ['attention'], // 受影响的列,只合并以firstMerge为首的同类型数据
      firstMerge: 'checkRoom' // 以哪列为基础进行合并,一般为第一列
    })
    // 例如:如果firstMerge: 'checkRoom'合并了三行,受影响的列也应该是最多合并三行,请看下图1
    // 例如:如果firstMerge: 'checkMoney'合并了两行,受影响的列也应该是最多合并两行,请看下图2

},
methods: {
  objectSpanMethod({ row, column, rowIndex, columnIndex }) {
     const span = column['property'] + '-span'
     if(row[span]){
         return row[span]
     }
  }
}

图一  ⬆

图二 ⬆

通用合并的方法mergeTableRow,请看最下面那个方法二

⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇由于好多人都不看全文章,方法一已经废弃⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

如果相同的数据不在相邻行该怎么办呢?那么请看下面的代码,改良过后的,不相邻的数据相互之间不受影响

/**
 * 方法二
 * 改良后(不相邻的数据相互不受影响)
 *  table合并行通用 */
export function mergeTableRow(config) {
  let data = config.data
  const { mergeColNames, firstMergeColNames, firstMerge } = config
  if (!mergeColNames || mergeColNames.length === 0) {
    return data
  }
  mergeColNames.forEach((m) => {
    const mList = {}
    data = data.map((v, index) => {
      const rowVal = v[m]
      if (mList[rowVal] && mList[rowVal].newIndex === index) {
        const flag = firstMergeColNames.filter((f) => { return f === m }).length !== 0
        const mcFlag = mergeColNames.filter((mc) => { return mc === firstMerge }).length === 0
        if ((mcFlag && flag) || (flag && data[index][firstMerge + '-span'] && data[index][firstMerge + '-span'].rowspan === 1)) {
          v[m + '-span'] = {
            rowspan: 1,
            colspan: 1
          }
        } else {
          data[mList[rowVal]['index']][m + '-span'].rowspan++
          v[m + '-span'] = {
            rowspan: 0,
            colspan: 0
          }
          mList[rowVal]['num']++
          mList[rowVal]['newIndex']++
        }
      } else {
        mList[rowVal] = { num: 1, index: index, newIndex: index + 1 }
        v[m + '-span'] = {
          rowspan: 1,
          colspan: 1
        }
      }
      return v
    })
  })
  return data
}

注:由于数据没有进行排序,所以要求后端返回的数据需要相同的在一块,要不会出现行错乱现象

  • 41
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 57
    评论
在使用ElementUI中的表格合并单元格时,可以按照以下步骤进操作: 1. 首先,在data中定义需要合并的列的数组和索引。例如,定义column1Arr和column1Index来表示需要合并的第一列的数据和索引,以此类推。\[2\] 2. 接下来,编写合并逻辑的方法。可以使用mergeTable方法来实现合并。在该方法中,可以遍历spanName数组,并在tableData中进比较,判断当前与上一是否相同。如果相同,则将上一合并数加1,当前合并数设为0;如果不相同,则将当前合并数设为1,并更新索引。\[3\] 3. 最后,在表格中使用elementUI中提供的合并方法。可以使用arraySpanMethod方法来指定合并的规则。在该方法中,可以根据columnIndex的值来判断是否需要合并,如果是需要合并的列,则返回合并数和列数;否则返回11列。\[1\] 通过以上步骤,就可以实现在ElementUI的表格中合并单元格的功能。 #### 引用[.reference_title] - *1* *3* [elementUItable单元格的合并通用版](https://blog.csdn.net/weixin_46103180/article/details/126969260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Element UI 的 table 单元格合并](https://blog.csdn.net/beijixing333y/article/details/125389547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值