Vue Element框架的table進行多行合並


一、表格中只合並一處

 

 

 

 

 

 

 如上圖所示,這里根據“倉庫”進行合並,相同倉庫的數據合並到一個倉庫列中。

實現代碼

tempelate:

 1  <el-table
 2       :data="dataList"
 3       :span-method="objectSpanMethod"
 4       size="mini"
 5       border
 6       highlight-current-row
 7       style="width: 100%; margin-top: 20px"
 8       @current-change="handleCurrentChange"
 9     >
10 </el-table>

ts:

 1   @Watch("dataList", { immediate: true })
 2   private onOrderOutLineIdChanged() {
 3     if (this.dataList.length > 0) {
 4       this.getSpanArr(this.dataList)
 5     }
 6   }
 7 
 8   private getSpanArr(data: any) {
 9     let pos = 0
10     for (let i = 0; i < data.length; i++) {
11       if (i === 0) {
12         this.spanArr.push(1)
13       } else {
14         // 判斷當前元素與上一個元素是否相同
15         if (
16           data[i].storeId === data[i - 1].storeId &&
17           data[i].store.type === data[i - 1].store.type
18         ) {
19           this.spanArr[pos] += 1
20           this.spanArr.push(0)
21         } else {
22           this.spanArr.push(1)
23           pos = i
24         }
25       }
26     }
27   }
28 
29   private objectSpanMethod(data: any) {
30     if (this.dataList.length > 0) {
31       if (data.columnIndex === 0 || data.columnIndex === 1) {
32         const _row = this.spanArr[data.rowIndex]
33         const _col = _row > 0 ? 1 : 0
34         return {
35           rowspan: _row,
36           colspan: _col,
37         }
38       }
39     }
40   }

二、多處合並

 

 

 實現原理為再次寫一個方法去判斷第二處合並的信息,再在 “objectSpanMethod” 方法體內,通過判斷在當前需要合並的列中進行ruturn即可。

代碼為:

tempelate:

1 <el-table
2       :data="dataList"
3       :span-method="objectSpanMethod"
4       size="mini"
5       border
6       style="width: 100%; margin-top: 20px"
7     >
8 </el-table>

ts:

 1 private spanArr = new Array<number>()
 2  private storeTypespanArr = new Array<number>()
 3    
 4 
 5   @Watch("dataList", { immediate: true })
 6   private onOrderOutLineIdChanged() {
 7     if (this.dataList.length > 0) {
 8       this.getSpanArr(this.dataList)
 9       this.getSpanArrStoreType(this.dataList)
10     }
11   }
12 
13   private getSpanArr(data: any) {
14     let pos = 0
15     for (let i = 0; i < data.length; i++) {
16       if (i === 0) {
17         this.spanArr.push(1)
18       } else {
19         // 判斷當前元素與上一個元素是否相同
20         if (
21           data[i].stockId === data[i - 1].stockId ||
22           data[i].stock.productName === data[i - 1].stock.productName ||
23           data[i].stock.description === data[i - 1].stock.description
24         ) {
25           this.spanArr[pos] += 1
26           this.spanArr.push(0)
27         } else {
28           this.spanArr.push(1)
29           pos = i
30         }
31       }
32     }
33   }
34 
35   private getSpanArrStoreType(data: any) {
36     let pos = 0
37     for (let i = 0; i < data.length; i++) {
38       if (i === 0) {
39         this.storeTypespanArr.push(1)
40       } else {
41         // 判斷當前元素與上一個元素是否相同
42         if (
43           data[i].store.type === data[i - 1].store.type &&
44           (data[i].stockId === data[i - 1].stockId ||
45             data[i].stock.productName === data[i - 1].stock.productName ||
46             data[i].stock.description === data[i - 1].stock.description)
47         ) {
48           this.storeTypespanArr[pos] += 1
49           this.storeTypespanArr.push(0)
50         } else {
51           this.storeTypespanArr.push(1)
52           pos = i
53         }
54       }
55     }
56   }
57 
58   private objectSpanMethod(data: any) {
59     if (this.dataList.length > 0) {
60       if (data.columnIndex === 0 || data.columnIndex === 1) {
61         const _row = this.spanArr[data.rowIndex]
62         const _col = _row > 0 ? 1 : 0
63         return {
64           rowspan: _row,
65           colspan: _col,
66         }
67       }
68       if (data.columnIndex == 2) {
69         const _row = this.storeTypespanArr[data.rowIndex]
70         const _col = _row > 0 ? 1 : 0
71         return {
72           rowspan: _row,
73           colspan: _col,
74         }
75       }
76     }
77   }

注意:我這里控制兩處合並的方法分開寫了,自己寫的時候可以合並到一個方法里寫。懶得改了。


免責聲明!

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



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