Commit 192e2cb849440a4259d8bb1089c4edbe57e7648d
1 parent
a3547c1b
update Table
update Table
Showing
2 changed files
with
21 additions
and
13 deletions
Show diff stats
src/components/table/table.vue
| 1 | 1 | <template> |
| 2 | 2 | <div :class="classes" :style="styles"> |
| 3 | 3 | <div :class="[prefixCls + '-title']" v-if="showSlotHeader" v-el:title><slot name="header"></slot></div> |
| 4 | - <div :class="[prefixCls + '-header']" v-if="showHeader" v-el:header> | |
| 4 | + <div :class="[prefixCls + '-header']" v-if="showHeader" v-el:header @mousewheel="handleMouseWheel"> | |
| 5 | 5 | <table cellspacing="0" cellpadding="0" border="0" :style="tableStyle"> |
| 6 | 6 | <colgroup> |
| 7 | 7 | <col v-for="column in cloneColumns" :width="setCellWidth(column, $index)"> |
| ... | ... | @@ -13,7 +13,7 @@ |
| 13 | 13 | :columns="cloneColumns"></thead> |
| 14 | 14 | </table> |
| 15 | 15 | </div> |
| 16 | - <div :class="[prefixCls + '-body']" :style="bodyStyle"> | |
| 16 | + <div :class="[prefixCls + '-body']" :style="bodyStyle" @scroll="handleBodyScroll"> | |
| 17 | 17 | <table cellspacing="0" cellpadding="0" border="0" :style="tableStyle" v-el:tbody> |
| 18 | 18 | <colgroup> |
| 19 | 19 | <col v-for="column in cloneColumns" :width="setCellWidth(column, $index)"> |
| ... | ... | @@ -168,15 +168,17 @@ |
| 168 | 168 | } |
| 169 | 169 | this.$nextTick(() => { |
| 170 | 170 | this.columnsWidth = []; |
| 171 | - let autoWidthIndex = -1 | |
| 171 | + let autoWidthIndex = -1; | |
| 172 | 172 | if (allWidth) autoWidthIndex = this.cloneColumns.findIndex(cell => !cell.width); |
| 173 | - this.$els.tbody.querySelectorAll('tbody tr')[0].querySelectorAll('td').forEach((cell, index) => { | |
| 174 | - if (index === autoWidthIndex) { | |
| 175 | - this.columnsWidth.push(parseInt(getStyle(cell, 'width')) - 1); | |
| 173 | + | |
| 174 | + const $td = this.$els.tbody.querySelectorAll('tbody tr')[0].querySelectorAll('td'); | |
| 175 | + for (let i = 0; i < $td.length; i++) { // can not use forEach in Firefox | |
| 176 | + if (i === autoWidthIndex) { | |
| 177 | + this.columnsWidth.push(parseInt(getStyle($td[i], 'width')) - 1); | |
| 176 | 178 | } else { |
| 177 | - this.columnsWidth.push(parseInt(getStyle(cell, 'width'))); | |
| 179 | + this.columnsWidth.push(parseInt(getStyle($td[i], 'width'))); | |
| 178 | 180 | } |
| 179 | - }); | |
| 181 | + } | |
| 180 | 182 | }); |
| 181 | 183 | }); |
| 182 | 184 | }, |
| ... | ... | @@ -269,6 +271,14 @@ |
| 269 | 271 | this.rightFixedColumns = right; |
| 270 | 272 | this.centerColumns = center; |
| 271 | 273 | this.cloneColumns = left.concat(center).concat(right); |
| 274 | + }, | |
| 275 | + handleBodyScroll (event) { | |
| 276 | + this.$els.header.scrollLeft = event.target.scrollLeft; | |
| 277 | + | |
| 278 | + // todo 固定时上下滚动,固定的表头也滚动 scrollTop | |
| 279 | + }, | |
| 280 | + handleMouseWheel () { | |
| 281 | + console.log(111) | |
| 272 | 282 | } |
| 273 | 283 | }, |
| 274 | 284 | compiled () { | ... | ... |
src/styles/components/table.less
| ... | ... | @@ -58,16 +58,14 @@ |
| 58 | 58 | border-bottom: none; |
| 59 | 59 | } |
| 60 | 60 | |
| 61 | + &-header{ | |
| 62 | + overflow: hidden; | |
| 63 | + } | |
| 61 | 64 | &-body{ |
| 62 | - //overflow-x: hidden; | |
| 63 | - //overflow-y: auto; | |
| 64 | 65 | overflow: auto; |
| 65 | 66 | position: relative; |
| 66 | 67 | } |
| 67 | 68 | |
| 68 | - &-with-fixed-top{ | |
| 69 | - border-bottom: 1px solid @border-color-base; | |
| 70 | - } | |
| 71 | 69 | &-with-fixed-top&-with-footer{ |
| 72 | 70 | .@{table-prefix-cls}-footer{ |
| 73 | 71 | border-top: 1px solid @border-color-base; | ... | ... |