el-table 合并指定列

自定义合并列 实测好用

 <el-table :data="tableData" border :span-method="objectSpanMethod">
 	<el-table-column prop="date" label="年月份" width="100" align="center"></el-table-column>
	<el-table-column prop="operatorName" label="负责人" align="center"></el-table-column>
	<el-table-column prop="object" label="目标" align="center"></el-table-column>
	<el-table-column prop="serviceName" label="服务对象" align="center"></el-table-column>
</el-table>
<script>
	data(){
		return {
			tableData:[],
			needMergeArr:["date","operatorName","object"], // 需要合并列的字段 必须要和tableData中字段值一致
            rowMergeArrs: [],
		}
	}
	methods:{
		getList(){
            this.$api.get({
                ...
            }).then(res =>{
                if(res.code == '200'){
                    this.tableData = res.data;
                    this.rowMergeArrs = this.rowMergeHandle(this.needMergeArr, this.tableData);
                }else{
                    this.$message.error(res.msg);
                }
            })
        },
		objectSpanMethod({row,column,rowIndex,columnIndex}) {
            for(let res in this.needMergeArr){
                if(this.needMergeArr[res] == column.property){
                    return this.mergeAction(column.property, rowIndex, columnIndex);
                }
            }
        },
        mergeAction(val, rowIndex) {
            if(!this.rowMergeArrs[val]) return;
            let _row = this.rowMergeArrs[val].rowArr[rowIndex];
            let _col = _row > 0 ? 1 : 0;
            return [_row, _col];
        },
        rowMergeHandle(arr, data) {
            if (!Array.isArray(arr) && !arr.length) return false;
            if (!Array.isArray(data) && !data.length) return false;
            let needMerge = {};
            arr.forEach((i, idx) => {
                needMerge[i] = {
                    rowArr: [],
                    rowMergeNum: 0,
                };
                if (idx == 0) {
                    data.forEach((item, index) => {
                        // 表格首个数据单独处理
                        if (index === 0) {
                            needMerge[i].rowArr.push(1);
                            needMerge[i].rowMergeNum = 0;
                        } else {
                            if (item[i] === data[index - 1][i]) {
                                needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                                needMerge[i].rowArr.push(0);
                            } else {
                                needMerge[i].rowArr.push(1);
                                needMerge[i].rowMergeNum = index;
                            }
                        }
                    });
                } else {
                    let firstRowArr = needMerge[arr[0]].rowArr;
                    let firstRowArrDeal = [];
                    firstRowArr.forEach((item, index) => {
                        if (item > 0) {
                        firstRowArrDeal.push(index);
                        }
                    });
                    data.forEach((item, index) => {
                        let sign = false;
                        if (firstRowArrDeal.indexOf(index) > 0) {
                            needMerge[i].rowMergeNum = index;
                            sign = true;
                        }
                        // 表格首个数据单独处理
                        if (index === 0) {
                            needMerge[i].rowArr.push(1);
                            needMerge[i].rowMergeNum = 0;
                        } else {
                            if (item[i] === data[index - 1][i]) {
                                if (sign) {
                                    needMerge[i].rowArr.push(1);
                                } else {
                                    needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                                    needMerge[i].rowArr.push(0);
                                }
                            } else {
                                needMerge[i].rowArr.push(1);
                                needMerge[i].rowMergeNum = index;
                            }
                        }
                    });
                }
            });
            return needMerge;
        }
	}
</script>
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值