vxe-table 4.10.14 → 4.10.15

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 (44) 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/edit/hook.js +5 -5
  6. package/es/table/src/body.js +57 -43
  7. package/es/table/src/table.js +209 -44
  8. package/es/table/style.css +26 -0
  9. package/es/table/style.min.css +1 -1
  10. package/es/ui/index.js +1 -1
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-table/style.css +26 -0
  13. package/es/vxe-table/style.min.css +1 -1
  14. package/lib/index.css +1 -1
  15. package/lib/index.min.css +1 -1
  16. package/lib/index.umd.js +330 -107
  17. package/lib/index.umd.min.js +1 -1
  18. package/lib/style.css +1 -1
  19. package/lib/style.min.css +1 -1
  20. package/lib/table/module/edit/hook.js +10 -5
  21. package/lib/table/module/edit/hook.min.js +1 -1
  22. package/lib/table/src/body.js +65 -58
  23. package/lib/table/src/body.min.js +1 -1
  24. package/lib/table/src/table.js +253 -42
  25. package/lib/table/src/table.min.js +1 -1
  26. package/lib/table/style/style.css +26 -0
  27. package/lib/table/style/style.min.css +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/lib/vxe-table/style/style.css +26 -0
  33. package/lib/vxe-table/style/style.min.css +1 -1
  34. package/package.json +1 -1
  35. package/packages/table/module/edit/hook.ts +5 -5
  36. package/packages/table/src/body.ts +60 -50
  37. package/packages/table/src/table.ts +220 -44
  38. package/styles/components/table.scss +26 -0
  39. /package/es/{iconfont.1739333111603.ttf → iconfont.1739428251944.ttf} +0 -0
  40. /package/es/{iconfont.1739333111603.woff → iconfont.1739428251944.woff} +0 -0
  41. /package/es/{iconfont.1739333111603.woff2 → iconfont.1739428251944.woff2} +0 -0
  42. /package/lib/{iconfont.1739333111603.ttf → iconfont.1739428251944.ttf} +0 -0
  43. /package/lib/{iconfont.1739333111603.woff → iconfont.1739428251944.woff} +0 -0
  44. /package/lib/{iconfont.1739333111603.woff2 → iconfont.1739428251944.woff2} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, h, ComponentPublicInstance, reactive, ref, Ref, provide, inject, nextTick, onActivated, onDeactivated, onBeforeUnmount, onUnmounted, watch, computed, onMounted } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
- import { browse, initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, getOffsetPos, setScrollTop, setScrollLeft } from '../../ui/src/dom'
3
+ import { browse, initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, getOffsetPos, setScrollTop, setScrollLeft, toCssUnit } from '../../ui/src/dom'
4
4
  import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils'
5
5
  import { VxeUI } from '../../ui'
6
6
  import Cell from './cell'
@@ -264,8 +264,9 @@ export default defineComponent({
264
264
 
265
265
  scrollVMLoading: false,
266
266
 
267
+ rowExpandHeightFlag: 1,
267
268
  calcCellHeightFlag: 1,
268
- resizeHeightFlag: 0,
269
+ resizeHeightFlag: 1,
269
270
 
270
271
  isCustomStatus: false,
271
272
 
@@ -393,6 +394,9 @@ export default defineComponent({
393
394
  const refDragRowLineElem = ref<HTMLDivElement>()
394
395
  const refDragColLineElem = ref<HTMLDivElement>()
395
396
 
397
+ const refRowExpandElem = ref<HTMLDivElement>()
398
+ const refRowExpandYSpaceElem = ref<HTMLDivElement>()
399
+
396
400
  const refScrollXVirtualElem = ref<HTMLDivElement>()
397
401
  const refScrollYVirtualElem = ref<HTMLDivElement>()
398
402
  const refScrollXHandleElem = ref<HTMLDivElement>()
@@ -684,6 +688,23 @@ export default defineComponent({
684
688
  return Object.assign({}, getConfig().table.customConfig, props.customConfig)
685
689
  })
686
690
 
691
+ const computeTableRowExpandedList = computed(() => {
692
+ const { rowExpandedMaps, tableData, expandColumn } = reactData
693
+ const expandList: any[] = []
694
+ if (expandColumn) {
695
+ const rowKeys: Record<string, boolean> = {}
696
+ tableData.forEach(row => {
697
+ rowKeys[getRowid($xeTable, row)] = true
698
+ })
699
+ XEUtils.each(rowExpandedMaps, (row, rowid) => {
700
+ if (rowKeys[rowid]) {
701
+ expandList.push(row)
702
+ }
703
+ })
704
+ }
705
+ return expandList
706
+ })
707
+
687
708
  const computeAutoWidthColumnList = computed(() => {
688
709
  const { visibleColumn } = internalData
689
710
  const { tableColumn } = reactData
@@ -940,6 +961,13 @@ export default defineComponent({
940
961
  return { toVisibleIndex: 0, visibleSize: 6 }
941
962
  }
942
963
 
964
+ const calcVarRowHeightConfig = (sizeKey: 'default' | 'medium' | 'small' | 'mini', sizeEl: Element) => {
965
+ const { rowHeightStore } = reactData
966
+ if (sizeEl && sizeEl.clientHeight) {
967
+ rowHeightStore[sizeKey] = sizeEl.clientHeight
968
+ }
969
+ }
970
+
943
971
  const computeRowHeight = () => {
944
972
  const { isAllOverflow } = reactData
945
973
  const tableHeader = refTableHeader.value
@@ -970,8 +998,9 @@ export default defineComponent({
970
998
  }
971
999
 
972
1000
  const handleVirtualYVisible = (currScrollTop?: number) => {
973
- const { isAllOverflow } = reactData
1001
+ const { isAllOverflow, expandColumn, rowExpandedMaps } = reactData
974
1002
  const { elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData
1003
+ const expandOpts = computeExpandOpts.value
975
1004
  const rowOpts = computeRowOpts.value
976
1005
  const cellOpts = computeCellOpts.value
977
1006
  const defaultRowHeight = computeDefaultRowHeight.value
@@ -984,7 +1013,7 @@ export default defineComponent({
984
1013
  let offsetTop = 0
985
1014
  let visibleSize = 0
986
1015
  const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height
987
- if (!isCustomCellHeight && isAllOverflow) {
1016
+ if (!isCustomCellHeight && !expandColumn && isAllOverflow) {
988
1017
  toVisibleIndex = Math.floor(scrollTop / defaultRowHeight)
989
1018
  visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1
990
1019
  } else {
@@ -1002,6 +1031,10 @@ export default defineComponent({
1002
1031
  break
1003
1032
  }
1004
1033
  }
1034
+ // 是否展开行
1035
+ if (expandColumn && rowExpandedMaps[rowid]) {
1036
+ offsetTop += rowRest.expandHeight || expandOpts.height || 0
1037
+ }
1005
1038
  }
1006
1039
  }
1007
1040
  return { toVisibleIndex: Math.max(0, toVisibleIndex), visibleSize: Math.max(6, visibleSize) }
@@ -1561,7 +1594,7 @@ export default defineComponent({
1561
1594
  rowRest.seq = seq
1562
1595
  rowRest._index = index
1563
1596
  } else {
1564
- const rest = { row, rowid, seq, index: -1, $index: -1, _index: index, treeIndex: -1, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0 }
1597
+ const rest = { row, rowid, seq, index: -1, $index: -1, _index: index, treeIndex: -1, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
1565
1598
  fullAllDataRowIdData[rowid] = rest
1566
1599
  fullDataRowIdData[rowid] = rest
1567
1600
  }
@@ -1590,7 +1623,7 @@ export default defineComponent({
1590
1623
  rowRest.seq = seq
1591
1624
  rowRest.treeIndex = index
1592
1625
  } else {
1593
- const rest = { row, rowid, seq, index: -1, $index: -1, _index: -1, treeIndex: -1, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0 }
1626
+ const rest = { row, rowid, seq, index: -1, $index: -1, _index: -1, treeIndex: -1, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
1594
1627
  fullAllDataRowIdData[rowid] = rest
1595
1628
  fullDataRowIdData[rowid] = rest
1596
1629
  }
@@ -1803,6 +1836,7 @@ export default defineComponent({
1803
1836
  const emptyPlaceholderElem = refEmptyPlaceholder.value
1804
1837
  const cellOffsetWidth = computeCellOffsetWidth.value
1805
1838
  const mouseOpts = computeMouseOpts.value
1839
+ const expandOpts = computeExpandOpts.value
1806
1840
  const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper'])
1807
1841
  const bodyTableElem = getRefElem(elemStore['main-body-table'])
1808
1842
  if (emptyPlaceholderElem) {
@@ -1876,6 +1910,12 @@ export default defineComponent({
1876
1910
  yBottomCornerEl.style.display = footerHeight ? 'block' : ''
1877
1911
  }
1878
1912
 
1913
+ const rowExpandEl = refRowExpandElem.value
1914
+ if (rowExpandEl) {
1915
+ rowExpandEl.style.height = `${bodyHeight}px`
1916
+ rowExpandEl.style.top = `${headerHeight}px`
1917
+ }
1918
+
1879
1919
  containerList.forEach((name, index) => {
1880
1920
  const fixedType = index > 0 ? name : ''
1881
1921
  const layoutList = ['header', 'body', 'footer']
@@ -1993,7 +2033,7 @@ export default defineComponent({
1993
2033
  let isOptimizeMode = false
1994
2034
  // 如果是使用优化模式
1995
2035
  if (scrollXLoad || scrollYLoad || isAllOverflow) {
1996
- if (expandColumn || spanMethod || footerSpanMethod) {
2036
+ if ((expandColumn && expandOpts.mode !== 'fixed') || spanMethod || footerSpanMethod) {
1997
2037
  // 如果不支持优化模式
1998
2038
  } else {
1999
2039
  isOptimizeMode = true
@@ -2656,15 +2696,25 @@ export default defineComponent({
2656
2696
  if (!el || !el.clientWidth) {
2657
2697
  return nextTick()
2658
2698
  }
2699
+ const varEl = refVarElem.value
2700
+ if (varEl) {
2701
+ const [defEl, mediumEl, smallEl, miniEl] = varEl.children
2702
+ calcVarRowHeightConfig('default', defEl)
2703
+ calcVarRowHeightConfig('medium', mediumEl)
2704
+ calcVarRowHeightConfig('small', smallEl)
2705
+ calcVarRowHeightConfig('mini', miniEl)
2706
+ }
2659
2707
  calcCellWidth()
2660
2708
  autoCellWidth()
2661
2709
  updateStyle()
2710
+ updateRowExpandStyle()
2662
2711
  return computeScrollLoad().then(() => {
2663
2712
  if (reFull === true) {
2664
2713
  // 初始化时需要在列计算之后再执行优化运算,达到最优显示效果
2665
2714
  calcCellWidth()
2666
2715
  autoCellWidth()
2667
2716
  updateStyle()
2717
+ updateRowExpandStyle()
2668
2718
  return computeScrollLoad()
2669
2719
  }
2670
2720
  })
@@ -3389,6 +3439,62 @@ export default defineComponent({
3389
3439
  })
3390
3440
  }
3391
3441
 
3442
+ const updateRowExpandStyle = () => {
3443
+ const { expandColumn, scrollYLoad, rowExpandedMaps } = reactData
3444
+ const expandOpts = computeExpandOpts.value
3445
+ const rowOpts = computeRowOpts.value
3446
+ const cellOpts = computeCellOpts.value
3447
+ const defaultRowHeight = computeDefaultRowHeight.value
3448
+ const { mode } = expandOpts
3449
+ if (expandColumn && mode === 'fixed') {
3450
+ const { elemStore, afterFullData, fullAllDataRowIdData } = internalData
3451
+ const rowExpandEl = refRowExpandElem.value
3452
+ const bodyScrollElem = getRefElem(elemStore['main-body-scroll'])
3453
+ if (rowExpandEl && bodyScrollElem) {
3454
+ let isUpdateHeight = false
3455
+ if (scrollYLoad) {
3456
+ let offsetTop = 0
3457
+ for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
3458
+ const row = afterFullData[rIndex]
3459
+ const rowid = getRowid($xeTable, row)
3460
+ const rowRest = fullAllDataRowIdData[rowid] || {}
3461
+ rowRest.oTop = offsetTop
3462
+ offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight
3463
+ // 是否展开行
3464
+ if (expandColumn && rowExpandedMaps[rowid]) {
3465
+ offsetTop += rowRest.expandHeight || expandOpts.height || 0
3466
+ }
3467
+ }
3468
+ }
3469
+ XEUtils.arrayEach(rowExpandEl.children, reEl => {
3470
+ const expandEl = reEl as HTMLDivElement
3471
+ const rowid = expandEl.getAttribute('rowid') || ''
3472
+ const rowRest = fullAllDataRowIdData[rowid]
3473
+ if (rowRest) {
3474
+ const expandHeight = expandEl.offsetHeight + 1
3475
+ if (scrollYLoad) {
3476
+ expandEl.style.top = toCssUnit(rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight))
3477
+ } else {
3478
+ const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`) as HTMLTableCellElement
3479
+ if (trEl) {
3480
+ expandEl.style.top = toCssUnit(trEl.offsetTop + trEl.offsetHeight)
3481
+ }
3482
+ }
3483
+ if (!isUpdateHeight) {
3484
+ if (rowRest.expandHeight !== expandHeight) {
3485
+ isUpdateHeight = true
3486
+ }
3487
+ }
3488
+ rowRest.expandHeight = expandHeight
3489
+ }
3490
+ })
3491
+ if (isUpdateHeight) {
3492
+ reactData.rowExpandHeightFlag++
3493
+ }
3494
+ }
3495
+ }
3496
+ }
3497
+
3392
3498
  tableMethods = {
3393
3499
  dispatchEvent,
3394
3500
  /**
@@ -3548,7 +3654,7 @@ export default defineComponent({
3548
3654
  XEUtils.eachTree(rows, (childRow, index, items, path, parentItem, nodes) => {
3549
3655
  const rowid = getRowid($xeTable, childRow)
3550
3656
  const parentRow = parentItem || parentRest.row
3551
- const rest = { row: childRow, rowid, seq: -1, index, _index: -1, $index: -1, treeIndex: -1, items, parent: parentRow, level: parentLevel + nodes.length, height: 0, resizeHeight: 0, oTop: 0 }
3657
+ const rest = { row: childRow, rowid, seq: -1, index, _index: -1, $index: -1, treeIndex: -1, items, parent: parentRow, level: parentLevel + nodes.length, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
3552
3658
  fullDataRowIdData[rowid] = rest
3553
3659
  fullAllDataRowIdData[rowid] = rest
3554
3660
  }, { children: childrenField })
@@ -4398,6 +4504,7 @@ export default defineComponent({
4398
4504
  const el = refElem.value
4399
4505
  if (el && el.clientWidth) {
4400
4506
  autoCellWidth()
4507
+ updateRowExpandStyle()
4401
4508
  }
4402
4509
  if (rceTimeout) {
4403
4510
  clearTimeout(rceTimeout)
@@ -6640,7 +6747,7 @@ export default defineComponent({
6640
6747
  }
6641
6748
  let cacheItem = fullAllDataRowIdData[rowid]
6642
6749
  if (isReset || !cacheItem) {
6643
- cacheItem = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0 }
6750
+ cacheItem = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
6644
6751
  }
6645
6752
  cacheItem.row = row
6646
6753
  cacheItem.items = items
@@ -8583,6 +8690,7 @@ export default defineComponent({
8583
8690
  direction,
8584
8691
  ...params
8585
8692
  }
8693
+ updateRowExpandStyle()
8586
8694
  checkLastSyncScroll(isRollX, isRollY)
8587
8695
  if (rowOpts.isHover || highlightHoverRow) {
8588
8696
  $xeTable.clearHoverRow()
@@ -8630,6 +8738,7 @@ export default defineComponent({
8630
8738
  const rightScrollElem = getRefElem(elemStore['right-body-scroll'])
8631
8739
  const headerScrollElem = getRefElem(elemStore['main-header-scroll'])
8632
8740
  const footerScrollElem = getRefElem(elemStore['main-footer-scroll'])
8741
+ const rowExpandEl = refRowExpandElem.value
8633
8742
  if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
8634
8743
  return
8635
8744
  }
@@ -8676,6 +8785,7 @@ export default defineComponent({
8676
8785
  setScrollTop(rightScrollElem, scrollTop)
8677
8786
  }
8678
8787
  setScrollTop(yHandleEl, scrollTop)
8788
+ setScrollTop(rowExpandEl, scrollTop)
8679
8789
  if (scrollYLoad) {
8680
8790
  $xeTable.triggerScrollYEvent(evnt)
8681
8791
  }
@@ -8785,6 +8895,7 @@ export default defineComponent({
8785
8895
  const leftScrollElem = getRefElem(elemStore['left-body-scroll'])
8786
8896
  const bodyScrollElem = getRefElem(elemStore['main-body-scroll'])
8787
8897
  const rightScrollElem = getRefElem(elemStore['right-body-scroll'])
8898
+ const rowExpandEl = refRowExpandElem.value
8788
8899
 
8789
8900
  if (!xHandleEl) {
8790
8901
  return
@@ -8825,6 +8936,7 @@ export default defineComponent({
8825
8936
  setScrollTop(bodyScrollElem, currTopNum)
8826
8937
  setScrollTop(leftScrollElem, currTopNum)
8827
8938
  setScrollTop(rightScrollElem, currTopNum)
8939
+ setScrollTop(rowExpandEl, currTopNum)
8828
8940
  if (scrollYLoad) {
8829
8941
  $xeTable.triggerScrollYEvent(evnt)
8830
8942
  }
@@ -8833,18 +8945,6 @@ export default defineComponent({
8833
8945
  fixed: ''
8834
8946
  })
8835
8947
  })
8836
-
8837
- // internalData.inWheelScroll = true
8838
- // setScrollTop(yHandleEl, scrollTop)
8839
- // setScrollTop(bodyScrollElem, scrollTop)
8840
- // setScrollTop(leftScrollElem, scrollTop)
8841
- // setScrollTop(rightScrollElem, scrollTop)
8842
-
8843
- // loadScrollYData(scrollTop)
8844
- // $xeTable.handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, {
8845
- // type: 'footer',
8846
- // fixed: ''
8847
- // })
8848
8948
  }
8849
8949
  },
8850
8950
  triggerVirtualScrollXEvent (evnt) {
@@ -8894,6 +8994,7 @@ export default defineComponent({
8894
8994
  const leftScrollElem = getRefElem(elemStore['left-body-scroll'])
8895
8995
  const bodyScrollElem = getRefElem(elemStore['main-body-scroll'])
8896
8996
  const rightScrollElem = getRefElem(elemStore['right-body-scroll'])
8997
+ const rowExpandEl = refRowExpandElem.value
8897
8998
  const xHandleEl = refScrollXHandleElem.value
8898
8999
  const wrapperEl = evnt.currentTarget as HTMLDivElement
8899
9000
  const { scrollTop } = wrapperEl
@@ -8909,6 +9010,7 @@ export default defineComponent({
8909
9010
  setScrollTop(bodyScrollElem, scrollTop)
8910
9011
  setScrollTop(leftScrollElem, scrollTop)
8911
9012
  setScrollTop(rightScrollElem, scrollTop)
9013
+ setScrollTop(rowExpandEl, scrollTop)
8912
9014
  if (scrollYLoad) {
8913
9015
  $xeTable.triggerScrollYEvent(evnt)
8914
9016
  }
@@ -8989,9 +9091,10 @@ export default defineComponent({
8989
9091
  },
8990
9092
  // 更新纵向 Y 可视渲染上下剩余空间大小
8991
9093
  updateScrollYSpace () {
8992
- const { isAllOverflow, scrollYLoad } = reactData
9094
+ const { isAllOverflow, scrollYLoad, expandColumn, rowExpandedMaps } = reactData
8993
9095
  const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData
8994
9096
  const { startIndex } = scrollYStore
9097
+ const expandOpts = computeExpandOpts.value
8995
9098
  const rowOpts = computeRowOpts.value
8996
9099
  const cellOpts = computeCellOpts.value
8997
9100
  const defaultRowHeight = computeDefaultRowHeight.value
@@ -9002,7 +9105,7 @@ export default defineComponent({
9002
9105
 
9003
9106
  if (scrollYLoad) {
9004
9107
  const isCustomCellHeight = isResizeCellHeight || cellOpts.height || rowOpts.height
9005
- if (!isCustomCellHeight && isAllOverflow) {
9108
+ if (!isCustomCellHeight && !expandColumn && isAllOverflow) {
9006
9109
  ySpaceHeight = afterFullData.length * defaultRowHeight
9007
9110
  topSpaceHeight = Math.max(0, startIndex * defaultRowHeight)
9008
9111
  } else {
@@ -9011,12 +9114,20 @@ export default defineComponent({
9011
9114
  const rowid = getRowid($xeTable, row)
9012
9115
  const rowRest = fullAllDataRowIdData[rowid] || {}
9013
9116
  ySpaceHeight += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight
9117
+ // 是否展开行
9118
+ if (expandColumn && rowExpandedMaps[rowid]) {
9119
+ ySpaceHeight += rowRest.expandHeight || expandOpts.height || 0
9120
+ }
9014
9121
  }
9015
9122
  for (let i = 0; i < startIndex; i++) {
9016
9123
  const row = afterFullData[i]
9017
9124
  const rowid = getRowid($xeTable, row)
9018
9125
  const rowRest = fullAllDataRowIdData[rowid] || {}
9019
9126
  topSpaceHeight += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight
9127
+ // 是否展开行
9128
+ if (expandColumn && rowExpandedMaps[rowid]) {
9129
+ topSpaceHeight += rowRest.expandHeight || expandOpts.height || 0
9130
+ }
9020
9131
  }
9021
9132
  }
9022
9133
  } else {
@@ -9041,6 +9152,10 @@ export default defineComponent({
9041
9152
  if (scrollYSpaceEl) {
9042
9153
  scrollYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : ''
9043
9154
  }
9155
+ const rowExpandYSpaceEl = refRowExpandYSpaceElem.value
9156
+ if (rowExpandYSpaceEl) {
9157
+ rowExpandYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : ''
9158
+ }
9044
9159
  return nextTick().then(() => {
9045
9160
  updateStyle()
9046
9161
  })
@@ -9048,6 +9163,7 @@ export default defineComponent({
9048
9163
  updateScrollXData () {
9049
9164
  const { isAllOverflow } = reactData
9050
9165
  handleTableColumn()
9166
+ $xeTable.updateScrollYSpace()
9051
9167
  return nextTick().then(() => {
9052
9168
  handleTableColumn()
9053
9169
  $xeTable.updateScrollXSpace()
@@ -9058,6 +9174,7 @@ export default defineComponent({
9058
9174
  },
9059
9175
  updateScrollYData () {
9060
9176
  $xeTable.handleTableData()
9177
+ $xeTable.updateScrollYSpace()
9061
9178
  return nextTick().then(() => {
9062
9179
  $xeTable.handleTableData()
9063
9180
  $xeTable.updateScrollYSpace()
@@ -9290,6 +9407,73 @@ export default defineComponent({
9290
9407
  return renderEmptyElement($xeTable)
9291
9408
  }
9292
9409
 
9410
+ const renderRowExpandedVNs = () => {
9411
+ const { treeConfig } = props
9412
+ const { expandColumn } = reactData
9413
+ const tableRowExpandedList = computeTableRowExpandedList.value
9414
+ const expandOpts = computeExpandOpts.value
9415
+ const { mode } = expandOpts
9416
+ if (mode !== 'fixed') {
9417
+ return renderEmptyElement($xeTable)
9418
+ }
9419
+ const expandVNs = [
9420
+ h('div', {
9421
+ key: 'repY',
9422
+ ref: refRowExpandYSpaceElem
9423
+ })
9424
+ ]
9425
+
9426
+ if (expandColumn) {
9427
+ tableRowExpandedList.forEach((row) => {
9428
+ const expandOpts = computeExpandOpts.value
9429
+ const { height: expandHeight, padding } = expandOpts
9430
+ const { fullAllDataRowIdData } = internalData
9431
+ const treeOpts = computeTreeOpts.value
9432
+ const { transform, seqMode } = treeOpts
9433
+ const cellStyle: Record<string, string> = {}
9434
+ const rowid = getRowid($xeTable, row)
9435
+ const rest = fullAllDataRowIdData[rowid]
9436
+ let rowLevel = 0
9437
+ let seq: string | number = -1
9438
+ let _rowIndex = 0
9439
+ const rowIndex = $xeTable.getRowIndex(row)
9440
+ const $rowIndex = $xeTable.getVMRowIndex(row)
9441
+ if (rest) {
9442
+ rowLevel = rest.level
9443
+ if (treeConfig && transform && seqMode === 'increasing') {
9444
+ seq = rest._index + 1
9445
+ } else {
9446
+ seq = rest.seq
9447
+ }
9448
+ _rowIndex = rest._index
9449
+ }
9450
+ if (expandHeight) {
9451
+ cellStyle.height = `${expandHeight}px`
9452
+ }
9453
+ if (treeConfig) {
9454
+ cellStyle.paddingLeft = `${(rowLevel * treeOpts.indent) + 30}px`
9455
+ }
9456
+ const expandParams = { $table: $xeTable, seq, column: expandColumn, fixed: '', type: 'body', level: rowLevel, row, rowIndex, $rowIndex, _rowIndex }
9457
+ expandVNs.push(
9458
+ h('div', {
9459
+ key: rowid,
9460
+ class: ['vxe-body--row-expanded-cell', {
9461
+ 'is--padding': padding,
9462
+ 'is--ellipsis': expandHeight
9463
+ }],
9464
+ rowid,
9465
+ style: cellStyle
9466
+ }, expandColumn.renderData(expandParams))
9467
+ )
9468
+ })
9469
+ }
9470
+
9471
+ return h('div', {
9472
+ ref: refRowExpandElem,
9473
+ class: 'vxe-table--row-expanded-wrapper'
9474
+ }, expandVNs)
9475
+ }
9476
+
9293
9477
  const renderScrollX = () => {
9294
9478
  return h('div', {
9295
9479
  key: 'vsx',
@@ -9355,11 +9539,20 @@ export default defineComponent({
9355
9539
 
9356
9540
  const renderViewport = () => {
9357
9541
  const { showHeader, showFooter } = props
9358
- const { overflowX, tableData, tableColumn, tableGroupColumn, footerTableData, columnStore } = reactData
9542
+ const { overflowX, scrollYLoad, tableData, tableColumn, tableGroupColumn, footerTableData, columnStore } = reactData
9359
9543
  const { leftList, rightList } = columnStore
9544
+ const leftFixedWidth = computeLeftFixedWidth.value
9545
+ const rightFixedWidth = computeRightFixedWidth.value
9546
+
9547
+ const ons: Record<string, any> = {}
9548
+ if (scrollYLoad || leftFixedWidth || rightFixedWidth) {
9549
+ ons.onWheel = $xeTable.triggerBodyWheelEvent
9550
+ }
9551
+
9360
9552
  return h('div', {
9361
9553
  ref: refTableViewportElem,
9362
- class: 'vxe-table--viewport-wrapper'
9554
+ class: 'vxe-table--viewport-wrapper',
9555
+ ...ons
9363
9556
  }, [
9364
9557
  h('div', {
9365
9558
  class: 'vxe-table--main-wrapper'
@@ -9399,7 +9592,8 @@ export default defineComponent({
9399
9592
  }, [
9400
9593
  leftList && leftList.length && overflowX ? renderFixed('left') : renderEmptyElement($xeTable),
9401
9594
  rightList && rightList.length && overflowX ? renderFixed('right') : renderEmptyElement($xeTable)
9402
- ])
9595
+ ]),
9596
+ renderRowExpandedVNs()
9403
9597
  ])
9404
9598
  }
9405
9599
 
@@ -9863,28 +10057,10 @@ export default defineComponent({
9863
10057
  })
9864
10058
 
9865
10059
  onMounted(() => {
9866
- const { rowHeightStore } = reactData
9867
- const varEl = refVarElem.value
9868
10060
  const columnOpts = computeColumnOpts.value
9869
10061
  const rowOpts = computeRowOpts.value
9870
10062
  const customOpts = computeCustomOpts.value
9871
10063
 
9872
- if (varEl) {
9873
- const [defEl, mediumEl, smallEl, miniEl] = varEl.children
9874
- if (defEl) {
9875
- rowHeightStore.default = defEl.clientHeight
9876
- }
9877
- if (mediumEl) {
9878
- rowHeightStore.medium = mediumEl.clientHeight
9879
- }
9880
- if (smallEl) {
9881
- rowHeightStore.small = smallEl.clientHeight
9882
- }
9883
- if (miniEl) {
9884
- rowHeightStore.mini = miniEl.clientHeight
9885
- }
9886
- }
9887
-
9888
10064
  if (columnOpts.drag || rowOpts.drag || customOpts.allowSort) {
9889
10065
  initTpImg()
9890
10066
  }
@@ -1629,6 +1629,32 @@
1629
1629
  }
1630
1630
 
1631
1631
  /*展开行*/
1632
+ .vxe-table--row-expanded-wrapper {
1633
+ position: absolute;
1634
+ top: 0;
1635
+ left: 0;
1636
+ width: 100%;
1637
+ height: 100%;
1638
+ overflow: hidden;
1639
+ pointer-events: none;
1640
+ }
1641
+ .vxe-body--row-expanded-cell {
1642
+ position: absolute;
1643
+ z-index: 5;
1644
+ top: 0;
1645
+ left: 0;
1646
+ width: 100%;
1647
+ overflow: auto;
1648
+ background-color: var(--vxe-ui-layout-background-color);
1649
+ pointer-events: all;
1650
+ &.is--padding {
1651
+ padding: var(--vxe-ui-table-expand-padding-default);
1652
+ }
1653
+ }
1654
+ .vxe-body--row-expanded-place-column {
1655
+ border-bottom: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1656
+ border-right: var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color);
1657
+ }
1632
1658
  .vxe-table--expanded {
1633
1659
  cursor: pointer;
1634
1660
  .vxe-table--expand-btn {