# table合并单元格
//代码写在[表.js]文件中,与onInint同级别,或者放onInit方法后面
//2023.08.19增加行、列合并功能,el合并文档见
//https://element-plus.gitee.io/zh-CN/component/table.html#%E5%90%88%E5%B9%B6%E8%A1%8C%E6%88%96%E5%88%97
//rows为当前页面所有的行数据
spanMethod({ row, column, rowIndex, columnIndex },rows) {
//spanMethod放在[表.js]文件中,与onInit方法同级
//根据rowIndex, columnIndex 值按需要合并
if (rowIndex % 2 === 0) {
if (columnIndex === 6) {
return [1, 2]
}
else if (columnIndex === 5) {
return [0, 0]
}
}
if (columnIndex === 1) {
if (rowIndex % 2 === 0) {
return {
rowspan: 2,
colspan: 1,
}
} else {
return {
rowspan: 0,
colspan: 0,
}
}
}
}
//合并计算示例
spanMethod({ row, column, rowIndex, columnIndex }, rows) {
// 假设要合并第1列(columnIndex === 1)
if (columnIndex === 1) {
// 获取当前列的字段名
const field = this.columns[columnIndex].field
// 如果是第一行,从这一行开始统计
if (rowIndex === 0) {
let count = 1 // 记录相同值的数量
// 向下查找相同值的行数
for (let i = 1; i < rows.length; i++) {
if (rows[i][field] === row[field]) {
count++
} else {
break
}
}
// 返回要合并的行数
return {
rowspan: count,
colspan: 1
}
} else {
// 检查当前行的值是否与上一行相同
const prevRow = rows[rowIndex - 1]
if (prevRow && row[field] === prevRow[field]) {
// 如果与上一行相同,则不显示
return {
rowspan: 0,
colspan: 0
}
}
// 如果与上一行不同,需要计算向下合并的行数
let count = 1
for (let i = rowIndex + 1; i < rows.length; i++) {
if (rows[i][field] === row[field]) {
count++
} else {
break
}
}
return {
rowspan: count,
colspan: 1
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
← table进度条 table单元格颜色 →