美文网首页
element合并多列表格

element合并多列表格

作者: 給我小鱼干 | 来源:发表于2020-04-20 10:54 被阅读0次

文章链接来源https://blog.csdn.net/lomeo23/article/details/81289751

// 计算需要合并的单元格
        getSpanData(pdata) {
            /**
             * 初始化合并参数表
             */
            const cols = [
                {
                    name: 'pointName', //参与计算的列名,必须和el-table-column prop='category'值一致
                    getValue(row) { //该列用于比较的值的获取方法
                        return row.pointName;
                    },
                },
                {
                    name: 'pointType', 
                    getValue(row) {
                        return row.pointType;
                    },
                },
                {
                    name: 'unit', 
                    getValue(row) {
                        return row.unit;
                    },
                }
            ];//参与合并的字段,在这里增加即可
            const loca = []; //合并坐标与数量
            for (const i in cols) {
                loca.push({
                    rowSpan: 1,
                    colSpan: 1,
                    rowIndex: null,
                    colProperty: cols[i].name,
                    value: null,
                    getValue: cols[i].getValue,
                });
            }
            for (let i = 0; i < pdata.length; i++) {
                pdata[i].cellSpans = [];
                for (const _w in loca) {
                    const w = loca[_w];
                    if (i === 0 || w.value !== w.getValue(pdata[i])) {//边界指针,1.第一条硬性第一个边界 2.与上一单元格值不同的属于边界
                        w.rowIndex = i;//行索引,若下一单元格值相同则以此索引叠加rowSpan值
                        w.rowSpan = 1;//rowSpan默认1
                        w.value = w.getValue(pdata[i]);//单元格值
                    } else {
                        //若本单元格值==上一单元格值则合并列,rowSpan+=1
                        for (const p in pdata[w.rowIndex].cellSpans) {
                            const n = pdata[w.rowIndex].cellSpans[p];
                            if (n.colProperty === w.colProperty) {
                                n.rowSpan += 1;
                            }
                        }
                    }
                }

                pdata[i].cellSpans = JSON.parse(JSON.stringify(loca));//深度复制,否则总是指向最后一条数据
            }
        },
        handleObjectSpanMethod({ row, column, rowIndex, columnIndex }) {
            //遍历本行合并表
            for (const i in row.cellSpans) {
                const _r = row.cellSpans[i];
                //列属性匹配
                if (_r.colProperty === column.property) {
                    //若合并表指向本单元格则构建合并参数并返回
                    if (_r.rowIndex === rowIndex) {
                        return {
                            rowspan: _r.rowSpan,
                            colspan: _r.colSpan
                        };
                    } else {//否则隐藏该单元格。这里必须有,否则单元格会被右移一列
                        return {
                            rowspan: 0,
                            colspan: 0
                        };
                    }
                }
            }
        },

相关文章

网友评论

      本文标题:element合并多列表格

      本文链接:https://www.haomeiwen.com/subject/zucrihtx.html