element-ui 实现行合并-亲测有效!

目标样式:

首先先来看下我们拿到的返回数据:

复制代码
scheduleList: [
        {
          date: '第一天',
          journey: '报道',
          lecturer: '',
        },
        {
          date: '第二天',
          journey: '企业生产安全应急预案数字化推演及复盘',
          lecturer: '国家危化品应急救援基地--林俊',
        },
        {
          date: '第三天',
          journey: '火灾应急处置',
          lecturer: '国家危化品应急救援基地—张学军',
        },
        {
          date: '第三天',
          journey: '中毒窒息事故应急处置',
          lecturer: '中化岙山事故应急处置师资',
        },
        {
          date: '第四天',
          journey: '人员触电事故应急处置',
          lecturer: '中化岙山事故应急处置师资',
        },
        {
          date: '第四天',
          journey: '泄漏事故应急处置',
          lecturer: '中化岙山事故应急处置师资',
        },
        {
          date: '第四天',
          journey: '问题交流',
          lecturer: '中化岙山事故应急处置师资',
        },
        {
          date: '第五天',
          journey: '受限空间作业管理',
          lecturer: '中化岙山危险作业内训师',
        },
        {
          date: '第五天',
          journey: '高处作业管理',
          lecturer: '中化岙山危险作业内训师',
        },
        {
          date: '第五天',
          journey: '动火作业管理',
          lecturer: '中化岙山危险作业内训师',
        },
        {
          date: '第五天',
          journey: '临时用电作业管理',
          lecturer: '中化岙山危险作业内训师',
        },
        {
          date: '第五天',
          journey: '问题交流与讨论',
          lecturer: '中化岙山危险作业内训师',
        },
        {
          date: '第六天',
          journey: '回城',
          lecturer: '',
        },
      ],
      rowIndex: '-1',
      orderIndexArr: [],
      hoverOrderArr: [],
复制代码

html代码结构:

复制代码
 <el-table
    :data="scheduleList"
    :span-method="objectSpanMethod"
    @cell-mouse-leave="cellMouseLeave"
    @cell-mouse-enter="cellMouseEnter"
    :cell-class-name="tableRowClassName"
    border
 >
    <el-table-column prop="date" label="时间" width="120"></el-table-column>
    <el-table-column prop="journey" label="行程" width="600"></el-table-column>
    <el-table-column prop="lecturer" label="讲师"></el-table-column>
 </el-table>
复制代码

js代码:

复制代码
 1 methods: {  
 2 // 获取相同编号的数组
 3     getOrderNumber() {
 4       const orderObj = {};
 5       this.scheduleList.forEach((item, index) => {
 6         item.rowIndex = index;
 7         if (orderObj[item.date]) {
 8           orderObj[item.date].push(index);
 9         } else {
10           orderObj[item.date] = [];
11           orderObj[item.date].push(index);
12         }
13       });
14       // 将数组长度大于1的值 存储到this.orderIndexArr(也就是需要合并的项)
15       Object.keys(orderObj).forEach((key) => {
16         if (orderObj[key].length > 1) {
17           this.orderIndexArr.push(orderObj[key]);
18         }
19       });
20     },
21     objectSpanMethod({ row, column, rowIndex, columnIndex }) {
22       if (columnIndex === 0 || columnIndex === 2) {
23         for (let i = 0; i < this.orderIndexArr.length; i += 1) {
24           let element = this.orderIndexArr[i];
25           for (let j = 0; j < element.length; j += 1) {
26             let item = element[j];
27             if (rowIndex === item) {
28               if (j === 0) {
29                 return {
30                   rowspan: element.length,
31                   colspan: 1,
32                 };
33               }
34               if (j !== 0) {
35                 return {
36                   rowspan: 0,
37                   colspan: 0,
38                 };
39               }
40             }
41           }
42         }
43       }
44     },
45     tableRowClassName({ row, rowIndex }) {
46       let arr = this.hoverOrderArr;
47       for (let i = 0; i < arr.length; i += 1) {
48         if (rowIndex === arr[i]) {
49           return 'hovered-row';
50         }
51       }
52     },
53     cellMouseEnter(row, column, cell, event) {
54       this.rowIndex = row.rowIndex;
55       this.hoverOrderArr = [];
56       this.orderIndexArr.forEach((element) => {
57         if (element.indexOf(this.rowIndex) >= 0) {
58           this.hoverOrderArr = element;
59         }
60       });
61     },
62     cellMouseLeave(row, column, cell, event) {
63       this.rowIndex = '-1';
64       this.hoverOrderArr = [];
65     }
66 }
67 mounted() {
68     this.getOrderNumber();
69 },
复制代码

css部分:

1 .el-table {
2   /deep/ .hovered-row {
3     background: #f5f7fa;
4   }
5 }

 

posted @   鼓舞飞扬  阅读(5363)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示