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];
    },

相关推荐
pe7er13 小时前
window管理开发环境篇 - 持续更新
前端·后端
We་ct14 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
陈随易18 小时前
有生之年系列,Nodejs进程管理pm2 v7.0发布
前端·后端·程序员
冰暮流星18 小时前
javascript之事件代理/事件委托
前端
@yanyu66619 小时前
登录注册功能-明文
vue.js·springboot
陈随易19 小时前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
里欧跑得慢21 小时前
17. Flutter Hero动画实现:让界面过渡更加优雅
前端·css·flutter·web
IT_陈寒1 天前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
cn_mengbei1 天前
用React Native开发OpenHarmony应用:Reanimated共享元素过渡
javascript·react native·react.js
kyriewen1 天前
前端测试:别为了100%覆盖率而写测试,那是自欺欺人
前端·javascript·单元测试