动态合并行和列(element-ui)

简介: 动态合并行和列(element-ui)

动态合并行和列

根据key值是否相同来合并 列或行。

效果图:
image.png

核心思想是构造存放rowspan,colspan 对应关系的数组。

element-ui 提供span-method 的方法。 具体查看文档。

<el-table :data="listData" border :span-method="arraySpanMethod">
 // 构造  this.rowspanMapArr  如下图所示
 // 构造  this.colspanMapArr  如下图所示

 arraySpanMethod({
   
    row, column, rowIndex, columnIndex }) {
   
   
        return {
   
   
          rowspan: this.rowspanMapArr[columnIndex][rowIndex],
          colspan: this.colspanMapArr[rowIndex][columnIndex],
        };
    },

image.png

对应的key 数组。

   const keyMap = [
          'key1',
          'key2',
          'key3',
          'key4',
      ]

// arraySpanMethod 里面用了下标,所以不在keyMap 除去不合并的 key

  const norMergeKeyArr = [
      'key4',
  ]
  data(){
   
   
     return {
   
   
        listData: [
               {
   
   
                  key1:'上下行合并',
                  key2:'1111'
                  key3:''
               },
                 {
   
   
                  key1:'上下行合并',
                  key2:'1111'
                  key3:''
               },
                 {
   
   
                  key1:'左右列合并', 
                  key2: null
                  key3: null
               },
        ]
     } 
  },
  created(){
   
   
      console.log('listData.length-->', this.listData.length)
      keyMap.forEach((keyName, innerIndex) => {
   
   
         this.rowspanMapArr.push(this.rowspan( [], 0, keyName) ) 
      })
      console.log('rowspanMapArr---> ',this.rowspanMapArr)
      this.genrateColspanArr();
  },
  methods: {
   
   
    rowspan(spanArr, position, spanName) {
   
   
      this.listData.forEach((item, index) => {
   
   
          if( norMergeKeyArr.includes(spanName)){
   
   
               spanArr.push(1);
          }else{
   
   
              if (index === 0) {
   
   
                spanArr.push(1);
                position = 0;
                } else {
   
   
                    if (
                        this.listData[index][spanName] ===
                        this.listData[index - 1][spanName]
                    ) {
   
   
                        spanArr[position] += 1;
                        spanArr.push(0);
                    } else {
   
   
                        spanArr.push(1);
                        position = index;
                    }
                }
          }
      });
      return spanArr
    },
    genrateColspanArr() {
   
   
      this.listData.forEach((item, outIndex) => {
   
   
          let curPos ;
          let colMapArr = []
          keyMap.forEach((keyName, innerIndex) => {
   
   
             if ( innerIndex === 0 && item[keyName] ) {
   
   
                        colMapArr.push(1);
                        curPos = 0;
                    } else {
   
   
                    //。左右列合并 通过判断 key 是否为 null 之类的,具体情况具体分析。
                    // 最好用lodash 之类工具判断  
                        if ( !item[keyName] && item[keyName] != 0 ) {
   
   
                            colMapArr[curPos] += 1;
                            colMapArr.push(0);
                        } else {
   
   
                            curPos = innerIndex
                            colMapArr.push(1);
                        }
                }
         })
         this.colspanMapArr.push(colMapArr)
      });
      console.log('colspanMapArr--',this.colspanMapArr)
    },
    arraySpanMethod({
   
    row, column, rowIndex, columnIndex }) {
   
   
        return {
   
   
          rowspan: this.rowspanMapArr[columnIndex][rowIndex],
          colspan: this.colspanMapArr[rowIndex][columnIndex],
        };
    },
  },

总结:

这里分rowspan 和 colsan 情况。

  1. 根据数据源的同个key 的value值是否一致,来判断是否上下行合并。 计算出各个rowspan的值。
  2. 根据单条数据源内的key对应的value值,要保证一定的顺序。也就是说,下一个key的value值为null,上一个key的value值不为null 而合并,计算出各个 colspan 值。
相关文章
|
10月前
|
SQL 前端开发 搜索推荐
【Element-UI】实现动态树、数据表格及分页效果
在现代软件开发中,动态树、数据表格以及分页效果成为了许多应用的核心需求。随着业务规模和复杂性的增加,我们往往需要展示大量的层级结构数据,并且实现交互性强且高效的操作。 动态树提供了一种组织结构清晰、可伸缩的展示方式,使用户可以方便地查看和操作树节点。数据表格则是以表格形式呈现数据,在其中用户可以进行排序、筛选、编辑等操作。 而分页效果则能够将大量数据分割成易于管理和浏览的一页或一页的内容。这三种功能的结合,不仅使得我们能够更好地处理庞大的数据集合,同时也使得用户能够快速定位所需信息。 本文将介绍如何使用现代前端技术实现动态树、数据表格及分页
|
9月前
|
JavaScript
element-UI el-table动态显示隐藏列造成固定一侧的列(fixed=“left/right“)错误显示
问题原因:多个tabs共用一个实体,动态显示隐藏列 出现了固定在右侧的列(fixed="right")错位 【解决方案】 表格的重新布局,只要table数据发生变化的时候就重新渲染表格 ```js this.$nextTick(() => { this.$refs.formname.doLayout() }) ``` 参考element官方文档 ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231030-e40
151 0
element-UI el-table动态显示隐藏列造成固定一侧的列(fixed=“left/right“)错误显示
|
2月前
Element多级表格合并处理
Element多级表格合并处理
15 0
|
2月前
|
前端开发 小程序
使用element UI-table表格列宽自适应 【已解决】
使用element UI-table表格列宽自适应 【已解决】
123 0
|
8月前
element Table表格隐藏列
element Table表格隐藏列
171 0
Element-ui 表格 (Table) 组件中动态合并单元格
Element-ui 表格 (Table) 组件中动态合并单元格
617 0
Element-ui 表格 (Table) 组件中动态合并单元格
element UI table合并行合并列(整理)
element UI table合并行合并列(整理)
|
JavaScript
VUE element-ui之table表格勾选复选框动态合计某列的值
VUE element-ui之table表格勾选复选框动态合计某列的值
522 0
VUE element-ui之table表格勾选复选框动态合计某列的值
|
JavaScript
VUE element-ui之table表格全局排序、调用后端接口排序功能
VUE element-ui之table表格全局排序、调用后端接口排序功能
1259 0
|
存储 API
【ElementUI】Table表格动态合并
【ElementUI】Table表格动态合并
177 0