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 | <template> | 1 | <template> |
| 2 | <div :class="classes" :style="styles"> | 2 | <div :class="classes" :style="styles"> |
| 3 | <div :class="[prefixCls + '-title']" v-if="showSlotHeader" v-el:title><slot name="header"></slot></div> | 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 | <table cellspacing="0" cellpadding="0" border="0" :style="tableStyle"> | 5 | <table cellspacing="0" cellpadding="0" border="0" :style="tableStyle"> |
| 6 | <colgroup> | 6 | <colgroup> |
| 7 | <col v-for="column in cloneColumns" :width="setCellWidth(column, $index)"> | 7 | <col v-for="column in cloneColumns" :width="setCellWidth(column, $index)"> |
| @@ -13,7 +13,7 @@ | @@ -13,7 +13,7 @@ | ||
| 13 | :columns="cloneColumns"></thead> | 13 | :columns="cloneColumns"></thead> |
| 14 | </table> | 14 | </table> |
| 15 | </div> | 15 | </div> |
| 16 | - <div :class="[prefixCls + '-body']" :style="bodyStyle"> | 16 | + <div :class="[prefixCls + '-body']" :style="bodyStyle" @scroll="handleBodyScroll"> |
| 17 | <table cellspacing="0" cellpadding="0" border="0" :style="tableStyle" v-el:tbody> | 17 | <table cellspacing="0" cellpadding="0" border="0" :style="tableStyle" v-el:tbody> |
| 18 | <colgroup> | 18 | <colgroup> |
| 19 | <col v-for="column in cloneColumns" :width="setCellWidth(column, $index)"> | 19 | <col v-for="column in cloneColumns" :width="setCellWidth(column, $index)"> |
| @@ -168,15 +168,17 @@ | @@ -168,15 +168,17 @@ | ||
| 168 | } | 168 | } |
| 169 | this.$nextTick(() => { | 169 | this.$nextTick(() => { |
| 170 | this.columnsWidth = []; | 170 | this.columnsWidth = []; |
| 171 | - let autoWidthIndex = -1 | 171 | + let autoWidthIndex = -1; |
| 172 | if (allWidth) autoWidthIndex = this.cloneColumns.findIndex(cell => !cell.width); | 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 | } else { | 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,6 +271,14 @@ | ||
| 269 | this.rightFixedColumns = right; | 271 | this.rightFixedColumns = right; |
| 270 | this.centerColumns = center; | 272 | this.centerColumns = center; |
| 271 | this.cloneColumns = left.concat(center).concat(right); | 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 | compiled () { | 284 | compiled () { |
src/styles/components/table.less
| @@ -58,16 +58,14 @@ | @@ -58,16 +58,14 @@ | ||
| 58 | border-bottom: none; | 58 | border-bottom: none; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | + &-header{ | ||
| 62 | + overflow: hidden; | ||
| 63 | + } | ||
| 61 | &-body{ | 64 | &-body{ |
| 62 | - //overflow-x: hidden; | ||
| 63 | - //overflow-y: auto; | ||
| 64 | overflow: auto; | 65 | overflow: auto; |
| 65 | position: relative; | 66 | position: relative; |
| 66 | } | 67 | } |
| 67 | 68 | ||
| 68 | - &-with-fixed-top{ | ||
| 69 | - border-bottom: 1px solid @border-color-base; | ||
| 70 | - } | ||
| 71 | &-with-fixed-top&-with-footer{ | 69 | &-with-fixed-top&-with-footer{ |
| 72 | .@{table-prefix-cls}-footer{ | 70 | .@{table-prefix-cls}-footer{ |
| 73 | border-top: 1px solid @border-color-base; | 71 | border-top: 1px solid @border-color-base; |