element merged cell

 

Get the table base merged array

 getIndex(){
     let table = this.tableData
     this.spanArray = []
     table.forEach((item,index)=>{
         if(index === 0){
             this.spanArray.push({sameName:item.matterOrg,flag:0,arr:[]})
             this.spanArray.push({sameName:item.matterId,flag:0,arr:[]})
             this.spanArray.push({sameName:item.materialId,flag:0,arr:[]})
             this.spanArray.push({sameName:item.itemId,flag:0,arr:[]})
             this.spanArray.push({sameName:item.confirmId,flag:0,arr:[]})
             this.spanArray.push({sameName:item.cmaterialId,flag:0,arr:[]})
             this.spanArray.push({sameName:item.citemId,flag:0,arr:[]})
         }else{
             this.getSpan(item.matterOrg,index,0,table.length)
             this.getSpan(item.matterId,index,1,table.length)
             this.getSpan(item.materialId,index,2,table.length)
             this.getSpan(item.itemId,index,3,table.length)
             this.getSpan(item.confirmId,index,4,table.length)
             this.getSpan(item.cmaterialId,index,5,table.length)
              this.getSpan(item.citemId,index,6,table.length)
         }

    })
}
        

 Array replacement without merging

getSpan(value,index,arrayIndex,tableLength){
    if(value !== this.spanArray[arrayIndex].sameName || !value){
           this.spanArray[arrayIndex].arr.push({ row:this.spanArray[arrayIndex].flag,     
           length:index - this.spanArray[arrayIndex].flag})
           this.spanArray[arrayIndex].sameName = value
           this.spanArray[arrayIndex].flag = index
           if(index === tableLength-1){
               this.spanArray[arrayIndex].arr.push({ row:this.spanArray[arrayIndex].flag,             
               length: 1})
           }
    }else{
         if(index === tableLength-1){
              this.spanArray[arrayIndex].arr.push({ row:this.spanArray[arrayIndex].flag,                     
              length: index+1 - this.spanArray[arrayIndex].flag})
          }
     }
}

 Merge cells, table binding

<el-table :data="tableData" v-loading="loading" border style="width: 100%;" :span-method="arraySpanMethod">

arraySpanMethod: function({ row, column, rowIndex, columnIndex }){
   let col = [
       [1],[2,3],[4,5],[6],[7,8,9],[10,11],[12,13]
   ]
   let flag = 1
   let obj = [0, 0]
   if(columnIndex === 0){
        obj = [1, 1]
   }else{
       col.forEach((colArray,arrayIndex)=>{
       if(flag === 1){
            colArray.forEach((colIndex)=>{
                if (columnIndex === colIndex && flag === 1) {
                      if(this.spanArray[arrayIndex].arr.length >0 ){
                             this.spanArray[arrayIndex].arr.forEach(item => {
                                 if (rowIndex === item.row) {
                                      obj = [item.length, 1]
                                      flag = 0
                                 }
                              })
                     }else{
                          obj = [1, 1]
                     }
                   }
               })
           }    
       })
    }
    return obj
}

I encountered a very uncomfortable merger in the project. The four-level indicators should be directly merged into the third-level indicators.

Add class as thirdLevel to the third level indicator column, and add class as fourthLevel to the fourth level indicator column

Data merging process is too cumbersome

Later solved it with js+css

this.$nextTick(()=>{
    for(var i=0;i<document.getElementsByClassName('fourthLevel').length;i++){
        //i==0 为表头列
        if(!document.getElementsByClassName('fourthLevel')[i].children[0].innerHTML || i==0){
          document.getElementsByClassName('fourthLevel')[i].style.display="none"
          if(document.getElementsByClassName('fourthLevel')[i].previousSibling.className.indexOf('thirdLevel') > -1){
              document.getElementsByClassName('fourthLevel')[i].previousSibling.colSpan = 2
          }
       }
    }
})

Just be careful to clear all the previous styles when opening a new situation

for(var i=0;i<document.getElementsByClassName('fourthLevel').length;i++){

       if(!document.getElementsByClassName('fourthLevel')[i].children[0].innerHTML|| i==0){

               document.getElementsByClassName('fourthLevel')[i].style.display="table-cell"

               if(document.getElementsByClassName('fourthLevel')[i].previousSibling.className.indexOf('thirdLevel') > -1){

                      document.getElementsByClassName('fourthLevel')[i].previousSibling.colSpan = 1

                }

        }

}

 

Guess you like

Origin blog.csdn.net/weixin_39308542/article/details/94626396