其他分享
首页 > 其他分享> > 使用elementUI中table合并项, 最全的配置教程, CV大法应该没有任何问题

使用elementUI中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