el-table 合并单元格公共的方法支持指定列合并

2023-10-24  本文已影响0人  大梦无痕
<el-table
        ref="refs"
        :span-method="objectSpanMethod "
        :data="data"
      ></el-table>
export default{
    data(){
          return {
                  data:[],
                  spanMethodList:["name","num"]
          }
    },
    methods:{
        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
        //rowspan=1&&colspan=1显示不合并  rowspan=0&&colspan=0 隐藏 rowspan合并几行 colspan合并几列
        var list = this.spanMethodList;//需要合并的列
        if(list&&list.length>0&&list.join(",").indexOf(column.property)>-1){
            const data = this.getMethod(rowIndex,column.property);
            //data 存在即合并单元格或隐藏单元格 ,data不存在显示单元格
            if(data){
                return data;
            }else{
                return {
                    rowspan:1,
                    colspan:1
                }
            }
        }
    },
    //计算合并单元格和隐藏的单元格
    getMethod(rowIndex,prop){
        let list = [],value='',rowspan = 1,rowspanIndex=0;
        this.data.map((e,index)=>{
            if(value&&value == e[prop]){
                rowspan++;
                if(index==this.dataArr.length-1){
                    if(rowspan>1){
                        list.push({
                            rowspanIndex:rowspanIndex,
                            list:{
                                rowspan:rowspan,
                                colspan:1
                            }
                        })
                        // 当最后一个单元格为合并状态  需要隐藏最后一个单元格
                        if(rowspanIndex!=index){
                            list.push({
                                rowspanIndex:index,
                                list:{
                                    rowspan:0,
                                    colspan:0
                                }
                            })
                        }
                    }
                }else{
                    //合并的单元格隐藏
                    list.push({
                        rowspanIndex:index,
                        list:{
                            rowspan:0,
                            colspan:0
                        }
                    })
                }
            }else{
                value = e[prop];
                if(index==this.dataArr.length-1){
                    list.push({
                        rowspanIndex:rowspanIndex,
                        list:{
                            rowspan:rowspan,
                            colspan:1
                        }
                    })
                }else{
                    if(rowspan>1){
                        list.push({
                            rowspanIndex:rowspanIndex,
                            list:{
                                rowspan:rowspan,
                                colspan:1
                            }
                        })
                    }
                }
                rowspan = 1;
                rowspanIndex = index;//第几行
            }
        })
        var filter = list.filter((e)=>{
            return e.rowspanIndex == rowIndex;
        })
        if(filter[0]){
            return filter[0].list
        }else{
            return "";
        }
    }
    }
}

效果图


1698223173206.png
上一篇下一篇

猜你喜欢

热点阅读