Skip to content

Commit 6dfa838

Browse files
author
黄书伟
committed
Table 组件优化复杂表头行合并时,会添加空行
1 parent 823ce2a commit 6dfa838

File tree

3 files changed

+60
-23
lines changed

3 files changed

+60
-23
lines changed

packages/v-table/src/frozen-columns-mixin.js

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default {
1515
},
1616
// 冻结的表头列集合
1717
frozenTitleCols(){
18-
var frozenTitleCols = [];
18+
var frozenTitleCols = [], self = this;
1919

2020
if (this.internalTitleRows.length > 0) {
2121

@@ -31,16 +31,29 @@ export default {
3131
}
3232
}
3333
})
34+
3435
if (frozenTitleRows.length > 0) {
36+
3537
frozenTitleCols.push(frozenTitleRows);
38+
39+
var minRowspan = self.getMinRowspan(frozenTitleRows);
40+
41+
if (minRowspan && minRowspan > 0) {
42+
43+
for (var i = 0; i < minRowspan; i++) {
44+
45+
frozenTitleCols.push([]);
46+
}
47+
}
3648
}
3749
})
3850
}
51+
3952
return frozenTitleCols;
4053
},
4154
// 未的表头列集合
4255
noFrozenTitleCols(){
43-
var noFrozenTitleCols = [];
56+
var noFrozenTitleCols = [], self = this;
4457

4558
if (this.internalTitleRows.length > 0) {
4659

@@ -57,12 +70,20 @@ export default {
5770

5871
if (noFrozenTitleRows.length > 0) {
5972
noFrozenTitleCols.push(noFrozenTitleRows);
73+
74+
var minRowspan = self.getMinRowspan(noFrozenTitleRows);
75+
76+
if (minRowspan && minRowspan > 0) {
77+
78+
for (var i = 0; i < minRowspan; i++) {
79+
80+
noFrozenTitleCols.push([]);
81+
}
82+
}
6083
}
6184
})
6285
}
6386
return noFrozenTitleCols;
64-
},
65-
66-
87+
}
6788
}
6889
}

packages/v-table/src/table.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<tr v-for="row in frozenTitleCols">
1616
<td v-for="col in row"
1717
:class="[col.titleCellClassName]"
18-
:colspan="col.colspan" :rowspan="dealTitleRowspan(row,col.rowspan)"
18+
:colspan="col.colspan" :rowspan="col.rowspan"
1919

2020
@mousemove.stop="handleTitleMouseMove($event,col.fields)"
2121
@mousedown.stop="handleTitleMouseDown($event)"
@@ -177,7 +177,7 @@
177177
<tr v-for="row in noFrozenTitleCols">
178178
<td v-for="col in row"
179179
:class="[col.titleCellClassName]"
180-
:colspan="col.colspan" :rowspan="dealTitleRowspan(row,col.rowspan)"
180+
:colspan="col.colspan" :rowspan="col.rowspan"
181181
@mousemove.stop="handleTitleMouseMove($event,col.fields)"
182182
@mousedown.stop="handleTitleMouseDown($event)"
183183
@mouseout.stop="handleTitleMouseOut()"
@@ -587,6 +587,7 @@
587587
bodyViewHeight(){
588588
var result;
589589
if (this.internalTitleRows.length > 0) {
590+
590591
result = this.internalHeight - this.titleRowHeight * (this.internalTitleRows.length + this.getTitleRowspanTotalCount);
591592
} else {
592593
result = this.internalHeight - this.titleRowHeight;

packages/v-table/src/title-cell-merge-mixin.js

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -70,31 +70,46 @@ export default {
7070
* row :行信息
7171
* rowspan:当前列的rowspan值
7272
* */
73-
dealTitleRowspan(row, rowspan){
73+
/*dealTitleRowspan(row, rowspan){
7474
75-
let result = rowspan,
76-
rowspanCountArr,
77-
minVal;
75+
let result = rowspan,
76+
rowspanCountArr,
77+
minVal;
7878
79-
rowspanCountArr = this.getTitleRowspanCountArr(row);
79+
rowspanCountArr = this.getTitleRowspanCountArr(row);
8080
81-
// 如果每一项的rowspan值都大于1则继续处理
82-
if (Array.isArray(rowspanCountArr) && rowspanCountArr.length > 0) {
81+
// 如果每一项的rowspan值都大于1则继续处理
82+
if (Array.isArray(rowspanCountArr) && rowspanCountArr.length > 0) {
8383
84-
rowspan = parseInt(rowspan);
84+
rowspan = parseInt(rowspan);
8585
86-
minVal = Math.min.apply(null, rowspanCountArr);
86+
minVal = Math.min.apply(null, rowspanCountArr);
8787
88-
if (rowspan === minVal) {
88+
if (rowspan === minVal) {
8989
90-
result = 1;
91-
} else {
90+
result = 1;
91+
} else {
9292
93-
result = rowspan - minVal + 1;
94-
}
93+
result = rowspan - minVal + 1;
94+
}
95+
}
96+
return result;
97+
},*/
98+
99+
// 获取最小的 rowspan
100+
getMinRowspan(row){
101+
102+
let result;
103+
104+
let rowspanCountArr = this.getTitleRowspanCountArr(row);
105+
106+
// 如果每一项的rowspan值都大于1则继续处理
107+
if (Array.isArray(rowspanCountArr) && rowspanCountArr.length > 0) {
108+
109+
result = Math.min.apply(null, rowspanCountArr);
95110
}
96-
return result;
97-
},
111+
return result - 1;
112+
}
98113
}
99114

100115
}

0 commit comments

Comments
 (0)