element-ui table :span-method 行合并 动态数据处理

element-ui官网提供了表格行合并的方法,但是官方demo过于简单用取余的方法将行两两合并 ,实际开发中需求显然复杂的多,今天我就行记录一下我在开发中从获取动态数据后,对数据进行处理,并进行啊行合并的方法:

1.学习官方demo

Element - The world's most popular Vue UI framework 先看懂官方的案例再自行上手 案例比较简单不多解释了

2.需求

从后台获取的数据

[{"orgId":59,"activityId":3,"name":"a","num":1,"orgName":"逐日信息科技"},
{"orgId":59,"activityId":3,"name":"b","num":2,"orgName":"逐日信息科技"},
{"orgId":59,"activityId":3,"name":"c","num":13,"orgName":"逐日信息科技"},
{"orgId":59,"activityId":3,"name":"d","num":12,"orgName":"逐日信息科技"},
{"orgId":66,"activityId":3,"name":"e","num":11,"orgName":"逐日信息科技1"},
{"orgId":66,"activityId":3,"name":"f","num":11,"orgName":"逐日信息科技1"}]

需要的展示效果 (需要将orgId相同数据的orgName合并展示 )

3.上代码 

html表格代码很简单

<el-table
    :data="participatorList"
    :span-method="objectSpanMethod"
    border
    style="width: 100%; margin-top: 20px;"
>
    <el-table-column prop="orgName" label="接入方"> </el-table-column>
    <el-table-column prop="name" label="报名人员名称"> </el-table-column>
    <el-table-column prop="num" label="报名人分数"> </el-table-column>
</el-table>

先附上处理后的数据 多了一个rowspan属性以标记合并行的位置信息

[{"orgId":59,"activityId":3,"name":"a","num":1,"orgName":"逐日信息科技","rowspan":4},
{"orgId":59,"activityId":3,"name":"b","num":2,"orgName":"逐日信息科技","rowspan":0},
{"orgId":59,"activityId":3,"name":"c","num":13,"orgName":"逐日信息科技","rowspan":0},
{"orgId":59,"activityId":3,"name":"d","num":12,"orgName":"逐日信息科技","rowspan":0},
{"orgId":66,"activityId":3,"name":"e","num":11,"orgName":"逐日信息科技1","rowspan":2},
{"orgId":66,"activityId":3,"name":"f","num":11,"orgName":"逐日信息科技1","rowspan":0}]

从后台获取并处理数据的方法 以及合并展示的方法

    
    //获取并处理数据
    handleParticipator() {
      list({}).then((res) => {//发送http请求
        this.participatorList = res.rows;
        
        //处理数据
        for (let i = this.participatorList.length - 1; i > 0; i--) {
          //从后向前遍历
          if (!this.participatorList[i].rowspan) {
            //设置初始值(可理解为:每个数据项必定占一行)
            this.participatorList[i].rowspan = 1;
          }
          if (i > 0 &&
            this.participatorList[i].orgId == this.participatorList[i - 1].orgId
          ) {
            //当前公司名与前一个数据的公司相同时 设置rowspan(前数据一项与下一行的相同时 合并一行)
            this.participatorList[i - 1].rowspan =
              this.participatorList[i].rowspan + 1;
            this.participatorList[i].rowspan = 0;
          }
        }
      });
    },



    //合并展示
    objectSpanMethod({row, column, rowIndex, columnIndex}) {
      if (columnIndex === 0) {
        return {
          rowspan: row.rowspan,
          colspan: 1,
        };
      }
    },

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Element-UITable组件中,如果需要将中相邻的同类项合并,可以使用自定义的合并函数来实现。具体骤如下: 1. 首先,在Table组件中设置`row-span-method`属性为一个自定义的方法名,例如`mergeRows`。 2. 在Vue实例中定义`mergeRows`方法,该方法接收三个参数:当前数据(row)、当前列数据(column)、当前索引(rowIndex)。 3. 在`mergeRows`方法中,判断当前与上一是否需要合并。如果需要合并,则返回合并数(即rowspan),否则返回1。 4. 在模板中,使用`row-span-method`属性绑定到自定义的合并函数。 下面是一个示例代码: ```html <template> <el-table :data="tableData" row-span-method="mergeRows"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20, gender: '男' }, { name: '李四', age: 22, gender: '男' }, { name: '王五', age: 22, gender: '男' }, { name: '赵六', age: 25, gender: '女' }, { name: '钱七', age: 25, gender: '女' }, ], }; }, methods: { mergeRows(row, column, rowIndex) { if (rowIndex === 0) { return 1; // 第一不需要合并 } const prevRow = this.tableData[rowIndex - 1]; if (row.age === prevRow.age && row.gender === prevRow.gender) { return 0; // 合并数为0,表示与上一合并 } return 1; // 不需要合并 }, }, }; </script> ``` 这样,相邻的同类项就会合并为一显示在Table组件中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值