vue项目- el-table表格合并行

1.再页面中表格加上行方法

<el-table

:span-method="objectSpanMethod"

</el-table>

2,定义2个变量

复制代码
  spanArr: [], //存储合并单元格的开始位置
      colFields: [
        'itemCode',
        'itemDesc',
        'purchaseApplyNo',
        'purchaseApplyLinenum',
        'purchaseOrderNo',
        'purchaseOrderLinenum',
        'purchaseMode',
        'purchaseMethod',
        'materielSection',
        'materielNo',
        'materielDesc',
        'num',
        'unit',
        'supplierName',
        'technologyId',
        'biddingPlanNo',
        'biddingBatch',
        'outbidDate',
        'frameworkAgreementNo',
        'eCommerceNo',
        'applyUser',
        'applyDate',
        'purchaseTime',
        'plannedDeliveryTime',
        'outbid',
        'contractNo',
        'orderTotalNetPrice',
        'orderTaxInclusivePrice',
        'orderDate',
        'handOverNum',
        'handOverDate',
        'checkNum',
        'checkDate',
        'wbsNo',
        'wbsDesc',
      ],
  1. 由于我的表格只需要固定编码和名字,针对这2个字段的判断处理

    getSpanArr() {
    for (let i = 0; i < this.tableData.length; i++) {
    let row = i;
    // let col = i % this.colCount;
    if (row === 0) {
    // i 表示行 j表示列
    for (let j = 0; j < this.colFields.length; j++) {
    this.spanArr[i * this.colFields.length + j] = {
    rowspan: 1,
    colspan: 1,
    };
    }
    } else {
    for (let j = 0; j < this.colFields.length; j++) {
    // 当前和上一次的一样
    // 合并所有列的相同数据单元格
    if (
    this.colFields[j] == 'itemCode' ||
    this.colFields[j] == 'itemDesc'
    ) {
    // 指定合并哪些列
    if (
    this.tableData[row]['itemCode'] !==
    this.tableData[row - 1]['itemCode'] ||
    this.tableData[row]['itemDesc'] !==
    this.tableData[row - 1]['itemDesc']
    ) {
    // 哪些不合并:itemCode不一样的,不合并
    this.spanArr[row * this.colFields.length + j] = {
    rowspan: 1,
    colspan: 1,
    };
    } else if (
    this.tableData[row][this.colFields[j]] ===
    this.tableData[row - 1][this.colFields[j]]
    ) {
    let beforeItem =
    this.spanArr[(row - 1) * this.colFields.length + j];
    this.spanArr[row * this.colFields.length + j] = {
    rowspan: 1 + beforeItem.rowspan, // 合并几列
    colspan: 1, // 合并几行
    };
    beforeItem.rowspan = 0;
    beforeItem.colspan = 0;
    } else {
    // rowspan 和 colspan 都为1表格此单元格不合并
    this.spanArr[row * this.colFields.length + j] = {
    rowspan: 1,
    colspan: 1,
    };
    }
    }
    }
    }
    }
    // 对数据进行倒序
    let stack = [];
    for (let i = 0; i < this.colFields.length; i++) {
    for (let j = 0; j < this.tableData.length; j++) {
    // console.log("i=" + i + " j=" + j);
    // i 表示列 j表示行
    if (j === 0) {
    if (this.spanArr[j * this.colFields.length + i].rowspan === 0) {
    stack.push(this.spanArr[j * this.colFields.length + i]);
    }
    } else {
    if (this.spanArr[j * this.colFields.length + i].rowspan === 0) {
    stack.push(this.spanArr[j * this.colFields.length + i]);
    } else {
    stack.push(this.spanArr[j * this.colFields.length + i]);
    while (stack.length > 0) {
    let pop = stack.pop();
    let len = stack.length;
    this.spanArr[(j - len) * this.colFields.length + i] = pop;
    }
    }
    }
    }
    }
    // console.log(this.spanArr);
    },
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    // console.log(this.spanArr[rowIndex * this.colFields.length + columnIndex]);
    return this.spanArr[rowIndex * this.colFields.length + columnIndex];
    },

相关推荐
剪刀石头布啊1 小时前
vue-react为何要虚拟dom
前端
剪刀石头布啊1 小时前
ahooks常用的一些库,我们使用一下
前端
剪刀石头布啊1 小时前
从git更新本地提交记录到更新已经推送到远端记录
前端
云浪2 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
Flynt3 小时前
axios 被投毒半年后,我把 npm 的"安全防线"实测了一遍:最信任的 SHA512 是安慰剂
前端·npm·node.js
excel4 小时前
Base62 和 Base64 有什么区别?
前端
风骏时光牛马5 小时前
大模型底层架构与AI源码深度剖析
前端
掘金挖土6 小时前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
中文呀8 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端