element 复合表格 el-table多行合并

4 篇文章 1 订阅
3 篇文章 0 订阅

关于工作中用到el-table表格中,相同数据合并得问题,在此记录一下,造个轮子

业务需求

  1. 有重复得数据把表格合并起来

例如
在这里插入图片描述

表格代码

:data=“tableData” //data数据
:span-method=“objectSpanMethod” //表格合并得方法
:header-cell-style="{
‘background-color’: ‘#003F98’,
‘color’:’#FFF’,
‘opacity’: 0.7
}" //表头得样式

 <el-table
  :data="tableData"
    :span-method="objectSpanMethod"
    border=""
    stripe
    :header-cell-style="{
      'background-color': '#003F98',
      'color':'#FFF',
      'opacity': 0.7
    }"
    style="width: 100%; margin-top: 20px"
  >
    <el-table-column prop="id" label="类型" width="180"></el-table-column>
    <el-table-column prop="amount1" label="序号"></el-table-column>
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="amount2" label="状态"></el-table-column>
  </el-table>

表格得date数据

tableData: [
        {
          id: "女朋友",
          name: "王小虎",
          amount1: "1",
          amount2: "哈哈哈"
        },
        {
          id: "大朋友",
          name: "王小虎",
          amount1: "1",
          amount2: "哈哈哈"
        },
        {
          id: "大朋友",
          name: "王小虎",
          amount1: "2",
          amount2: "哈哈哈"
        },
        {
          id: "小朋友",
          name: "王小虎",
          amount1: "1",
          amount2: "哈哈哈"
        },
        {
          id: "小朋友",
          name: "王小虎",
          amount1: "2",
          amount2: "哈哈哈"
        },
      ],

表格的合并方法

getTableData() {
        let spanOneArr = [],
          spanTwoArr = [],
          concatOne = 0,
          concatTwo = 0;
        this.tableData.forEach((item, index) => {
          if (index === 0) {
            spanOneArr.push(1);
            spanTwoArr.push(1);
          } else {
            if (item.id === this.tableData[index - 1].id) { //第一列需合并相同内容的判断条件
              spanOneArr[concatOne] += 1;
              spanOneArr.push(0);
            } else {
              spanOneArr.push(1);
              concatOne = index;
            };
          }
        });
        return {
          one: spanOneArr,
          two: spanTwoArr
        }
      },
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      console.log( row, column, rowIndex, columnIndex )
      if (columnIndex === 0) {
       const _row = (this.getTableData(this.JZPFData).one)[rowIndex];
          const _col = _row > 0 ? 1 : 0;
          return {
            rowspan: _row,
            colspan: _col
          }
      }
    },
要将两个 `el-table` 合成上下的一个表格,共用头,并且实现滚动同步,您可以使用以下步骤: 1. 将两个 `el-table` 放在一个容器中,并设置容器的高度和 `overflow-y: auto` 属性,以确保两个表格都可以垂直滚动。 2. 在第二个 `el-table` 中隐藏头,并将第二个 `el-table` 的滚动事件同步到第一个 `el-table` 中。 下面是一个示例代码: ```html <template> <div class="table-container" ref="tableContainer" @scroll="handleScroll"> <el-table :data="tableData1" :height="tableHeight1" style="max-height: 400px; overflow-y: auto;"> <el-table-column prop="column1" label="列1"></el-table-column> <el-table-column prop="column2" label="列2"></el-table-column> <el-table-column prop="column3" label="列3"></el-table-column> </el-table> <el-table :data="tableData2" :height="tableHeight2" style="max-height: 400px; overflow-y: auto;" v-show="false" @scroll.native="handleScroll2"> <el-table-column prop="column1" label="列1"></el-table-column> <el-table-column prop="column2" label="列2"></el-table-column> <el-table-column prop="column3" label="列3"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData1: [], tableData2: [], tableHeight1: 0, tableHeight2: 0, scrollTop: 0, scrollDistance: 50 // 滚动固定的距离 }; }, mounted() { // 计算表格高度 this.tableHeight1 = document.documentElement.clientHeight / 2; this.tableHeight2 = document.documentElement.clientHeight / 2; }, methods: { handleScroll(event) { // 获取容器滚动距离 const scrollTop = event.target.scrollTop; // 计算与上次滚动的距离差 const delta = scrollTop - this.scrollTop; // 如果距离差小于滚动固定的距离,则不执行滚动 if (Math.abs(delta) < this.scrollDistance) { return; } // 更新上次滚动的距离 this.scrollTop = scrollTop; // 将第二个表格的滚动距离同步到第一个表格中 this.$refs.table2.bodyWrapper.scrollTop = scrollTop; }, handleScroll2(event) { // 将第二个表格的滚动距离同步到第一个表格中 this.$refs.table1.bodyWrapper.scrollTop = event.target.scrollTop; } } } </script> ``` 在上面的示例中,我们将两个 `el-table` 放在一个容器中,并设置容器的高度和 `overflow-y: auto` 属性。在第二个表格中,我们将头设置为隐藏,并将滚动事件绑定到 `@scroll.native` 事件上,以确保可以正确地监听到滚动事件。在 `mounted` 钩子中,我们计算表格高度。在 `handleScroll` 方法中,我们获取容器的滚动距离,并计算与上次滚动的距离差。如果距离差小于滚动固定的距离,则不执行滚动。最后,我们将第二个表格的滚动距离同步到第一个表格中,以实现滚动同步。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值