vxe-table 4.17.0-beta.8 → 4.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/style.css +1 -1
  4. package/es/style.min.css +1 -1
  5. package/es/table/module/keyboard/hook.js +4 -26
  6. package/es/table/module/menu/hook.js +2 -2
  7. package/es/table/src/body.js +3 -0
  8. package/es/table/src/footer.js +2 -0
  9. package/es/table/src/header.js +3 -0
  10. package/es/table/src/table.js +73 -15
  11. package/es/table/src/util.js +3 -3
  12. package/es/table/style.css +19 -0
  13. package/es/table/style.min.css +1 -1
  14. package/es/ui/index.js +1 -1
  15. package/es/ui/src/log.js +1 -1
  16. package/es/ui/src/utils.js +6 -5
  17. package/es/vxe-table/style.css +19 -0
  18. package/es/vxe-table/style.min.css +1 -1
  19. package/helper/vetur/attributes.json +1 -1
  20. package/helper/vetur/tags.json +1 -1
  21. package/lib/index.css +1 -1
  22. package/lib/index.min.css +1 -1
  23. package/lib/index.umd.js +41 -48
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/style.css +1 -1
  26. package/lib/style.min.css +1 -1
  27. package/lib/table/module/keyboard/hook.js +3 -28
  28. package/lib/table/module/keyboard/hook.min.js +1 -1
  29. package/lib/table/module/menu/hook.js +2 -0
  30. package/lib/table/module/menu/hook.min.js +1 -1
  31. package/lib/table/src/body.js +3 -0
  32. package/lib/table/src/body.min.js +1 -1
  33. package/lib/table/src/footer.js +2 -0
  34. package/lib/table/src/footer.min.js +1 -1
  35. package/lib/table/src/header.js +3 -0
  36. package/lib/table/src/header.min.js +1 -1
  37. package/lib/table/src/table.js +12 -7
  38. package/lib/table/src/table.min.js +1 -1
  39. package/lib/table/src/util.js +3 -3
  40. package/lib/table/src/util.min.js +1 -1
  41. package/lib/table/style/style.css +19 -0
  42. package/lib/table/style/style.min.css +1 -1
  43. package/lib/ui/index.js +1 -1
  44. package/lib/ui/index.min.js +1 -1
  45. package/lib/ui/src/log.js +1 -1
  46. package/lib/ui/src/log.min.js +1 -1
  47. package/lib/ui/src/utils.js +8 -5
  48. package/lib/ui/src/utils.min.js +1 -1
  49. package/lib/vxe-table/style/style.css +19 -0
  50. package/lib/vxe-table/style/style.min.css +1 -1
  51. package/package.json +1 -1
  52. package/packages/table/module/keyboard/hook.ts +4 -28
  53. package/packages/table/module/menu/hook.ts +2 -2
  54. package/packages/table/src/body.ts +3 -0
  55. package/packages/table/src/footer.ts +2 -0
  56. package/packages/table/src/header.ts +3 -0
  57. package/packages/table/src/table.ts +71 -15
  58. package/packages/table/src/util.ts +3 -3
  59. package/packages/ui/src/utils.ts +7 -5
  60. package/styles/components/table.scss +38 -0
  61. /package/es/{iconfont.1760580064178.ttf → iconfont.1760925752102.ttf} +0 -0
  62. /package/es/{iconfont.1760580064178.woff → iconfont.1760925752102.woff} +0 -0
  63. /package/es/{iconfont.1760580064178.woff2 → iconfont.1760925752102.woff2} +0 -0
  64. /package/lib/{iconfont.1760580064178.ttf → iconfont.1760925752102.ttf} +0 -0
  65. /package/lib/{iconfont.1760580064178.woff → iconfont.1760925752102.woff} +0 -0
  66. /package/lib/{iconfont.1760580064178.woff2 → iconfont.1760925752102.woff2} +0 -0
@@ -176,7 +176,7 @@ hooks.add('tableMenuModule', {
176
176
  }
177
177
  if (internalData._keyCtx) {
178
178
  const type = 'body'
179
- const params: any = { type, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, keyboard: true, columns: visibleColumn.slice(0), $event: evnt }
179
+ const params: any = { source: 'table', type, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, keyboard: true, columns: visibleColumn.slice(0), $event: evnt }
180
180
  // 如果开启单元格区域
181
181
  if (mouseConfig && mouseOpts.area) {
182
182
  const activeArea = $xeTable.getActiveCellArea()
@@ -203,7 +203,7 @@ hooks.add('tableMenuModule', {
203
203
  // target=td|th,直接向上找 table 去匹配即可
204
204
  return target.parentNode.parentNode.parentNode.getAttribute('xid') === xID
205
205
  })
206
- const params: any = { type: layout, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, columns: visibleColumn.slice(0), $event: evnt }
206
+ const params: any = { source: 'table', type: layout, $table: $xeTable, $grid: $xeGrid, $gantt: $xeGantt, columns: visibleColumn.slice(0), $event: evnt }
207
207
  if (columnTargetNode.flag) {
208
208
  const cell = columnTargetNode.targetElem
209
209
  const columnNodeRest = $xeTable.getColumnNode(cell)
@@ -11,6 +11,7 @@ import type { VxeTablePrivateMethods, VxeTableConstructor, VxeTableDefines, VxeC
11
11
 
12
12
  const { getI18n, renderer, renderEmptyElement } = VxeUI
13
13
 
14
+ const sourceType = 'table'
14
15
  const renderType = 'body'
15
16
 
16
17
  export default defineVxeComponent({
@@ -176,6 +177,7 @@ export default defineVxeComponent({
176
177
  $columnIndex,
177
178
  _columnIndex,
178
179
  fixed: fixedType,
180
+ source: sourceType,
179
181
  type: renderType,
180
182
  isHidden: !!fixedHiddenColumn,
181
183
  level: rowLevel,
@@ -627,6 +629,7 @@ export default defineVxeComponent({
627
629
  $columnIndex,
628
630
  _columnIndex,
629
631
  fixed: fixedType,
632
+ source: sourceType,
630
633
  type: renderType,
631
634
  level: rowLevel,
632
635
  row,
@@ -9,6 +9,7 @@ import type { VxeTablePrivateMethods, VxeTableConstructor, VxeTableMethods, VxeT
9
9
 
10
10
  const { renderer, renderEmptyElement } = VxeUI
11
11
 
12
+ const sourceType = 'table'
12
13
  const renderType = 'footer'
13
14
 
14
15
  export default defineVxeComponent({
@@ -100,6 +101,7 @@ export default defineVxeComponent({
100
101
  itemIndex,
101
102
  items: row,
102
103
  fixed: fixedType,
104
+ source: sourceType,
103
105
  type: renderType,
104
106
  data: footerTableData
105
107
  }
@@ -10,6 +10,7 @@ import type { VxeTablePrivateMethods, VxeTableConstructor, VxeTableMethods, VxeT
10
10
 
11
11
  const { renderer, renderEmptyElement } = VxeUI
12
12
 
13
+ const sourceType = 'table'
13
14
  const renderType = 'header'
14
15
 
15
16
  function getColumnFirstChild (column: VxeTableDefines.ColumnInfo): VxeTableDefines.ColumnInfo {
@@ -125,6 +126,7 @@ export default defineVxeComponent({
125
126
  _columnIndex,
126
127
  firstFilterOption: firstFilterOption as VxeTableDefines.FilterOption,
127
128
  fixed: fixedType,
129
+ source: sourceType,
128
130
  type: renderType,
129
131
  isHidden: fixedHiddenColumn,
130
132
  hasFilter
@@ -316,6 +318,7 @@ export default defineVxeComponent({
316
318
  _columnIndex,
317
319
  option: firstFilterOption as VxeTableDefines.FilterOption,
318
320
  fixed: fixedType,
321
+ source: sourceType,
319
322
  type: renderType,
320
323
  isHidden: fixedHiddenColumn,
321
324
  hasFilter
@@ -463,14 +463,24 @@ export default defineVxeComponent({
463
463
  return Object.assign({}, getConfig().table.scrollbarConfig, props.scrollbarConfig)
464
464
  })
465
465
 
466
- const computeScrollbarXToTop = computed(() => {
466
+ const computeScrollbarXOpts = computed(() => {
467
467
  const scrollbarOpts = computeScrollbarOpts.value
468
- return !!(scrollbarOpts.x && scrollbarOpts.x.position === 'top')
468
+ return Object.assign({}, scrollbarOpts.x, props.scrollbarConfig?.x || {})
469
469
  })
470
470
 
471
- const computeScrollbarYToLeft = computed(() => {
471
+ const computeScrollbarYOpts = computed(() => {
472
472
  const scrollbarOpts = computeScrollbarOpts.value
473
- return !!(scrollbarOpts.y && scrollbarOpts.y.position === 'left')
473
+ return Object.assign({}, scrollbarOpts.y, props.scrollbarConfig?.y || {})
474
+ })
475
+
476
+ const computeScrollbarXToTop = computed(() => {
477
+ const scrollbarXOpts = computeScrollbarXOpts.value
478
+ return scrollbarXOpts.position === 'top'
479
+ })
480
+
481
+ const computeScrollbarYToLeft = computed(() => {
482
+ const scrollbarYOpts = computeScrollbarYOpts.value
483
+ return scrollbarYOpts.position === 'left'
474
484
  })
475
485
 
476
486
  const computeScrollYThreshold = computed(() => {
@@ -884,6 +894,8 @@ export default defineVxeComponent({
884
894
  computeVirtualXOpts,
885
895
  computeVirtualYOpts,
886
896
  computeScrollbarOpts,
897
+ computeScrollbarXOpts,
898
+ computeScrollbarYOpts,
887
899
  computeScrollbarXToTop,
888
900
  computeScrollbarYToLeft,
889
901
  computeColumnOpts,
@@ -2470,7 +2482,6 @@ export default defineVxeComponent({
2470
2482
  }
2471
2483
 
2472
2484
  const scrollbarXConf = scrollbarOpts.x || {}
2473
- const scrollbarXToTop = computeScrollbarXToTop.value
2474
2485
  const scrollbarYConf = scrollbarOpts.y || {}
2475
2486
  const scrollbarYToLeft = computeScrollbarYToLeft.value
2476
2487
 
@@ -2522,16 +2533,28 @@ export default defineVxeComponent({
2522
2533
  }
2523
2534
  const xWrapperEl = refScrollXWrapperElem.value
2524
2535
  if (xWrapperEl) {
2525
- xWrapperEl.style.left = scrollbarXToTop ? `${osbWidth}px` : ''
2526
2536
  xWrapperEl.style.width = `${el.clientWidth - osbWidth}px`
2537
+ if (scrollbarYToLeft) {
2538
+ xWrapperEl.style.left = `${osbWidth}px`
2539
+ } else {
2540
+ xWrapperEl.style.left = ''
2541
+ }
2527
2542
  }
2528
2543
  if (xLeftCornerEl) {
2529
- xLeftCornerEl.style.width = scrollbarXToTop ? `${osbWidth}px` : ''
2530
- xLeftCornerEl.style.display = scrollbarXToTop ? (overflowX && osbHeight ? 'block' : '') : ''
2544
+ if (scrollbarYToLeft) {
2545
+ xLeftCornerEl.style.width = `${osbWidth}px`
2546
+ xLeftCornerEl.style.display = overflowY && osbWidth ? 'block' : ''
2547
+ } else {
2548
+ xLeftCornerEl.style.display = ''
2549
+ }
2531
2550
  }
2532
2551
  if (xRightCornerEl) {
2533
- xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`
2534
- xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '')
2552
+ if (scrollbarYToLeft) {
2553
+ xRightCornerEl.style.display = ''
2554
+ } else {
2555
+ xRightCornerEl.style.width = `${osbWidth}px`
2556
+ xRightCornerEl.style.display = xScrollbarVisible === 'visible' ? 'block' : ''
2557
+ }
2535
2558
  }
2536
2559
 
2537
2560
  const scrollYVirtualEl = refScrollYVirtualElem.value
@@ -4149,8 +4172,10 @@ export default defineVxeComponent({
4149
4172
  updateAfterDataIndex()
4150
4173
  return nextTick()
4151
4174
  }).then(() => {
4175
+ updateTreeLineStyle()
4152
4176
  return handleLazyRecalculate(true, true, true)
4153
4177
  }).then(() => {
4178
+ updateTreeLineStyle()
4154
4179
  setTimeout(() => {
4155
4180
  $xeTable.updateCellAreas()
4156
4181
  }, 30)
@@ -4523,6 +4548,9 @@ export default defineVxeComponent({
4523
4548
  }
4524
4549
  }
4525
4550
 
4551
+ /**
4552
+ * 更新展开行样式
4553
+ */
4526
4554
  const updateRowExpandStyle = () => {
4527
4555
  const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData
4528
4556
  const expandOpts = computeExpandOpts.value
@@ -4578,6 +4606,13 @@ export default defineVxeComponent({
4578
4606
  }
4579
4607
  }
4580
4608
 
4609
+ /**
4610
+ * 更新树连接线样式
4611
+ */
4612
+ const updateTreeLineStyle = () => {
4613
+ // 待优化
4614
+ }
4615
+
4581
4616
  const handleRowExpandScroll = () => {
4582
4617
  const { elemStore } = internalData
4583
4618
  const rowExpandEl = refRowExpandElem.value
@@ -11923,14 +11958,24 @@ export default defineVxeComponent({
11923
11958
  * 如果宽度足够情况下,则不需要渲染固定列
11924
11959
  * @param {String} fixedType 固定列类型
11925
11960
  */
11926
- const renderFixed = (fixedType: 'left' | 'right') => {
11961
+ const renderViewFixed = (fixedType: 'left' | 'right') => {
11927
11962
  const { showHeader, showFooter } = props
11928
11963
  const { tableData, tableColumn, tableGroupColumn, columnStore, footerTableData } = reactData
11964
+ const scrollbarOpts = computeScrollbarOpts.value
11965
+ const scrollbarXOpts = computeScrollbarXOpts.value
11966
+ const scrollbarYOpts = computeScrollbarYOpts.value
11967
+ const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts
11968
+ const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts
11929
11969
  const isFixedLeft = fixedType === 'left'
11930
11970
  const fixedColumn = isFixedLeft ? columnStore.leftList : columnStore.rightList
11971
+ const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior
11972
+ const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior
11931
11973
  return h('div', {
11932
11974
  ref: isFixedLeft ? refLeftContainer : refRightContainer,
11933
- class: `vxe-table--fixed-${fixedType}-wrapper`
11975
+ class: [`vxe-table--fixed-${fixedType}-wrapper`, {
11976
+ [`x-ob--${osXBehavior}`]: osXBehavior,
11977
+ [`y-ob--${osYBehavior}`]: osYBehavior
11978
+ }]
11934
11979
  }, [
11935
11980
  showHeader
11936
11981
  ? h(TableHeaderComponent, {
@@ -12122,6 +12167,7 @@ export default defineVxeComponent({
12122
12167
  $columnIndex,
12123
12168
  _columnIndex,
12124
12169
  fixed: '',
12170
+ source: 'table',
12125
12171
  type: 'body',
12126
12172
  level: rowLevel,
12127
12173
  rowid,
@@ -12227,11 +12273,21 @@ export default defineVxeComponent({
12227
12273
  const renderViewport = () => {
12228
12274
  const { showHeader, showFooter } = props
12229
12275
  const { overflowX, tableData, tableColumn, tableGroupColumn, footerTableData, columnStore } = reactData
12276
+ const scrollbarOpts = computeScrollbarOpts.value
12277
+ const scrollbarXOpts = computeScrollbarXOpts.value
12278
+ const scrollbarYOpts = computeScrollbarYOpts.value
12279
+ const { overscrollBehavior: overscrollXBehavior } = scrollbarXOpts
12280
+ const { overscrollBehavior: overscrollYBehavior } = scrollbarYOpts
12230
12281
  const { leftList, rightList } = columnStore
12282
+ const osXBehavior = XEUtils.eqNull(overscrollXBehavior) ? scrollbarOpts.overscrollBehavior : overscrollXBehavior
12283
+ const osYBehavior = XEUtils.eqNull(overscrollYBehavior) ? scrollbarOpts.overscrollBehavior : overscrollYBehavior
12231
12284
 
12232
12285
  return h('div', {
12233
12286
  ref: refTableViewportElem,
12234
- class: 'vxe-table--viewport-wrapper'
12287
+ class: ['vxe-table--viewport-wrapper', {
12288
+ [`x-ob--${osXBehavior}`]: osXBehavior,
12289
+ [`y-ob--${osYBehavior}`]: osYBehavior
12290
+ }]
12235
12291
  }, [
12236
12292
  h('div', {
12237
12293
  class: 'vxe-table--main-wrapper'
@@ -12269,8 +12325,8 @@ export default defineVxeComponent({
12269
12325
  h('div', {
12270
12326
  class: 'vxe-table--fixed-wrapper'
12271
12327
  }, [
12272
- leftList && leftList.length && overflowX ? renderFixed('left') : renderEmptyElement($xeTable),
12273
- rightList && rightList.length && overflowX ? renderFixed('right') : renderEmptyElement($xeTable)
12328
+ leftList && leftList.length && overflowX ? renderViewFixed('left') : renderEmptyElement($xeTable),
12329
+ rightList && rightList.length && overflowX ? renderViewFixed('right') : renderEmptyElement($xeTable)
12274
12330
  ]),
12275
12331
  renderRowExpandedVNs()
12276
12332
  ])
@@ -638,7 +638,7 @@ const lineOffsetSizes = {
638
638
  large: 0
639
639
  }
640
640
 
641
- function countTreeExpand (prevRow: any, params: VxeTableDefines.CellRenderBodyParams) {
641
+ function countTreeExpandSize (prevRow: any, params: VxeTableDefines.CellRenderBodyParams) {
642
642
  let count = 1
643
643
  if (!prevRow) {
644
644
  return count
@@ -655,7 +655,7 @@ function countTreeExpand (prevRow: any, params: VxeTableDefines.CellRenderBodyPa
655
655
  const rowChildren = prevRow[transform ? mapChildrenField : childrenField]
656
656
  if (rowChildren && treeExpandedFlag && treeExpandedMaps[getRowid($table, prevRow)]) {
657
657
  for (let index = 0; index < rowChildren.length; index++) {
658
- count += countTreeExpand(rowChildren[index], params)
658
+ count += countTreeExpandSize(rowChildren[index], params)
659
659
  }
660
660
  }
661
661
  return count
@@ -688,7 +688,7 @@ export function calcTreeLine (params: VxeTableDefines.CellRenderBodyParams, prev
688
688
  const currCellHeight = rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight
689
689
  let expandSize = 1
690
690
  if (prevRow) {
691
- expandSize = countTreeExpand(prevRow, params)
691
+ expandSize = countTreeExpandSize(prevRow, params)
692
692
  }
693
693
  let cellHeight = currCellHeight
694
694
  const vnHeight = rowRest.height
@@ -2,6 +2,8 @@ import XEUtils from 'xe-utils'
2
2
  import { VxeUI } from '@vxe-ui/core'
3
3
  import DomZIndex from 'dom-zindex'
4
4
 
5
+ const { getConfig } = VxeUI
6
+
5
7
  export function isEnableConf (conf: any): boolean {
6
8
  return conf && conf.enabled !== false
7
9
  }
@@ -31,15 +33,15 @@ export function hasChildrenList (item: any) {
31
33
  }
32
34
 
33
35
  export function getFuncText (content?: string | number | boolean | null, args?: any) {
34
- if (content) {
35
- const translate = VxeUI.getConfig().translate
36
- return XEUtils.toValueString(translate ? translate('' + content, args) : content)
36
+ if (XEUtils.eqNull(content)) {
37
+ return ''
37
38
  }
38
- return ''
39
+ const translate = getConfig().translate
40
+ return `${translate ? translate('' + content, args) : content}`
39
41
  }
40
42
 
41
43
  export function formatText (value: any, placeholder?: any) {
42
- return '' + (isEmptyValue(value) ? (placeholder ? VxeUI.getConfig().emptyCell : '') : value)
44
+ return '' + (isEmptyValue(value) ? (placeholder ? getConfig().emptyCell : '') : value)
43
45
  }
44
46
 
45
47
  /**
@@ -74,6 +74,34 @@ $btnThemeList: (
74
74
  position: relative;
75
75
  overflow: hidden;
76
76
  flex-grow: 1;
77
+ &.x-ob--contain {
78
+ & > .vxe-table--main-wrapper {
79
+ & > .vxe-table--header-wrapper {
80
+ & > .vxe-table--header-inner-wrapper {
81
+ overscroll-behavior-x: contain;
82
+ }
83
+ }
84
+ & > .vxe-table--body-wrapper {
85
+ & > .vxe-table--body-inner-wrapper {
86
+ overscroll-behavior-x: contain;
87
+ }
88
+ }
89
+ & > .vxe-table--footer-wrapper {
90
+ & > .vxe-table--footer-inner-wrapper {
91
+ overscroll-behavior-x: contain;
92
+ }
93
+ }
94
+ }
95
+ }
96
+ &.y-ob--contain {
97
+ & > .vxe-table--main-wrapper {
98
+ & > .vxe-table--body-wrapper {
99
+ & > .vxe-table--body-inner-wrapper {
100
+ overscroll-behavior-y: contain;
101
+ }
102
+ }
103
+ }
104
+ }
77
105
  }
78
106
  .vxe-table--header-wrapper,
79
107
  .vxe-table--body-wrapper,
@@ -640,6 +668,9 @@ $btnThemeList: (
640
668
  left: 0;
641
669
  bottom: 0;
642
670
  }
671
+ .vxe-table--scroll-x-wrapper {
672
+ height: 100%;
673
+ }
643
674
  .vxe-table--scroll-x-handle {
644
675
  overflow-y: hidden;
645
676
  overflow-x: scroll;
@@ -1702,6 +1733,13 @@ $btnThemeList: (
1702
1733
  transition: 0.3s box-shadow;
1703
1734
  outline: 0;
1704
1735
  background-color: var(--vxe-ui-layout-background-color);
1736
+ &.y-ob--contain {
1737
+ & > .vxe-table--body-wrapper {
1738
+ & > .vxe-table--body-inner-wrapper {
1739
+ overscroll-behavior-y: contain;
1740
+ }
1741
+ }
1742
+ }
1705
1743
  .vxe-table--body-wrapper {
1706
1744
  outline: 0;
1707
1745
  }