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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM