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

相关推荐
苹果酱05671 分钟前
React方向:react脚手架的使用
java·vue.js·spring boot·mysql·课程设计
saadiya~25 分钟前
Vue 3 实现后端 Excel 文件流导出功能(Blob 下载详解)
前端·vue.js·excel
摇摇奶昔x1 小时前
webpack 学习
前端·学习·webpack
阿珊和她的猫2 小时前
Vue Router中的路由嵌套:主子路由
前端·javascript·vue.js
_龙小鱼_2 小时前
Kotlin 作用域函数(let、run、with、apply、also)对比
java·前端·kotlin
霸王蟹2 小时前
React 19中如何向Vue那样自定义状态和方法暴露给父组件。
前端·javascript·学习·react.js·typescript
小野猫子2 小时前
Web GIS可视化地图框架Leaflet、OpenLayers、Mapbox、Cesium、ArcGis for JavaScript
前端·webgl·可视化3d地图
shenyan~2 小时前
关于 js:9. Node.js 后端相关
前端·javascript·node.js
uwvwko2 小时前
ctfshow——web入门254~258
android·前端·web·ctf·反序列化