el-table行合并及合并后序号处理

发布于:2024-12-18 ⋅ 阅读:(41) ⋅ 点赞:(0)
 效果图

      <el-table
        class="ncky-detail-table"
        v-loading="tableLoading"
        border
        :data="tableDataVo"
        :span-method="objectSpanMethod"
        row-key="uniqueFlag"
        :row-class-name="tablerowclassname"
      >
        <el-table-column label="序号" width="50" align="center" prop="rowId" />   
        ...
      </el-table>
 
合并行、列
getSpanArr(data) {
        let _spanArr = [];
        let rowId = 0;//存储序号
        // 遍历数据
        for (let i = 0; i < data.length; i++) {
          // 如果是第一个数据,就将列表spanArr添加一个1,表示暂时只有一个名字相同的、且将索引pos赋值为0
          if (i === 0) {
            _spanArr.push(1);
            this.pos = 0;
            data[i].rowId = 1;//序号合并
          } else {
            // 判断当前元素与上一个元素是否相同
            if (data[i].infoId === data[i - 1].infoId) {
              // 如果相同就将索引为 pos 的值加一
              _spanArr[this.pos] += 1;
              // 且将数组添加 0
              _spanArr.push(0);
            } else {
              // 如果元素不同了,就可以通过索引为 pos 的值知晓应该需要合并的行数
              // 同时,我们再次添加一个值1,表示重新开始判断重复姓名的次数
              _spanArr.push(1);
              // 同时 索引加一
              this.pos = i;
              rowId++;
              data[i].rowId = rowId + 1;
            }
          }
        }
        this.spanArr = _spanArr;
},      

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
        if (columnIndex < 6 || columnIndex === 9 || columnIndex === 10 || columnIndex === 15 || columnIndex === 16) {
          const _row = this.spanArr[rowIndex];
          const _col = _row > 0 ? 1 : 0;
          return {
            rowspan: _row,
            colspan: _col,
          };
        }
},

// 表格行样式背景颜色
tablerowclassname({ row, rowIndex }) {
        if (a != b) {
          return 'warning-row';
        }
},


网站公告

今日签到

点亮在社区的每一天
去签到