vue element table表格相同名称列合并方式

 更新时间:2022年10月19日 08:47:49   作者:发根强劲  
这篇文章主要介绍了vue element table表格相同名称列合并方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

element table表格相同名称列合并

<template>
  <div>
    <el-table show-summary :summary-method="getSummaries" :span-method="objectSpanMethod" :data="tableData" row-key="id" ref="tableDom" border>
      <el-table-column label="序号" width="55" align="center">
        <template slot-scope="scope">{{ scope.$index + 1 }}</template>
      </el-table-column>
      <el-table-column prop="name" label="分类" align="center"></el-table-column>
      <el-table-column prop="num1" label="数量1" align="center"></el-table-column>
      <el-table-column prop="num2" label="数量2" align="center"></el-table-column>
      <el-table-column prop="num3" label="数量3" align="center"></el-table-column>
      <el-table-column prop="type" label="类型" align="center"></el-table-column>
      <el-table-column prop="num4" label="数量4" align="center"></el-table-column>
      <el-table-column prop="num5" label="数量5" align="center"></el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  name: '',
  components: {},
  props: {},
  data() {
    return {
      tableData: [{
        name: '名称1',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '连续',
        num5: '6',
        num6: '7',
      }, {
        name: '名称2',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '连续',
        num5: '6',
        num6: '7',
      }, {
        name: '名称2',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '连续',
        num5: '6',
        num6: '7',
      }, {
        name: '名称3',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '连续',
        num5: '6',
        num6: '7',
      }, {
        name: '名称4',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '连续',
        num5: '6',
        num6: '7',
      }, {
        name: '名称4',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '连续',
        num5: '6',
        num6: '7',
      }]
    }
  },
  filters: {},
  computed: {},
  watch: {},
  created() {},
  mounted() {},
  beforeDestroy() {},
  methods: {
    // 合计
    getSummaries (param) {
      const { columns, data } = param
      const sums = []
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = '合计'
        } else if (index === 2 || index === 7) {
          const values = data.map(item => Number(item[column.property]))
        if (!values.every(value => isNaN(value))) {
          sums[index] = values.reduce((prev, curr) => {
            const value = Number(curr)
            if (!isNaN(value)) {
              return prev + curr
            } else {
              return prev
            }
          }, 0)
        } else {
          sums[index] = ''
        }
        } else {
          sums[index] = ''
        }
      })
      return sums
    },
    // table合并列
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      let data = this.tableData; //拿到当前table中数据
      let cellValue = row[column.property]; //当前位置的值
      let noSortArr = ['num1', 'num2', 'num3', 'num4', 'num5', 'num6']; //不需要合并的字段(不进行合并行的prop)
      if (cellValue && !noSortArr.includes(column.property)) {
        let prevRow = data[rowIndex - 1]; //获取到上一条数据
        let nextRow = data[rowIndex + 1]; //下一条数据
        if (prevRow && prevRow[column.property] === cellValue) { //当有上一条数据,并且和当前值相等时
          return { rowspan: 0, colspan: 0 };
        } else {
          let countRowspan = 1;
          while (nextRow && nextRow[column.property] === cellValue) { //当有下一条数据并且和当前值相等时,获取新的下一条
            nextRow = data[++countRowspan + rowIndex];
          }
          if (countRowspan > 1) {
            return { rowspan: countRowspan, colspan: 1 };
          }
        }
      }
    },
  }
}
</script>
<style scoped lang="less">
</style>
  

对table表格相同内容行的合并

在vue开发中会有对表格的操作,有时因为需要遍历的情况不同,对于数据相同行处理时,使用element的table不太好实现,还是使用html的table标签!

而此时,对于相同数据行,使用rowspan进行合并则无法更好的遍历数据,比如我们要实现这样的表格

 数据格式一看,使用遍历的话会更好实现,这个时候表格是这样的

 这个时候可以使用方法获取相同内容行,对其进行处理,方法如下

 mergeTable() {  //table表合并相同内容的行
      var tab = document.getElementById("subtable");
      var maxCol = 3, val, count, start;
      // var ys = "";
      for (var col = maxCol - 1; col >= 0 ; col--) {
        count = 1;
        val = "";
        for (var i = 0; i < tab.rows.length; i++) {
          if (val == tab.rows[i].cells[col].innerHTML) {
            count++;
          } else {
          if (count > 1) {
            //合并 
            start = i - count;
            tab.rows[start].cells[col].rowSpan = count;
            for (var j = start + 1; j < i; j++) { // 
                tab.rows[j].cells[col].style.display = "none";
                tab.rows[j].removeChild(tab.rows[j].cells[col]);
            }
            count = 1;
            }
            val = tab.rows[i].cells[col].innerHTML;
          }
        }
 
          if (count > 1) { //合并,最后几行相同的情况下 
            start = i - count;
            tab.rows[start].cells[col].rowSpan = count;
            for (var j = start + 1; j < i; j++) {
              tab.rows[j].removeChild(tab.rows[j].cells[col]);
            }
          }
      }
    }

然后在生命周期函数这调用该方法即可实现对相同内容行的合并操作!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于vue手动实现一个日历组件

    基于vue手动实现一个日历组件

    这篇文章主要为大家详细介绍了如何基于vue手动实现一个日历组件,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Vue3的ts报错:类型"{}"上不存在属性"xxx"的两种彻底根治解决方法

    Vue3的ts报错:类型"{}"上不存在属性"xxx"的两种彻底根治解决方法

    这篇文章主要给大家介绍了关于Vue3的ts报错:类型"{}"上不存在属性"xxx"的两种彻底根治解决方法,这是最近做项目中遇到的一个问题,这里给大家总结下解决办法,需要的朋友可以参考下
    2023-08-08
  • 关于.prettierrc代码格式化配置方式

    关于.prettierrc代码格式化配置方式

    这篇文章主要介绍了关于.prettierrc代码格式化配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 浅析对Vue中keep-alive缓存组件的理解

    浅析对Vue中keep-alive缓存组件的理解

    <keep-alive> 是一个抽象组件,用于将其内部的组件保留在内存中,而不会重新渲染,这意味着当组件在<keep-alive> 内部切换时,其状态将被保留,而不是被销毁和重新创建,这篇文章主要介绍了Vue中的keep-alive缓存组件的理解,需要的朋友可以参考下
    2024-01-01
  • 浅谈Vue static 静态资源路径 和 style问题

    浅谈Vue static 静态资源路径 和 style问题

    这篇文章主要介绍了浅谈Vue static 静态资源路径 和 style问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • el-input限制输入正整数的两种实现方式

    el-input限制输入正整数的两种实现方式

    el-input框是Element UI库中的一个输入框组件,用于接收用户的输入,这篇文章主要介绍了el-input限制输入正整数,需要的朋友可以参考下
    2024-02-02
  • vue activated在子组件中的使用详情

    vue activated在子组件中的使用详情

    这篇文章主要介绍了vue activated在子组件中的使用,文章围绕vue activated的xingu你资料讲解展开内容并附上具体代码,需要的朋友可以参考一下
    2021-11-11
  • Vue3从0搭建Monorepo项目组件库

    Vue3从0搭建Monorepo项目组件库

    这篇文章主要为大家介绍了Vue3从0搭建Monorepo项目组件库示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 解决vue数组中对象属性变化页面不渲染问题

    解决vue数组中对象属性变化页面不渲染问题

    今天小编就为大家分享一篇解决vue数组中对象属性变化页面不渲染问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • vue项目base64字符串转图片的实现代码

    vue项目base64字符串转图片的实现代码

    这篇文章主要介绍了vue项目base64字符串转图片的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07

最新评论