Commit b8a4300003832a49462738263ab29a582a805ee7
1 parent
340681ab
update Table
update Table
Showing
3 changed files
with
63 additions
and
35 deletions
Show diff stats
src/components/table/table.vue
@@ -18,35 +18,42 @@ | @@ -18,35 +18,42 @@ | ||
18 | :clone-data="cloneData"></table-body> | 18 | :clone-data="cloneData"></table-body> |
19 | </div> | 19 | </div> |
20 | <div :class="[prefixCls + '-fixed']"> | 20 | <div :class="[prefixCls + '-fixed']"> |
21 | - <!--todo 设置个div头部--> | ||
22 | - <table-head | ||
23 | - fixed | ||
24 | - :prefix-cls="prefixCls" | ||
25 | - :style="fixedTableStyle" | ||
26 | - :columns="leftFixedColumns" | ||
27 | - :clone-data="cloneData"></table-head> | ||
28 | - <table-body | ||
29 | - fixed | ||
30 | - :prefix-cls="prefixCls" | ||
31 | - :style="fixedTableStyle" | ||
32 | - :columns="leftFixedColumns" | ||
33 | - :data="data" | ||
34 | - :clone-data="cloneData"></table-body> | 21 | + <div :class="[prefixCls + '-fixed-header']" v-if="showHeader"> |
22 | + <table-head | ||
23 | + fixed | ||
24 | + :prefix-cls="prefixCls" | ||
25 | + :style="fixedTableStyle" | ||
26 | + :columns="leftFixedColumns" | ||
27 | + :clone-data="cloneData"></table-head> | ||
28 | + </div> | ||
29 | + <div :class="[prefixCls + '-fixed-body']" :style="fixedBodyStyle" v-el:fixed-body> | ||
30 | + <table-body | ||
31 | + fixed | ||
32 | + :prefix-cls="prefixCls" | ||
33 | + :style="fixedTableStyle" | ||
34 | + :columns="leftFixedColumns" | ||
35 | + :data="data" | ||
36 | + :clone-data="cloneData"></table-body> | ||
37 | + </div> | ||
35 | </div> | 38 | </div> |
36 | <div :class="[prefixCls + '-fixed-right']"> | 39 | <div :class="[prefixCls + '-fixed-right']"> |
37 | - <table-head | ||
38 | - fixed | ||
39 | - :prefix-cls="prefixCls" | ||
40 | - :style="fixedRightTableStyle" | ||
41 | - :columns="rightFixedColumns" | ||
42 | - :clone-data="cloneData"></table-head> | ||
43 | - <table-body | ||
44 | - fixed | ||
45 | - :prefix-cls="prefixCls" | ||
46 | - :style="fixedRightTableStyle" | ||
47 | - :columns="rightFixedColumns" | ||
48 | - :data="data" | ||
49 | - :clone-data="cloneData"></table-body> | 40 | + <div :class="[prefixCls + '-fixed-header']" v-if="showHeader"> |
41 | + <table-head | ||
42 | + fixed | ||
43 | + :prefix-cls="prefixCls" | ||
44 | + :style="fixedRightTableStyle" | ||
45 | + :columns="rightFixedColumns" | ||
46 | + :clone-data="cloneData"></table-head> | ||
47 | + </div> | ||
48 | + <div :class="[prefixCls + '-fixed-body']" :style="fixedBodyStyle" v-el:fixed-right-body> | ||
49 | + <table-body | ||
50 | + fixed | ||
51 | + :prefix-cls="prefixCls" | ||
52 | + :style="fixedRightTableStyle" | ||
53 | + :columns="rightFixedColumns" | ||
54 | + :data="data" | ||
55 | + :clone-data="cloneData"></table-body> | ||
56 | + </div> | ||
50 | </div> | 57 | </div> |
51 | <div :class="[prefixCls + '-footer']" v-if="showSlotFooter" v-el:footer><slot name="footer"></slot></div> | 58 | <div :class="[prefixCls + '-footer']" v-if="showSlotFooter" v-el:footer><slot name="footer"></slot></div> |
52 | </div> | 59 | </div> |
@@ -161,6 +168,11 @@ | @@ -161,6 +168,11 @@ | ||
161 | let style = {}; | 168 | let style = {}; |
162 | if (this.bodyHeight !== 0) style.height = `${this.bodyHeight}px`; | 169 | if (this.bodyHeight !== 0) style.height = `${this.bodyHeight}px`; |
163 | return style; | 170 | return style; |
171 | + }, | ||
172 | + fixedBodyStyle () { | ||
173 | + let style = {}; | ||
174 | + if (this.bodyHeight !== 0) style.height = `${this.bodyHeight - 1}px`; | ||
175 | + return style; | ||
164 | } | 176 | } |
165 | }, | 177 | }, |
166 | methods: { | 178 | methods: { |
@@ -179,7 +191,6 @@ | @@ -179,7 +191,6 @@ | ||
179 | this.columnsWidth = []; | 191 | this.columnsWidth = []; |
180 | let autoWidthIndex = -1; | 192 | let autoWidthIndex = -1; |
181 | if (allWidth) autoWidthIndex = this.cloneColumns.findIndex(cell => !cell.width); | 193 | if (allWidth) autoWidthIndex = this.cloneColumns.findIndex(cell => !cell.width); |
182 | - console.log(1) | ||
183 | 194 | ||
184 | const $td = this.$refs.tbody.$el.querySelectorAll('tbody tr')[0].querySelectorAll('td'); | 195 | const $td = this.$refs.tbody.$el.querySelectorAll('tbody tr')[0].querySelectorAll('td'); |
185 | for (let i = 0; i < $td.length; i++) { // can not use forEach in Firefox | 196 | for (let i = 0; i < $td.length; i++) { // can not use forEach in Firefox |
@@ -291,9 +302,9 @@ | @@ -291,9 +302,9 @@ | ||
291 | this.cloneColumns = left.concat(center).concat(right); | 302 | this.cloneColumns = left.concat(center).concat(right); |
292 | }, | 303 | }, |
293 | handleBodyScroll (event) { | 304 | handleBodyScroll (event) { |
294 | - this.$els.header.scrollLeft = event.target.scrollLeft; | ||
295 | - | ||
296 | - // todo 固定时上下滚动,固定的表头也滚动 scrollTop | 305 | + if (this.showHeader) this.$els.header.scrollLeft = event.target.scrollLeft; |
306 | + if (this.leftFixedColumns.length) this.$els.fixedBody.scrollTop = event.target.scrollTop; | ||
307 | + if (this.rightFixedColumns.length) this.$els.fixedRightBody.scrollTop = event.target.scrollTop; | ||
297 | }, | 308 | }, |
298 | handleMouseWheel (event) { | 309 | handleMouseWheel (event) { |
299 | const deltaX = event.deltaX; | 310 | const deltaX = event.deltaX; |
src/styles/components/table.less
@@ -33,7 +33,7 @@ | @@ -33,7 +33,7 @@ | ||
33 | top: 0; | 33 | top: 0; |
34 | right: 0; | 34 | right: 0; |
35 | background-color: @border-color-base; | 35 | background-color: @border-color-base; |
36 | - z-index: 1; | 36 | + z-index: 3; |
37 | } | 37 | } |
38 | 38 | ||
39 | &-with-header{ | 39 | &-with-header{ |
@@ -140,7 +140,9 @@ | @@ -140,7 +140,9 @@ | ||
140 | vertical-align: middle; | 140 | vertical-align: middle; |
141 | } | 141 | } |
142 | 142 | ||
143 | - &-stripe &-body{ | 143 | + &-stripe &-body, |
144 | + &-stripe &-fixed-body | ||
145 | + { | ||
144 | tr:nth-child(2n) { | 146 | tr:nth-child(2n) { |
145 | td{ | 147 | td{ |
146 | background-color: @table-td-stripe-bg; | 148 | background-color: @table-td-stripe-bg; |
@@ -183,7 +185,8 @@ | @@ -183,7 +185,8 @@ | ||
183 | 185 | ||
184 | &-row-highlight, | 186 | &-row-highlight, |
185 | tr&-row-highlight&-row-hover, | 187 | tr&-row-highlight&-row-hover, |
186 | - &-stripe &-body tr&-row-highlight:nth-child(2n) | 188 | + &-stripe &-body tr&-row-highlight:nth-child(2n), |
189 | + &-stripe &-fixed-body tr&-row-highlight:nth-child(2n) | ||
187 | { | 190 | { |
188 | td{ | 191 | td{ |
189 | background-color: @table-td-highlight-bg; | 192 | background-color: @table-td-highlight-bg; |
@@ -214,4 +217,14 @@ | @@ -214,4 +217,14 @@ | ||
214 | right: 0; | 217 | right: 0; |
215 | box-shadow: -1px 0 8px #d3d4d6; | 218 | box-shadow: -1px 0 8px #d3d4d6; |
216 | } | 219 | } |
220 | + &-fixed-header{ | ||
221 | + overflow: hidden; | ||
222 | + position: relative; | ||
223 | + z-index: 3; | ||
224 | + } | ||
225 | + &-fixed-body{ | ||
226 | + overflow: hidden; | ||
227 | + position: relative; | ||
228 | + z-index: 3; | ||
229 | + } | ||
217 | } | 230 | } |
218 | \ No newline at end of file | 231 | \ No newline at end of file |
test/routers/table.vue
@@ -9,7 +9,10 @@ | @@ -9,7 +9,10 @@ | ||
9 | <br> | 9 | <br> |
10 | <i-table | 10 | <i-table |
11 | width="450" | 11 | width="450" |
12 | - border | 12 | + height="200" |
13 | + stripe | ||
14 | + highlight-row | ||
15 | + :show-header="true" | ||
13 | :columns="columns" | 16 | :columns="columns" |
14 | :data="data" | 17 | :data="data" |
15 | :row-class-name="rowClsName" | 18 | :row-class-name="rowClsName" |
@@ -61,6 +64,7 @@ | @@ -61,6 +64,7 @@ | ||
61 | title: '地址', | 64 | title: '地址', |
62 | key: 'address', | 65 | key: 'address', |
63 | align: 'center', | 66 | align: 'center', |
67 | +// fixed: 'right', | ||
64 | width: 100, | 68 | width: 100, |
65 | // render (row, column, index) { | 69 | // render (row, column, index) { |
66 | // if (row.edit) { | 70 | // if (row.edit) { |