Commit 630141897540fe21230c0003a8b11573defd0b68
1 parent
a0f48947
fix table fixed-right header
Showing
4 changed files
with
42 additions
and
4 deletions
Show diff stats
examples/routers/table.vue
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | <br><br><br><br><br> |
6 | 6 | <!--<Table width="550" height="200" border :columns="columns2" :data="data4"></Table>--> |
7 | 7 | <!--<br><br><br><br><br>--> |
8 | - <Table border :columns="columns5" :data="data5"></Table> | |
8 | + <Table border :columns="columns5" height="200" :data="data5"></Table> | |
9 | 9 | <br><br><br><br><br> |
10 | 10 | <Table border :columns="columns6" :data="data5"></Table> |
11 | 11 | <br><br><br><br><br> |
... | ... | @@ -109,6 +109,13 @@ |
109 | 109 | align: 'center', |
110 | 110 | width: 200, |
111 | 111 | fixed: 'right' |
112 | + }, | |
113 | + { | |
114 | + title: 'Gender', | |
115 | + key: 'gender', | |
116 | + align: 'center', | |
117 | + width: 200, | |
118 | + fixed: 'right' | |
112 | 119 | } |
113 | 120 | ], |
114 | 121 | columns2: [ | ... | ... |
src/components/table/mixin.js
... | ... | @@ -32,8 +32,17 @@ export default { |
32 | 32 | } |
33 | 33 | // when fixed type,reset first right fixed column's width |
34 | 34 | if (this.fixed === 'right' && top ) { |
35 | - //const firstFixedIndex = this.columns.findIndex((col) => col.fixed === 'right'); | |
36 | - if (this.columns.length === index + 1) { | |
35 | + //const firstFixedIndex = this.columns.lastIndexOf((col) => col.fixed === 'right'); | |
36 | + let lastFixedIndex = -1; | |
37 | + for(let i=0;i<this.columns.length;i++){ | |
38 | + if(this.columns[i].fixed==='right'){ | |
39 | + lastFixedIndex = i; | |
40 | + } | |
41 | + else{ | |
42 | + break; | |
43 | + } | |
44 | + } | |
45 | + if (lastFixedIndex === index) { | |
37 | 46 | let scrollBarWidth = this.$parent.scrollBarWidth; |
38 | 47 | if (!this.$parent.showVerticalScrollBar) scrollBarWidth = 0; |
39 | 48 | width += scrollBarWidth; | ... | ... |
src/components/table/table.vue
... | ... | @@ -85,6 +85,7 @@ |
85 | 85 | :obj-data="objData"></table-body> |
86 | 86 | </div> |
87 | 87 | </div> |
88 | + <div :class="[prefixCls + '-fixed-right-header']" :style="fixedRightHeaderStyle" v-if="isRightFixed"></div> | |
88 | 89 | <div :class="[prefixCls + '-footer']" v-if="showSlotFooter" ref="footer"><slot name="footer"></slot></div> |
89 | 90 | </div> |
90 | 91 | <Spin fix size="large" v-if="loading"> |
... | ... | @@ -199,7 +200,8 @@ |
199 | 200 | cloneData: deepCopy(this.data), // when Cell has a button to delete row data, clickCurrentRow will throw an error, so clone a data |
200 | 201 | showVerticalScrollBar:false, |
201 | 202 | showHorizontalScrollBar:false, |
202 | - headerWidth:0 | |
203 | + headerWidth:0, | |
204 | + headerHeight:0, | |
203 | 205 | }; |
204 | 206 | }, |
205 | 207 | computed: { |
... | ... | @@ -293,6 +295,17 @@ |
293 | 295 | style.right = `${this.showVerticalScrollBar?this.scrollBarWidth:0}px`; |
294 | 296 | return style; |
295 | 297 | }, |
298 | + fixedRightHeaderStyle () { | |
299 | + let style = {}; | |
300 | + let width = 0; | |
301 | + let height = this.headerHeight+1; | |
302 | + if(this.showVerticalScrollBar){ | |
303 | + width = this.scrollBarWidth; | |
304 | + } | |
305 | + style.width = `${width}px`; | |
306 | + style.height = `${height}px`; | |
307 | + return style; | |
308 | + }, | |
296 | 309 | bodyStyle () { |
297 | 310 | let style = {}; |
298 | 311 | if (this.bodyHeight !== 0) { |
... | ... | @@ -345,6 +358,7 @@ |
345 | 358 | this.columnsWidth = {}; |
346 | 359 | this.$nextTick(()=>{ |
347 | 360 | this.headerWidth = this.$refs.header.childNodes[0].offsetWidth; |
361 | + this.headerHeight = this.$refs.header.childNodes[0].offsetHeight; | |
348 | 362 | if (!this.$refs.tbody) { |
349 | 363 | this.showVerticalScrollBar = false; |
350 | 364 | return; | ... | ... |
src/styles/components/table.less
... | ... | @@ -288,6 +288,14 @@ |
288 | 288 | right: 0; |
289 | 289 | box-shadow: -2px 0 6px -2px rgba(0, 0, 0, 0.2); |
290 | 290 | } |
291 | + &-fixed-right-header{ | |
292 | + position: absolute; | |
293 | + top: -1px; | |
294 | + right: 0; | |
295 | + background-color: @table-thead-bg; | |
296 | + border-top: 1px solid @border-color-base; | |
297 | + border-bottom: 1px solid @border-color-split; | |
298 | + } | |
291 | 299 | &-fixed-header{ |
292 | 300 | overflow: hidden; |
293 | 301 | &-with-empty{ | ... | ... |