动态合并行和列(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 值。
相关文章
|
数据格式
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
本文介绍了在ElementUI和ElementPlus中使用`el-table`组件实现合并行功能的技巧,包括多列合并和单列合并的方法,并提供了相应的示例代码和运行效果。
10126 46
使用小技巧实现el-table组件的合并行功能,ElementUI和ElementPlus都适用
Element-ui 表格 (Table) 组件中动态合并单元格
Element-ui 表格 (Table) 组件中动态合并单元格
1706 0
Element-ui 表格 (Table) 组件中动态合并单元格
|
前端开发
element菜单组件样式修改NavMenu导航菜单
本文介绍了如何修改Element UI的NavMenu导航菜单组件的样式,包括激活菜单项的颜色、菜单项hover颜色、父级菜单hover颜色以及菜单行高。提供了相应的CSS代码示例,并展示了如何将这些样式应用到实际的NavMenu组件中。
1415 3
element菜单组件样式修改NavMenu导航菜单
|
JavaScript
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
这篇文章介绍了在Vue项目中安装node-sass和sass-loader时遇到的版本冲突问题,并提供了解决这些问题的方法,包括在不降低node版本的情况下成功安装node-sass。
成功解决node、node-sass和sass-loader版本冲突问题、不需要降低node版本。如何在vue项目中安装node-sass,以及安装node-sass可能遇到的版本冲突问题
Vue3项目引入 vue-quill 编辑器组件并封装使用
本文介绍了如何在Vue3项目中引入并封装使用`vue-quill`富文本编辑器组件,包括安装配置、父页面实现、子组件设计以及使用方法和效果展示。
3055 0
Vue3项目引入 vue-quill 编辑器组件并封装使用
element el-table 设置fixed导致行错乱问题
文章讨论了在使用Element UI的`el-table`组件时,设置固定列(`fixed`)导致行错乱的问题,并提供了解决方案。问题产生的原因是当表格底部有滚动条而固定列底部没有滚动条时,行无法对齐。解决办法是在表格中设置`padding-bottom`的内边距与滚动条高度相等,确保固定列和非固定列的行能够对齐。
3794 0
|
存储
el-tree 动态指定默认选中节点
el-tree 动态指定默认选中节点
1145 6
|
JavaScript
【vue】vue 里面使用 v-html 插入的文本带有换行符‘\n‘不换行
【vue】vue 里面使用 v-html 插入的文本带有换行符‘\n‘不换行
1279 1
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
el-input实现后缀图标和clearable的兼容,调整el-input clearable与自定义图标展示位置问题
990 1
|
Oracle Java 关系型数据库
Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)
Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)