el-table合并单元格

合并单元格

合并单元格
   对需要合并的表格绑定     :span-method="objectSpanMethod" 


   在获取数据后处理数据
   与table绑定的数组 = this.mergeTableRow(table绑定的数组, [要合并的值即某列单元格'categoryId',要合并的值即某列单元格 'simpleName'])

    
    //合并单元格    处理函数
    
    mergeTableRow(data, merge) {
    //判断是否有值需要处理
      if (!merge || merge.length === 0) {
        return data
      }
      // console.log(data);
      //进行处理
      merge.forEach((m,i) => {
        const mList = {}
        //设置n值,以便后续判断数值,此行值是否和上一行为一类,this.objectSpan为判断当前第一列为何值的判断依据,未写出来,此例categoryId为品类的key,simpleName为供应商的key,this.objectSpan为true时是以品类排序
        let n=null
        if(this.objectSpan){
          n= 'categoryId'
        }else{
           n= 'simpleName'
        }
        data = data.map((v, index) => {
          const rowVal = v[m]
          //v[n]==data[index -1][n])判断当前行和上一行的品类或供应商值是否相同
          if (mList[rowVal] && mList[rowVal].newIndex === index && v[n]==data[index -1][n] ) {
            mList[rowVal]['num']++
            mList[rowVal]['newIndex']++
            data[mList[rowVal]['index']][m + '-span'].rowspan++
            v[m + '-span'] = {
              rowspan: 0,
              colspan: 0
            }
            
          } else {
            mList[rowVal] = { num: 1, index: index, newIndex: index + 1 }
            v[m + '-span'] = {
              rowspan: 1,
              colspan: 1
            }
          }
          return v
        })
      })
      return data
    },
        //  合并列
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
       const span = column['property'] + '-span'
          if(row[span]){
              return row[span]
          }
     
    },
   
获取合并单元改组的某值合并值
    <template slot-scope="scope">
               {{scope.row | tableEveryOrder(scope.$index)}}
           </template>
       </el-table-column> 
       
  在过滤器中
   tableEveryOrder:function(val,i){
   //获取到当前行的索引号 i,el-table索引号可通过scope.$index得到,val为所传值scope.row
     console.log(i);
     console.log(val)
     // 总订单数
     let numberOrderNow = 0
     // 合并的行数
     let num =null
      let n = null
     Object.keys(val).forEach(function(key,j,v){
           // console.log(key)
           // console.log(i);
           //val中有categoryId-span可以确定当前合并的行数或列数
           if(key=='categoryId-span'){
             //  console.log(val[key])
             
               // console.log(val[key].rowspan)
               num = val[key].rowspan
           }
       }),
       // console.log(num,'合并行数')
       //相加得到一共需要处理到的目标值的行的索引号
       n =num + i-1
       console.log(numberOrderNow,num,n);
       //遍历表格绑定值获取范围i到n的某值
       that.afterSaleList.forEach((item,t)=>{
           if(n>=t && t>=i){
             numberOrderNow=numberOrderNow+item.orderNum
           }
       })  
     return numberOrderNow
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值