ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用elementUI中table合并项, 最全的配置教程, CV大法应该没有任何问题

2020-10-03 17:36:01  阅读:260  来源: 互联网

标签:return spanArr elementUI rowIndex 合并 returnData arr1 table CV


废话不多说, 先上图片, 具体配置看我神操作

数据源

数据源就不给出来了, 反正 自己模拟一下, 把具有相同的项的内容改成一样的就行了

我是修改的前三项, 部分一样的

 

配置流程

1. 既然需要合并项, 肯定需要合并的条件, 官方给出了一个方法   :span-method , 所以第一步要做的 , 是在table的表格中添加 这个方法, 并且给一个回调函数

我的 

objectSpanMethod 函数写在 methods 这个应该不用多说吗吧 


<el-table
      :data="tableData"
          :span-method="objectSpanMethod"  // 这一行是重点 , 后面的回调函数决定了 合并的方向和合并的个数
          border
          style="width: 100%; margin-top: 20px"
          :cell-style="{ textAlign: 'center' }"
          :header-cell-style="{
            textAlign: 'center',
            background: '#f7f9fc'
          }"
        >

官方给的函数内容可以都删除了, 因为不符合我们的需求

 

2. 在确定右数据的地方调用配置函数 , 我因为数据暂时是静态的 , 所以 , 直接在 mounted 中调用即可 , 老铁们记得在获取完数据的ajax中调用这个函数, 不然会报错

  mounted() {
    this.processingData(['id', 'name', 'amount1'], this.tableData)
  }

然后传递的参数 , 也解释一下 

processingData 函数名字, 在methods 中定义, 下面会给出
第一个参数数组 , 里面有三个值, 是我要合并项的键名 , 或者说是你需要合并的 数据的 那一样代码 对应的 props 值 ;
  值可以传递多个, 比如说 我 需要合并三列, 就传递了三个键名 , 具体传递几个 看你的业务需求

this.tableData为数据源


3. 在data中定义一个数组, 空数组, 为数据合并项容器
我定义的为
      // 需要合并的数据
      spanArr: []

 




4. 配置函数
这个函数有点绕, 老铁们看得懂的话, 应该也能写出来 , 看不懂就没必要看了, 反正不影响后面的内容, 直接复制粘贴过去也是以一样的
但是 最后一行的赋值 , 千万记得改成 你 定义了的 空数组, 因为我定义的就是spanArr , 所以我直接赋值了 , 其他的地方 不需要修改
    processingData(arr, data) {
      // 返回的数据
      const returnData = []

      arr.forEach((j, k) => {
        fn(j, k, data)
      })

      function fn(j, k, data) {
        //   // 每次调用都在 需要合并的数组里面添加一个新数组
        // returnData.push([])
        // 记录上一次相同的索引 [2, 0, 2, 0, 1]
        let lastIndex = -1
        data.forEach((item, i) => {
          if (i === 0) {
            // 处理第一项
            lastIndex = i
            returnData.push([1])
          } else {
            if (item[j] === data[i - 1][j]) {
              // 说明和上一个id是一样的 隐藏
              returnData[k][lastIndex] = returnData[k][lastIndex] + 1
              returnData[k].push(0)
              // 获取到合并的长度
            } else {
              returnData[k].push(1)
              lastIndex = i
            }
          }
        })
      }
      this.spanArr = returnData
    }

5. 需要配置的数据 搞定了, 下一步 就是 合并了 

合并函数

// 合并行或者列    当前行 当前列   行号      列号       四个属性
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        const arr1 = this.spanArr[0]
        if (arr1[rowIndex] === 0) {
          return [0, 0]
        } else {
          return [arr1[rowIndex], 1]
        }
      }
      if (columnIndex === 1) {
        const arr1 = this.spanArr[1]
        if (arr1[rowIndex] === 0) {
          return [0, 0]
        } else {
          return [arr1[rowIndex], 1]
        }
      }
      if (columnIndex === 2) {
        const arr1 = this.spanArr[2]
        if (arr1[rowIndex] === 0) {
          return [0, 0]
        } else {
          return [arr1[rowIndex], 1]
        }
      }
    },

一下子搞这么多, 说实话自己看着都有点懵逼 , 所以单独 拿一部分出来 解释一下 , 下面一定要看,  这个 是 实实在在影响最终布局的东西

this.processingData(['id', 'name', 'amount1'], this.tableData)   <== 这是之前调用函数传递的参数
 if (columnIndex === 0) {    // 这一行代码是判断 当 列等于0的时候, 也就是 第一竖列 进行合并判断
        const arr1 = this.spanArr[0]  // 这里是spanArr[0] 是上面调用时候 'id'对应的数组, 多个判断 , 这个序号就是id在调用传入的数组的索引
// 下面的判断就不用变化了
if (arr1[rowIndex] === 0) { return [0, 0] } else { return [arr1[rowIndex], 1] } }

 

标签:return,spanArr,elementUI,rowIndex,合并,returnData,arr1,table,CV
来源: https://www.cnblogs.com/liuyuexue520/p/13764757.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有