vxe-table 4.17.5 → 4.17.7

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 (45) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/module/export/hook.js +5 -3
  3. package/es/table/src/body.js +12 -20
  4. package/es/table/src/cell.js +43 -37
  5. package/es/table/src/footer.js +3 -12
  6. package/es/table/src/header.js +4 -12
  7. package/es/table/src/table.js +109 -54
  8. package/es/toolbar/src/toolbar.js +3 -3
  9. package/es/ui/index.js +1 -1
  10. package/es/ui/src/log.js +1 -1
  11. package/lib/index.umd.js +65 -82
  12. package/lib/index.umd.min.js +1 -1
  13. package/lib/style.css +1 -1
  14. package/lib/table/module/export/hook.js +5 -3
  15. package/lib/table/module/export/hook.min.js +1 -1
  16. package/lib/table/src/body.js +10 -23
  17. package/lib/table/src/body.min.js +1 -1
  18. package/lib/table/src/cell.js +10 -6
  19. package/lib/table/src/cell.min.js +1 -1
  20. package/lib/table/src/footer.js +4 -15
  21. package/lib/table/src/footer.min.js +1 -1
  22. package/lib/table/src/header.js +5 -14
  23. package/lib/table/src/header.min.js +1 -1
  24. package/lib/table/src/table.js +29 -18
  25. package/lib/table/src/table.min.js +1 -1
  26. package/lib/toolbar/src/toolbar.js +3 -3
  27. package/lib/toolbar/src/toolbar.min.js +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/package.json +1 -1
  33. package/packages/table/module/export/hook.ts +5 -3
  34. package/packages/table/src/body.ts +8 -20
  35. package/packages/table/src/cell.ts +43 -37
  36. package/packages/table/src/footer.ts +3 -11
  37. package/packages/table/src/header.ts +4 -12
  38. package/packages/table/src/table.ts +109 -53
  39. package/packages/toolbar/src/toolbar.ts +3 -3
  40. /package/es/{iconfont.1761786608199.ttf → iconfont.1762136085329.ttf} +0 -0
  41. /package/es/{iconfont.1761786608199.woff → iconfont.1762136085329.woff} +0 -0
  42. /package/es/{iconfont.1761786608199.woff2 → iconfont.1762136085329.woff2} +0 -0
  43. /package/lib/{iconfont.1761786608199.ttf → iconfont.1762136085329.ttf} +0 -0
  44. /package/lib/{iconfont.1761786608199.woff → iconfont.1762136085329.woff} +0 -0
  45. /package/lib/{iconfont.1761786608199.woff2 → iconfont.1762136085329.woff2} +0 -0
@@ -677,6 +677,77 @@ export default defineVxeComponent({
677
677
  return leftWidth
678
678
  })
679
679
 
680
+ const computeBodyMergeCoverFixed = computed(() => {
681
+ const { columnStore, mergeBodyFlag } = reactData
682
+ const { mergeBodyList, visibleColumn } = internalData
683
+ const { leftList, rightList } = columnStore
684
+ const rscIndex = visibleColumn.length - rightList.length
685
+ if (mergeBodyFlag && (leftList.length || rightList.length)) {
686
+ const lecIndex = leftList.length
687
+ for (let i = 0; i < mergeBodyList.length; i++) {
688
+ const { col, colspan } = mergeBodyList[i]
689
+ if (col < lecIndex || (col + colspan) > rscIndex) {
690
+ return true
691
+ }
692
+ }
693
+ }
694
+ return false
695
+ })
696
+
697
+ const computeIsHeaderRenderOptimize = computed(() => {
698
+ const { spanMethod, footerSpanMethod, showHeaderOverflow: allColumnHeaderOverflow } = props
699
+ const { isGroup, scrollXLoad } = reactData
700
+ let isOptimizeMode = false
701
+ if (isGroup) {
702
+ // 分组表头
703
+ } else {
704
+ // 如果是使用优化模式
705
+ if (scrollXLoad && allColumnHeaderOverflow) {
706
+ if (spanMethod || footerSpanMethod) {
707
+ // 如果不支持优化模式
708
+ } else {
709
+ isOptimizeMode = true
710
+ }
711
+ }
712
+ }
713
+ return isOptimizeMode
714
+ })
715
+
716
+ const computeIsBodyRenderOptimize = computed(() => {
717
+ const { spanMethod, footerSpanMethod } = props
718
+ const { scrollXLoad, scrollYLoad, isAllOverflow, expandColumn } = reactData
719
+ const bodyMergeCoverFixed = computeBodyMergeCoverFixed.value
720
+ const expandOpts = computeExpandOpts.value
721
+ let isOptimizeMode = false
722
+ // 如果是使用优化模式
723
+ if (scrollXLoad || scrollYLoad || isAllOverflow) {
724
+ // 如果是展开行,内联模式,不支持优化
725
+ // 如果是方法合并,不支持优化
726
+ // 如果固定列且配置式合并,不支持优化
727
+ if ((expandColumn && expandOpts.mode !== 'fixed') || bodyMergeCoverFixed || spanMethod || footerSpanMethod) {
728
+ // 如果不支持优化模式
729
+ } else {
730
+ isOptimizeMode = true
731
+ }
732
+ }
733
+ return isOptimizeMode
734
+ })
735
+
736
+ const computeIsFooterRenderOptimize = computed(() => {
737
+ const { spanMethod, footerSpanMethod, showFooterOverflow: allColumnFooterOverflow } = props
738
+ const { scrollXLoad } = reactData
739
+ let isOptimizeMode = false
740
+ // 如果是使用优化模式
741
+ if (scrollXLoad && allColumnFooterOverflow) {
742
+ if (spanMethod || footerSpanMethod) {
743
+ // 如果不支持优化模式
744
+ } else {
745
+ isOptimizeMode = true
746
+ }
747
+ }
748
+ return isOptimizeMode
749
+ })
750
+
680
751
  const computeHeaderMenu = computed(() => {
681
752
  const menuOpts = computeMenuOpts.value
682
753
  const headerOpts = menuOpts.header
@@ -949,9 +1020,13 @@ export default defineVxeComponent({
949
1020
  computeCustomOpts,
950
1021
  computeLeftFixedWidth,
951
1022
  computeRightFixedWidth,
1023
+ computeBodyMergeCoverFixed,
952
1024
  computeFixedColumnSize,
953
1025
  computeIsMaxFixedColumn,
954
1026
  computeIsAllCheckboxDisabled,
1027
+ computeIsHeaderRenderOptimize,
1028
+ computeIsBodyRenderOptimize,
1029
+ computeIsFooterRenderOptimize,
955
1030
  computeVirtualScrollBars,
956
1031
  computeRowGroupFields,
957
1032
  computeRowGroupColumns,
@@ -2474,8 +2549,8 @@ export default defineVxeComponent({
2474
2549
  }
2475
2550
 
2476
2551
  const updateStyle = () => {
2477
- const { showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props
2478
- const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn, isColLoading } = reactData
2552
+ const { mouseConfig } = props
2553
+ const { isGroup, currentRow, tableColumn, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isColLoading } = reactData
2479
2554
  const { visibleColumn, tableHeight, elemStore, customHeight, customMinHeight, customMaxHeight, tHeaderHeight, tFooterHeight } = internalData
2480
2555
  const $xeGanttView = internalData.xeGanttView
2481
2556
  const el = refElem.value
@@ -2483,12 +2558,15 @@ export default defineVxeComponent({
2483
2558
  return
2484
2559
  }
2485
2560
  const containerList = ['main', 'left', 'right']
2561
+ const { leftList, rightList } = columnStore
2486
2562
  let osbWidth = overflowY ? scrollbarWidth : 0
2487
2563
  let osbHeight = overflowX ? scrollbarHeight : 0
2488
2564
  const emptyPlaceholderElem = refEmptyPlaceholder.value
2565
+ const isHeaderRenderOptimize = computeIsHeaderRenderOptimize.value
2566
+ const isBodyRenderOptimize = computeIsBodyRenderOptimize.value
2567
+ const isFooterRenderOptimize = computeIsFooterRenderOptimize.value
2489
2568
  const scrollbarOpts = computeScrollbarOpts.value
2490
2569
  const mouseOpts = computeMouseOpts.value
2491
- const expandOpts = computeExpandOpts.value
2492
2570
  const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper'])
2493
2571
  const bodyTableElem = getRefElem(elemStore['main-body-table'])
2494
2572
  if (emptyPlaceholderElem) {
@@ -2610,7 +2688,7 @@ export default defineVxeComponent({
2610
2688
  let fixedColumn: VxeTableDefines.ColumnInfo[] = []
2611
2689
  let fixedWrapperElem: HTMLDivElement
2612
2690
  if (fixedType) {
2613
- fixedColumn = isFixedLeft ? columnStore.leftList : columnStore.rightList
2691
+ fixedColumn = isFixedLeft ? leftList : rightList
2614
2692
  fixedWrapperElem = isFixedLeft ? refLeftContainer.value : refRightContainer.value
2615
2693
  }
2616
2694
  layoutList.forEach(layout => {
@@ -2621,20 +2699,11 @@ export default defineVxeComponent({
2621
2699
  // 表头体样式处理
2622
2700
  // 横向滚动渲染
2623
2701
  let renderColumnList = tableColumn
2624
- let isOptimizeMode = false
2702
+ const isOptimizeMode = isHeaderRenderOptimize
2625
2703
 
2626
2704
  if (isGroup) {
2627
2705
  renderColumnList = visibleColumn
2628
2706
  } else {
2629
- // 如果是使用优化模式
2630
- if (scrollXLoad && allColumnHeaderOverflow) {
2631
- if (spanMethod || footerSpanMethod) {
2632
- // 如果不支持优化模式
2633
- } else {
2634
- isOptimizeMode = true
2635
- }
2636
- }
2637
-
2638
2707
  if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
2639
2708
  renderColumnList = visibleColumn
2640
2709
  }
@@ -2691,16 +2760,7 @@ export default defineVxeComponent({
2691
2760
  }
2692
2761
 
2693
2762
  let renderColumnList = tableColumn
2694
-
2695
- let isOptimizeMode = false
2696
- // 如果是使用优化模式
2697
- if (scrollXLoad || scrollYLoad || isAllOverflow) {
2698
- if ((expandColumn && expandOpts.mode !== 'fixed') || spanMethod || footerSpanMethod) {
2699
- // 如果不支持优化模式
2700
- } else {
2701
- isOptimizeMode = true
2702
- }
2703
- }
2763
+ const isOptimizeMode = isBodyRenderOptimize
2704
2764
 
2705
2765
  if (fixedType) {
2706
2766
  renderColumnList = visibleColumn
@@ -2734,15 +2794,7 @@ export default defineVxeComponent({
2734
2794
  }
2735
2795
  } else if (layout === 'footer') {
2736
2796
  let renderColumnList = tableColumn
2737
- let isOptimizeMode = false
2738
- // 如果是使用优化模式
2739
- if (scrollXLoad && allColumnFooterOverflow) {
2740
- if (spanMethod || footerSpanMethod) {
2741
- // 如果不支持优化模式
2742
- } else {
2743
- isOptimizeMode = true
2744
- }
2745
- }
2797
+ const isOptimizeMode = isFooterRenderOptimize
2746
2798
 
2747
2799
  if (!isOptimizeMode || (!isColLoading && (fixedType || !overflowX))) {
2748
2800
  renderColumnList = visibleColumn
@@ -4190,6 +4242,7 @@ export default defineVxeComponent({
4190
4242
  * @returns
4191
4243
  */
4192
4244
  const handleVirtualTreeExpand = (rows: any[], expanded: boolean) => {
4245
+ const { lastScrollLeft, lastScrollTop } = internalData
4193
4246
  return handleBaseTreeExpand(rows, expanded).then(() => {
4194
4247
  handleVirtualTreeToList()
4195
4248
  $xeTable.handleTableData()
@@ -4197,9 +4250,9 @@ export default defineVxeComponent({
4197
4250
  updateAfterDataIndex()
4198
4251
  return nextTick()
4199
4252
  }).then(() => {
4200
- updateTreeLineStyle()
4201
- return handleLazyRecalculate(true, true, true)
4253
+ return handleRecalculateStyle(true, true, true)
4202
4254
  }).then(() => {
4255
+ restoreScrollLocation($xeTable, lastScrollLeft, lastScrollTop)
4203
4256
  updateTreeLineStyle()
4204
4257
  setTimeout(() => {
4205
4258
  $xeTable.updateCellAreas()
@@ -11879,7 +11932,7 @@ export default defineVxeComponent({
11879
11932
  },
11880
11933
  // 更新纵向 Y 可视渲染上下剩余空间大小
11881
11934
  updateScrollYSpace () {
11882
- const { isAllOverflow, overflowY, scrollYLoad, expandColumn } = reactData
11935
+ const { isAllOverflow, overflowY, scrollYLoad, scrollYHeight, expandColumn } = reactData
11883
11936
  const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData
11884
11937
  const $xeGanttView = internalData.xeGanttView
11885
11938
  const { startIndex } = scrollYStore
@@ -11894,13 +11947,13 @@ export default defineVxeComponent({
11894
11947
  const rightbodyTableElem = getRefElem(elemStore['right-body-table'])
11895
11948
  const containerList = ['main', 'left', 'right']
11896
11949
  let ySpaceTop = 0
11897
- let scrollYHeight = 0
11950
+ let sYHeight = scrollYHeight
11898
11951
  let isScrollYBig = false
11899
11952
  if (scrollYLoad) {
11900
11953
  const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height
11901
11954
  if (!isCustomCellHeight && !expandColumn && isAllOverflow) {
11902
- scrollYHeight = afterFullData.length * defaultRowHeight
11903
- if (scrollYHeight > maxYHeight) {
11955
+ sYHeight = afterFullData.length * defaultRowHeight
11956
+ if (sYHeight > maxYHeight) {
11904
11957
  isScrollYBig = true
11905
11958
  }
11906
11959
  ySpaceTop = Math.max(0, startIndex * defaultRowHeight)
@@ -11913,18 +11966,21 @@ export default defineVxeComponent({
11913
11966
  const lastRow = afterFullData[afterFullData.length - 1]
11914
11967
  rowid = getRowid($xeTable, lastRow)
11915
11968
  rowRest = fullAllDataRowIdData[rowid] || {}
11916
- scrollYHeight = (rowRest.oTop || 0) + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight)
11917
- // 是否展开行
11918
- if (expandColumn && rowExpandedMaps[rowid]) {
11919
- scrollYHeight += rowRest.expandHeight || expandOpts.height || 0
11969
+ // 如果为空时还没计算完数据,保持原高度不变
11970
+ if (rowRest.oTop) {
11971
+ sYHeight = (rowRest.oTop || 0) + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight)
11972
+ // 是否展开行
11973
+ if (expandColumn && rowExpandedMaps[rowid]) {
11974
+ sYHeight += rowRest.expandHeight || expandOpts.height || 0
11975
+ }
11920
11976
  }
11921
- if (scrollYHeight > maxYHeight) {
11977
+ if (sYHeight > maxYHeight) {
11922
11978
  isScrollYBig = true
11923
11979
  }
11924
11980
  }
11925
11981
  } else {
11926
11982
  if (bodyTableElem) {
11927
- scrollYHeight = bodyTableElem.clientHeight
11983
+ sYHeight = bodyTableElem.clientHeight
11928
11984
  }
11929
11985
  }
11930
11986
  let clientHeight = 0
@@ -11932,7 +11988,7 @@ export default defineVxeComponent({
11932
11988
  clientHeight = bodyScrollElem.clientHeight
11933
11989
  }
11934
11990
  // 虚拟渲染
11935
- let ySpaceHeight = scrollYHeight
11991
+ let ySpaceHeight = sYHeight
11936
11992
  let scrollYTop = ySpaceTop
11937
11993
  if (isScrollYBig) {
11938
11994
  // 触底
@@ -11976,7 +12032,7 @@ export default defineVxeComponent({
11976
12032
  rowExpandYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : ''
11977
12033
  }
11978
12034
  reactData.scrollYTop = scrollYTop
11979
- reactData.scrollYHeight = scrollYHeight
12035
+ reactData.scrollYHeight = ySpaceHeight
11980
12036
  reactData.isScrollYBig = isScrollYBig
11981
12037
 
11982
12038
  calcScrollbar()
@@ -13175,12 +13231,12 @@ export default defineVxeComponent({
13175
13231
  if (props.resizable) {
13176
13232
  warnLog('vxe.error.delProp', ['resizable', 'column-config.resizable'])
13177
13233
  }
13178
- if (props.virtualXConfig && props.scrollX) {
13179
- warnLog('vxe.error.notSupportProp', ['virtual-x-config', 'scroll-x', 'scroll-x=null'])
13180
- }
13181
- if (props.virtualYConfig && props.scrollY) {
13182
- warnLog('vxe.error.notSupportProp', ['virtual-y-config', 'scroll-y', 'scroll-y=null'])
13183
- }
13234
+ // if (props.virtualXConfig && props.scrollX) {
13235
+ // warnLog('vxe.error.notSupportProp', ['virtual-x-config', 'scroll-x', 'scroll-x=null'])
13236
+ // }
13237
+ // if (props.virtualYConfig && props.scrollY) {
13238
+ // warnLog('vxe.error.notSupportProp', ['virtual-y-config', 'scroll-y', 'scroll-y=null'])
13239
+ // }
13184
13240
  if (props.aggregateConfig && props.rowGroupConfig) {
13185
13241
  warnLog('vxe.error.notSupportProp', ['aggregate-config', 'row-group-config', 'row-group-config=null'])
13186
13242
  }
@@ -380,7 +380,7 @@ export default defineVxeComponent({
380
380
  ? h(VxeUIButtonComponent, {
381
381
  key: index,
382
382
  ...Object.assign({}, child, {
383
- content: child.name,
383
+ content: child.content || child.name,
384
384
  options: undefined
385
385
  }),
386
386
  onClick: (eventParams) => isBtn ? btnEvent(eventParams, child) : tolEvent(eventParams, child)
@@ -424,7 +424,7 @@ export default defineVxeComponent({
424
424
  h(VxeUIButtonComponent, {
425
425
  key: `bd${item.code || index}`,
426
426
  ...Object.assign({}, item, {
427
- content: item.name,
427
+ content: item.content || item.name,
428
428
  options: undefined
429
429
  }),
430
430
  onClick: (eventParams) => btnEvent(eventParams, item)
@@ -479,7 +479,7 @@ export default defineVxeComponent({
479
479
  h(VxeUIButtonComponent, {
480
480
  key: tIndex,
481
481
  ...Object.assign({}, item, {
482
- content: item.name,
482
+ content: item.content || item.name,
483
483
  options: undefined
484
484
  }),
485
485
  onClick: (eventParams) => tolEvent(eventParams, item)