Commit b3ef1c6358515d40e17eb162afd30fc427f0c885
1 parent
77201524
column add prop minValue and maxValue
Showing
2 changed files
with
75 additions
and
70 deletions
Show diff stats
examples/routers/table.vue
1 | <template> | 1 | <template> |
2 | <div> | 2 | <div> |
3 | - <!-- <br><br><br><br><br> | 3 | + <br><br><br><br><br> |
4 | <Table border :columns="columns1" height="500" :data="data1"></Table> | 4 | <Table border :columns="columns1" height="500" :data="data1"></Table> |
5 | - <br><br><br><br><br> --> | ||
6 | - <!--<Table width="550" height="200" border :columns="columns2" :data="data4"></Table>--> | 5 | + <Table border :columns="columns1" height='300'></Table> |
6 | + <!-- <br><br><br><br><br> --> | ||
7 | + <!-- <Table width="550" height="200" border :columns="columns2" :data="data4"></Table> --> | ||
7 | <!--<br><br><br><br><br>--> | 8 | <!--<br><br><br><br><br>--> |
8 | <!-- <Table border :columns="columns5" height="240" :data="data5"></Table> --> | 9 | <!-- <Table border :columns="columns5" height="240" :data="data5"></Table> --> |
9 | - <br><br><br><br><br> | 10 | + <!-- <br><br><br><br><br> --> |
10 | <!-- <Table border :columns="columns6" :data="data5"></Table> --> | 11 | <!-- <Table border :columns="columns6" :data="data5"></Table> --> |
11 | - <br><br><br><br><br> | ||
12 | - <!-- <Table border :columns="columns7" height="240" :data="data7"></Table> | ||
13 | - <br><br><br><br><br> --> | 12 | + <!-- <br><br><br><br><br> --> |
13 | + <Table border :columns="columns7" height="240" :data="data7"></Table> | ||
14 | + <!-- <br><br><br><br><br> --> | ||
14 | <Table border :columns="columns8" :data="data7" height="200"></Table> | 15 | <Table border :columns="columns8" :data="data7" height="200"></Table> |
16 | + <Table border :columns="columns8" height="200"></Table> | ||
15 | <br><br><br><br><br> | 17 | <br><br><br><br><br> |
16 | </div> | 18 | </div> |
17 | </template> | 19 | </template> |
@@ -24,7 +26,8 @@ | @@ -24,7 +26,8 @@ | ||
24 | title: 'Name', | 26 | title: 'Name', |
25 | key: 'name', | 27 | key: 'name', |
26 | align: 'center', | 28 | align: 'center', |
27 | - width: 200, | 29 | + minWidth: 100, |
30 | + maxWidth: 200, | ||
28 | fixed: 'left', | 31 | fixed: 'left', |
29 | filters: [ | 32 | filters: [ |
30 | { | 33 | { |
@@ -53,7 +56,8 @@ | @@ -53,7 +56,8 @@ | ||
53 | title: 'Age', | 56 | title: 'Age', |
54 | key: 'age', | 57 | key: 'age', |
55 | align: 'center', | 58 | align: 'center', |
56 | - width: 200, | 59 | + minWidth: 100, |
60 | + maxWidth: 200, | ||
57 | sortable: true | 61 | sortable: true |
58 | }, | 62 | }, |
59 | { | 63 | { |
@@ -64,7 +68,8 @@ | @@ -64,7 +68,8 @@ | ||
64 | title: 'Street', | 68 | title: 'Street', |
65 | key: 'street', | 69 | key: 'street', |
66 | align: 'center', | 70 | align: 'center', |
67 | - width: 200 | 71 | + minWidth: 100, |
72 | + maxWidth: 200, | ||
68 | }, | 73 | }, |
69 | { | 74 | { |
70 | title: 'Block', | 75 | title: 'Block', |
@@ -74,14 +79,16 @@ | @@ -74,14 +79,16 @@ | ||
74 | title: 'Building', | 79 | title: 'Building', |
75 | key: 'building', | 80 | key: 'building', |
76 | align: 'center', | 81 | align: 'center', |
77 | - width: 200, | 82 | + minWidth: 100, |
83 | + maxWidth: 200, | ||
78 | sortable: true | 84 | sortable: true |
79 | }, | 85 | }, |
80 | { | 86 | { |
81 | title: 'Door No.', | 87 | title: 'Door No.', |
82 | key: 'door', | 88 | key: 'door', |
83 | align: 'center', | 89 | align: 'center', |
84 | - width: 200 | 90 | + minWidth: 100, |
91 | + maxWidth: 200, | ||
85 | } | 92 | } |
86 | ] | 93 | ] |
87 | } | 94 | } |
@@ -97,13 +104,15 @@ | @@ -97,13 +104,15 @@ | ||
97 | title: 'Company Address', | 104 | title: 'Company Address', |
98 | key: 'caddress', | 105 | key: 'caddress', |
99 | align: 'center', | 106 | align: 'center', |
100 | - width: 200 | 107 | + minWidth: 100, |
108 | + maxWidth: 200, | ||
101 | }, | 109 | }, |
102 | { | 110 | { |
103 | title: 'Company Name', | 111 | title: 'Company Name', |
104 | key: 'cname', | 112 | key: 'cname', |
105 | align: 'center', | 113 | align: 'center', |
106 | - width: 200 | 114 | + minWidth: 100, |
115 | + maxWidth: 200, | ||
107 | } | 116 | } |
108 | ] | 117 | ] |
109 | }, | 118 | }, |
@@ -118,7 +127,8 @@ | @@ -118,7 +127,8 @@ | ||
118 | title: 'Gender', | 127 | title: 'Gender', |
119 | key: 'gender', | 128 | key: 'gender', |
120 | align: 'center', | 129 | align: 'center', |
121 | - width: 200, | 130 | + minWidth: 100, |
131 | + maxWidth: 200, | ||
122 | fixed: 'right' | 132 | fixed: 'right' |
123 | } | 133 | } |
124 | ], | 134 | ], |
src/components/table/table.vue
@@ -251,7 +251,7 @@ | @@ -251,7 +251,7 @@ | ||
251 | styles () { | 251 | styles () { |
252 | let style = {}; | 252 | let style = {}; |
253 | if (this.height) { | 253 | if (this.height) { |
254 | - const height = (this.isLeftFixed || this.isRightFixed) ? parseInt(this.height) + this.scrollBarWidth : parseInt(this.height); | 254 | + const height = parseInt(this.height); |
255 | style.height = `${height}px`; | 255 | style.height = `${height}px`; |
256 | } | 256 | } |
257 | if (this.width) style.width = `${this.width}px`; | 257 | if (this.width) style.width = `${this.width}px`; |
@@ -318,8 +318,7 @@ | @@ -318,8 +318,7 @@ | ||
318 | bodyStyle () { | 318 | bodyStyle () { |
319 | let style = {}; | 319 | let style = {}; |
320 | if (this.bodyHeight !== 0) { | 320 | if (this.bodyHeight !== 0) { |
321 | - // add a height to resolve scroll bug when browser has a scrollBar in fixed type and height prop | ||
322 | - const height = (this.isLeftFixed || this.isRightFixed) ? this.bodyHeight + this.scrollBarWidth : this.bodyHeight; | 321 | + const height = this.bodyHeight; |
323 | style.height = `${height}px`; | 322 | style.height = `${height}px`; |
324 | } | 323 | } |
325 | return style; | 324 | return style; |
@@ -327,15 +326,8 @@ | @@ -327,15 +326,8 @@ | ||
327 | fixedBodyStyle () { | 326 | fixedBodyStyle () { |
328 | let style = {}; | 327 | let style = {}; |
329 | if (this.bodyHeight !== 0) { | 328 | if (this.bodyHeight !== 0) { |
330 | - let height = this.bodyHeight + (!this.showHorizontalScrollBar?this.scrollBarWidth:0) - 1; | ||
331 | - | ||
332 | - // #2102 ้๏ผๅฆๆ Table ๆฒกๆ่ฎพ็ฝฎ width๏ผ่ๆฏ้ๆ็ถ็บง็ width๏ผๅบๅฎๅไนๅบ่ฏฅไธๅ ๅซๆปๅจๆก้ซๅบฆ๏ผๆไปฅ่ฟ้็ดๆฅ่ฎก็ฎ่กจๆ ผๅฎฝๅบฆ | ||
333 | - const tableWidth = parseInt(getStyle(this.$el, 'width')) - 1; | ||
334 | - if ((this.width && this.width < this.tableWidth) || tableWidth < this.tableWidth+(this.showVerticalScrollBar?this.scrollBarWidth:0)){ | ||
335 | - height = this.bodyHeight; | ||
336 | - } | ||
337 | -// style.height = this.scrollBarWidth > 0 ? `${this.bodyHeight}px` : `${this.bodyHeight - 1}px`; | ||
338 | - style.height = this.scrollBarWidth > 0 ? `${height}px` : `${height - 1}px`; | 329 | + let height = this.bodyHeight - (this.showHorizontalScrollBar?this.scrollBarWidth:0); |
330 | + style.height = this.showHorizontalScrollBar ? `${height}px` : `${height - 1}px`; | ||
339 | } | 331 | } |
340 | return style; | 332 | return style; |
341 | }, | 333 | }, |
@@ -365,14 +357,6 @@ | @@ -365,14 +357,6 @@ | ||
365 | this.tableWidth = parseInt(getStyle(this.$el, 'width')) - 1; | 357 | this.tableWidth = parseInt(getStyle(this.$el, 'width')) - 1; |
366 | } | 358 | } |
367 | this.columnsWidth = {}; | 359 | this.columnsWidth = {}; |
368 | - this.$nextTick(()=>{ | ||
369 | - this.headerWidth = this.$refs.header.childNodes[0].offsetWidth; | ||
370 | - this.headerHeight = this.$refs.header.childNodes[0].offsetHeight; | ||
371 | - if (!this.$refs.tbody) { | ||
372 | - this.showVerticalScrollBar = false; | ||
373 | - return; | ||
374 | - } | ||
375 | - }); | ||
376 | this.$nextTick(() => { | 360 | this.$nextTick(() => { |
377 | let columnsWidth = {}; | 361 | let columnsWidth = {}; |
378 | 362 | ||
@@ -393,6 +377,7 @@ | @@ -393,6 +377,7 @@ | ||
393 | maxWidthColumns.push(col); | 377 | maxWidthColumns.push(col); |
394 | } | 378 | } |
395 | } | 379 | } |
380 | + col._width = null; | ||
396 | }); | 381 | }); |
397 | 382 | ||
398 | minWidthColumns.sort((a,b)=>a.minWidth > b.minWidth); | 383 | minWidthColumns.sort((a,b)=>a.minWidth > b.minWidth); |
@@ -405,6 +390,7 @@ | @@ -405,6 +390,7 @@ | ||
405 | 390 | ||
406 | for (let i = 0; i < maxWidthColumns.length; i++) { | 391 | for (let i = 0; i < maxWidthColumns.length; i++) { |
407 | if(columnWidth > maxWidthColumns[i].maxWidth){ | 392 | if(columnWidth > maxWidthColumns[i].maxWidth){ |
393 | + maxWidthColumns[i]._width = maxWidthColumns[i].maxWidth; | ||
408 | usableWidth -= maxWidthColumns[i].maxWidth; | 394 | usableWidth -= maxWidthColumns[i].maxWidth; |
409 | usableLength--; | 395 | usableLength--; |
410 | columnWidth = parseInt(usableWidth / usableLength); | 396 | columnWidth = parseInt(usableWidth / usableLength); |
@@ -412,7 +398,8 @@ | @@ -412,7 +398,8 @@ | ||
412 | } | 398 | } |
413 | 399 | ||
414 | for (let i = 0; i < minWidthColumns.length; i++) { | 400 | for (let i = 0; i < minWidthColumns.length; i++) { |
415 | - if(columnWidth < minWidthColumns[i].minWidth){ | 401 | + if(columnWidth < minWidthColumns[i].minWidth && !minWidthColumns[i].width){ |
402 | + minWidthColumns[i]._width = minWidthColumns[i].minWidth; | ||
416 | usableWidth -= minWidthColumns[i].minWidth; | 403 | usableWidth -= minWidthColumns[i].minWidth; |
417 | usableLength--; | 404 | usableLength--; |
418 | columnWidth = parseInt(usableWidth / usableLength); | 405 | columnWidth = parseInt(usableWidth / usableLength); |
@@ -430,7 +417,10 @@ | @@ -430,7 +417,10 @@ | ||
430 | width = column.width; | 417 | width = column.width; |
431 | } | 418 | } |
432 | else{ | 419 | else{ |
433 | - if (column.minWidth > width){ | 420 | + if(column._width){ |
421 | + width = column._width; | ||
422 | + } | ||
423 | + else if (column.minWidth > width){ | ||
434 | width = column.minWidth; | 424 | width = column.minWidth; |
435 | } | 425 | } |
436 | else if (column.maxWidth < width){ | 426 | else if (column.maxWidth < width){ |
@@ -445,7 +435,6 @@ | @@ -445,7 +435,6 @@ | ||
445 | } | 435 | } |
446 | } | 436 | } |
447 | 437 | ||
448 | - | ||
449 | this.cloneColumns[i]._width = width; | 438 | this.cloneColumns[i]._width = width; |
450 | 439 | ||
451 | columnsWidth[column._index] = { | 440 | columnsWidth[column._index] = { |
@@ -453,37 +442,11 @@ | @@ -453,37 +442,11 @@ | ||
453 | }; | 442 | }; |
454 | 443 | ||
455 | } | 444 | } |
456 | - this.tableWidth = this.cloneColumns.map(cell => cell._width).reduce((a, b) => a + b, 0); | 445 | + //this.tableWidth = this.cloneColumns.map(cell => cell._width).reduce((a, b) => a + b, 0); |
457 | this.columnsWidth = columnsWidth; | 446 | this.columnsWidth = columnsWidth; |
458 | this.$nextTick(()=>{ | 447 | this.$nextTick(()=>{ |
459 | this.fixedHeader(); | 448 | this.fixedHeader(); |
460 | - if (this.$refs.tbody) { | ||
461 | - let bodyContentEl = this.$refs.tbody.$el; | ||
462 | - let bodyEl = bodyContentEl.parentElement; | ||
463 | - let bodyContentHeight = bodyContentEl.offsetHeight; | ||
464 | - let bodyContentWidth = bodyContentEl.offsetWidth; | ||
465 | - let bodyWidth = bodyEl.offsetWidth; | ||
466 | - let bodyHeight = bodyEl.offsetHeight; | ||
467 | - let scrollBarWidth = 0; | ||
468 | - if (bodyWidth < bodyContentWidth + (bodyHeight<bodyContentHeight?this.scrollBarWidth : 0)) { | ||
469 | - scrollBarWidth = this.scrollBarWidth; | ||
470 | - } | ||
471 | - | ||
472 | - this.showVerticalScrollBar = this.bodyHeight? bodyHeight - scrollBarWidth < bodyContentHeight : false; | ||
473 | - this.showHorizontalScrollBar = bodyWidth < bodyContentWidth + (this.showVerticalScrollBar?this.scrollBarWidth:0); | ||
474 | - | ||
475 | - if(this.showVerticalScrollBar){ | ||
476 | - bodyEl.classList.add(this.prefixCls +'-overflowY'); | ||
477 | - }else{ | ||
478 | - bodyEl.classList.remove(this.prefixCls +'-overflowY'); | ||
479 | - } | ||
480 | - if(this.showHorizontalScrollBar){ | ||
481 | - bodyEl.classList.add(this.prefixCls +'-overflowX'); | ||
482 | - }else{ | ||
483 | - bodyEl.classList.remove(this.prefixCls +'-overflowX'); | ||
484 | - } | ||
485 | - this.tableWidth = this.cloneColumns.map(cell => cell._width).reduce((a, b) => a + b, 0) + (this.showVerticalScrollBar?this.scrollBarWidth:0); | ||
486 | - } | 449 | + |
487 | }); | 450 | }); |
488 | }); | 451 | }); |
489 | // get table real height,for fixed when set height prop,but height < table's height,show scrollBarWidth | 452 | // get table real height,for fixed when set height prop,but height < table's height,show scrollBarWidth |
@@ -596,11 +559,44 @@ | @@ -596,11 +559,44 @@ | ||
596 | const headerHeight = parseInt(getStyle(this.$refs.header, 'height')) || 0; | 559 | const headerHeight = parseInt(getStyle(this.$refs.header, 'height')) || 0; |
597 | const footerHeight = parseInt(getStyle(this.$refs.footer, 'height')) || 0; | 560 | const footerHeight = parseInt(getStyle(this.$refs.footer, 'height')) || 0; |
598 | this.bodyHeight = this.height - titleHeight - headerHeight - footerHeight; | 561 | this.bodyHeight = this.height - titleHeight - headerHeight - footerHeight; |
562 | + this.fixedBody(); | ||
599 | }); | 563 | }); |
600 | } else { | 564 | } else { |
601 | this.bodyHeight = 0; | 565 | this.bodyHeight = 0; |
566 | + this.fixedBody(); | ||
602 | } | 567 | } |
603 | }, | 568 | }, |
569 | + fixedBody (){ | ||
570 | + this.headerWidth = this.$refs.header.childNodes[0].offsetWidth; | ||
571 | + this.headerHeight = this.$refs.header.childNodes[0].offsetHeight; | ||
572 | + this.showHorizontalScrollBar = this.headerWidth>this.$refs.header.parentElement.offsetWidth; | ||
573 | + if (!this.$refs.tbody) { | ||
574 | + this.showVerticalScrollBar = false; | ||
575 | + return; | ||
576 | + } | ||
577 | + else{ | ||
578 | + let bodyContentEl = this.$refs.tbody.$el; | ||
579 | + let bodyEl = bodyContentEl.parentElement; | ||
580 | + let bodyContentHeight = bodyContentEl.offsetHeight; | ||
581 | + let bodyHeight = bodyEl.offsetHeight; | ||
582 | + let scrollBarWidth = 0; | ||
583 | + | ||
584 | + this.showVerticalScrollBar = this.bodyHeight? bodyHeight - (this.showHorizontalScrollBar?this.scrollBarWidth:0) < bodyContentHeight : false; | ||
585 | + | ||
586 | + if(this.showVerticalScrollBar){ | ||
587 | + bodyEl.classList.add(this.prefixCls +'-overflowY'); | ||
588 | + }else{ | ||
589 | + bodyEl.classList.remove(this.prefixCls +'-overflowY'); | ||
590 | + } | ||
591 | + if(this.showHorizontalScrollBar){ | ||
592 | + bodyEl.classList.add(this.prefixCls +'-overflowX'); | ||
593 | + }else{ | ||
594 | + bodyEl.classList.remove(this.prefixCls +'-overflowX'); | ||
595 | + } | ||
596 | + this.tableWidth = this.cloneColumns.map(cell => cell._width).reduce((a, b) => a + b, 0) + (this.showVerticalScrollBar?this.scrollBarWidth:0); | ||
597 | + } | ||
598 | + }, | ||
599 | + | ||
604 | hideColumnFilter () { | 600 | hideColumnFilter () { |
605 | this.cloneColumns.forEach((col) => col._filterVisible = false); | 601 | this.cloneColumns.forEach((col) => col._filterVisible = false); |
606 | }, | 602 | }, |
@@ -901,7 +897,6 @@ | @@ -901,7 +897,6 @@ | ||
901 | }, | 897 | }, |
902 | mounted () { | 898 | mounted () { |
903 | this.handleResize(); | 899 | this.handleResize(); |
904 | - this.fixedHeader(); | ||
905 | this.$nextTick(() => this.ready = true); | 900 | this.$nextTick(() => this.ready = true); |
906 | 901 | ||
907 | on(window, 'resize', this.handleResize); | 902 | on(window, 'resize', this.handleResize); |
@@ -911,7 +906,6 @@ | @@ -911,7 +906,6 @@ | ||
911 | this.$on('on-visible-change', (val) => { | 906 | this.$on('on-visible-change', (val) => { |
912 | if (val) { | 907 | if (val) { |
913 | this.handleResize(); | 908 | this.handleResize(); |
914 | - this.fixedHeader(); | ||
915 | } | 909 | } |
916 | }); | 910 | }); |
917 | }, | 911 | }, |
@@ -951,11 +945,12 @@ | @@ -951,11 +945,12 @@ | ||
951 | }, | 945 | }, |
952 | height () { | 946 | height () { |
953 | this.handleResize(); | 947 | this.handleResize(); |
954 | - this.fixedHeader(); | ||
955 | }, | 948 | }, |
956 | showHorizontalScrollBar () { | 949 | showHorizontalScrollBar () { |
957 | this.handleResize(); | 950 | this.handleResize(); |
958 | - this.fixedHeader(); | 951 | + }, |
952 | + showVerticalScrollBar () { | ||
953 | + this.handleResize(); | ||
959 | } | 954 | } |
960 | } | 955 | } |
961 | }; | 956 | }; |