vxe-table 4.8.0 → 4.8.1

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 (118) hide show
  1. package/es/locale/lang/en-US.js +4 -2
  2. package/es/locale/lang/es-ES.js +4 -2
  3. package/es/locale/lang/hu-HU.js +4 -2
  4. package/es/locale/lang/ja-JP.js +4 -2
  5. package/es/locale/lang/ko-KR.js +4 -2
  6. package/es/locale/lang/pt-BR.js +4 -2
  7. package/es/locale/lang/ru-RU.js +4 -2
  8. package/es/locale/lang/uk-UA.js +4 -2
  9. package/es/locale/lang/vi-VN.js +4 -2
  10. package/es/locale/lang/zh-CHT.js +4 -2
  11. package/es/locale/lang/zh-CN.js +4 -2
  12. package/es/style.css +1 -1
  13. package/es/style.min.css +1 -1
  14. package/es/table/module/edit/hook.js +7 -4
  15. package/es/table/src/body.js +22 -8
  16. package/es/table/src/cell.js +53 -24
  17. package/es/table/src/column.js +3 -1
  18. package/es/table/src/columnInfo.js +1 -0
  19. package/es/table/src/emits.js +3 -0
  20. package/es/table/src/props.js +2 -0
  21. package/es/table/src/table.js +241 -40
  22. package/es/table/style.css +74 -2
  23. package/es/table/style.min.css +1 -1
  24. package/es/ui/index.js +4 -1
  25. package/es/ui/src/log.js +1 -1
  26. package/es/vxe-table/style.css +74 -2
  27. package/es/vxe-table/style.min.css +1 -1
  28. package/helper/vetur/attributes.json +1 -1
  29. package/helper/vetur/tags.json +1 -1
  30. package/lib/index.umd.js +359 -82
  31. package/lib/index.umd.min.js +1 -1
  32. package/lib/locale/lang/en-US.js +4 -2
  33. package/lib/locale/lang/en-US.min.js +1 -1
  34. package/lib/locale/lang/en-US.umd.js +4 -2
  35. package/lib/locale/lang/es-ES.js +4 -2
  36. package/lib/locale/lang/es-ES.min.js +1 -1
  37. package/lib/locale/lang/es-ES.umd.js +4 -2
  38. package/lib/locale/lang/hu-HU.js +4 -2
  39. package/lib/locale/lang/hu-HU.min.js +1 -1
  40. package/lib/locale/lang/hu-HU.umd.js +4 -2
  41. package/lib/locale/lang/ja-JP.js +4 -2
  42. package/lib/locale/lang/ja-JP.min.js +1 -1
  43. package/lib/locale/lang/ja-JP.umd.js +4 -2
  44. package/lib/locale/lang/ko-KR.js +4 -2
  45. package/lib/locale/lang/ko-KR.min.js +1 -1
  46. package/lib/locale/lang/ko-KR.umd.js +4 -2
  47. package/lib/locale/lang/pt-BR.js +4 -2
  48. package/lib/locale/lang/pt-BR.min.js +1 -1
  49. package/lib/locale/lang/pt-BR.umd.js +4 -2
  50. package/lib/locale/lang/ru-RU.js +4 -2
  51. package/lib/locale/lang/ru-RU.min.js +1 -1
  52. package/lib/locale/lang/ru-RU.umd.js +4 -2
  53. package/lib/locale/lang/uk-UA.js +4 -2
  54. package/lib/locale/lang/uk-UA.min.js +1 -1
  55. package/lib/locale/lang/uk-UA.umd.js +4 -2
  56. package/lib/locale/lang/vi-VN.js +4 -2
  57. package/lib/locale/lang/vi-VN.min.js +1 -1
  58. package/lib/locale/lang/zh-CHT.js +4 -2
  59. package/lib/locale/lang/zh-CHT.min.js +1 -1
  60. package/lib/locale/lang/zh-CN.js +4 -2
  61. package/lib/locale/lang/zh-CN.min.js +1 -1
  62. package/lib/locale/lang/zh-CN.umd.js +4 -2
  63. package/lib/style.css +1 -1
  64. package/lib/style.min.css +1 -1
  65. package/lib/table/module/edit/hook.js +8 -4
  66. package/lib/table/module/edit/hook.min.js +1 -1
  67. package/lib/table/src/body.js +18 -5
  68. package/lib/table/src/body.min.js +1 -1
  69. package/lib/table/src/cell.js +60 -24
  70. package/lib/table/src/cell.min.js +1 -1
  71. package/lib/table/src/column.js +3 -1
  72. package/lib/table/src/column.min.js +1 -1
  73. package/lib/table/src/columnInfo.js +1 -0
  74. package/lib/table/src/columnInfo.min.js +1 -1
  75. package/lib/table/src/emits.js +1 -1
  76. package/lib/table/src/emits.min.js +1 -1
  77. package/lib/table/src/props.js +2 -0
  78. package/lib/table/src/props.min.js +1 -1
  79. package/lib/table/src/table.js +258 -43
  80. package/lib/table/src/table.min.js +1 -1
  81. package/lib/table/style/style.css +74 -2
  82. package/lib/table/style/style.min.css +1 -1
  83. package/lib/ui/index.js +4 -1
  84. package/lib/ui/index.min.js +1 -1
  85. package/lib/ui/src/log.js +1 -1
  86. package/lib/ui/src/log.min.js +1 -1
  87. package/lib/vxe-table/style/style.css +74 -2
  88. package/lib/vxe-table/style/style.min.css +1 -1
  89. package/package.json +2 -2
  90. package/packages/locale/lang/en-US.ts +4 -2
  91. package/packages/locale/lang/es-ES.ts +4 -2
  92. package/packages/locale/lang/hu-HU.ts +4 -2
  93. package/packages/locale/lang/ja-JP.ts +4 -2
  94. package/packages/locale/lang/ko-KR.ts +4 -2
  95. package/packages/locale/lang/pt-BR.ts +4 -2
  96. package/packages/locale/lang/ru-RU.ts +4 -2
  97. package/packages/locale/lang/uk-UA.ts +4 -2
  98. package/packages/locale/lang/vi-VN.ts +4 -2
  99. package/packages/locale/lang/zh-CHT.ts +4 -2
  100. package/packages/locale/lang/zh-CN.ts +4 -2
  101. package/packages/table/module/custom/panel.ts +1 -1
  102. package/packages/table/module/edit/hook.ts +7 -4
  103. package/packages/table/src/body.ts +22 -8
  104. package/packages/table/src/cell.ts +57 -24
  105. package/packages/table/src/column.ts +3 -1
  106. package/packages/table/src/columnInfo.ts +1 -0
  107. package/packages/table/src/emits.ts +4 -0
  108. package/packages/table/src/props.ts +2 -0
  109. package/packages/table/src/table.ts +258 -42
  110. package/packages/ui/index.ts +3 -0
  111. package/styles/components/table-module/custom.scss +9 -3
  112. package/styles/components/table.scss +80 -0
  113. /package/es/{iconfont.1730681238555.ttf → iconfont.1730873064176.ttf} +0 -0
  114. /package/es/{iconfont.1730681238555.woff → iconfont.1730873064176.woff} +0 -0
  115. /package/es/{iconfont.1730681238555.woff2 → iconfont.1730873064176.woff2} +0 -0
  116. /package/lib/{iconfont.1730681238555.ttf → iconfont.1730873064176.ttf} +0 -0
  117. /package/lib/{iconfont.1730681238555.woff → iconfont.1730873064176.woff} +0 -0
  118. /package/lib/{iconfont.1730681238555.woff2 → iconfont.1730873064176.woff2} +0 -0
@@ -18,8 +18,8 @@ import TableImportPanelComponent from '../module/export/import-panel'
18
18
  import TableExportPanelComponent from '../module/export/export-panel'
19
19
  import TableMenuPanelComponent from '../module/menu/panel'
20
20
 
21
- import type { VxeLoadingComponent, VxeTooltipInstance, VxeTooltipComponent, VxeTabsConstructor, VxeTabsPrivateMethods } from 'vxe-pc-ui'
22
- import type { VxeGridConstructor, VxeGridPrivateMethods, VxeTableConstructor, TableReactData, TableInternalData, VxeTablePropTypes, VxeToolbarConstructor, TablePrivateMethods, VxeTablePrivateRef, VxeTablePrivateComputed, VxeTablePrivateMethods, TableMethods, VxeTableMethods, VxeTableDefines, VxeTableProps, VxeColumnPropTypes } from '../../../types'
21
+ import type { VxeLoadingComponent, VxeTooltipInstance, VxeTooltipComponent, VxeTabsConstructor, VxeTabsPrivateMethods, ValueOf } from 'vxe-pc-ui'
22
+ import type { VxeGridConstructor, VxeGridPrivateMethods, VxeTableConstructor, TableReactData, TableInternalData, VxeTablePropTypes, VxeToolbarConstructor, TablePrivateMethods, VxeTablePrivateRef, VxeTablePrivateComputed, VxeTablePrivateMethods, TableMethods, VxeTableMethods, VxeTableDefines, VxeTableEmits, VxeTableProps, VxeColumnPropTypes } from '../../../types'
23
23
 
24
24
  const { getConfig, getI18n, renderer, formats, createEvent, globalResize, interceptor, hooks, globalEvents, GLOBAL_EVENT_KEYS, useFns } = VxeUI
25
25
 
@@ -260,6 +260,9 @@ export default defineComponent({
260
260
  isFooter: false
261
261
  },
262
262
  scrollVMLoading: false,
263
+ isDragRowMove: false,
264
+ dragRow: null,
265
+ dragTipText: '',
263
266
  _isResize: false,
264
267
  _isLoading: false
265
268
  })
@@ -335,6 +338,8 @@ export default defineComponent({
335
338
  columnStatusMaps: {},
336
339
  // 行选取状态
337
340
  rowStatusMaps: {},
341
+ // prevDragRow: null,
342
+
338
343
  inited: false,
339
344
  tooltipTimeout: null,
340
345
  initStatus: false,
@@ -367,6 +372,8 @@ export default defineComponent({
367
372
  const refCellResizeBar = ref() as Ref<HTMLDivElement>
368
373
  const refEmptyPlaceholder = ref() as Ref<HTMLDivElement>
369
374
 
375
+ const refRowDragTipElem = ref<HTMLDivElement>()
376
+
370
377
  const refScrollXVirtualElem = ref<HTMLDivElement>()
371
378
  const refScrollYVirtualElem = ref<HTMLDivElement>()
372
379
  const refScrollXHandleElem = ref<HTMLDivElement>()
@@ -421,6 +428,10 @@ export default defineComponent({
421
428
  return Object.assign({}, getConfig().table.rowConfig, props.rowConfig) as VxeTablePropTypes.RowOpts
422
429
  })
423
430
 
431
+ const computeDragOpts = computed(() => {
432
+ return Object.assign({}, getConfig().table.dragConfig, props.dragConfig) as VxeTablePropTypes.DragConfig
433
+ })
434
+
424
435
  const computeResizeOpts = computed(() => {
425
436
  return Object.assign({}, getConfig().table.resizeConfig, props.resizeConfig) as VxeTablePropTypes.ResizeOpts
426
437
  })
@@ -673,6 +684,7 @@ export default defineComponent({
673
684
  computeColumnOpts,
674
685
  computeCellOpts,
675
686
  computeRowOpts,
687
+ computeDragOpts,
676
688
  computeResizeOpts,
677
689
  computeResizableOpts,
678
690
  computeSeqOpts,
@@ -2846,7 +2858,7 @@ export default defineComponent({
2846
2858
  const handleCheckAllEvent = (evnt: Event | null, value: any) => {
2847
2859
  handleCheckedAllCheckboxRow(value)
2848
2860
  if (evnt) {
2849
- tableMethods.dispatchEvent('checkbox-all', {
2861
+ dispatchEvent('checkbox-all', {
2850
2862
  records: tableMethods.getCheckboxRecords(),
2851
2863
  reserves: tableMethods.getCheckboxReserveRecords(),
2852
2864
  indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
@@ -2909,22 +2921,29 @@ export default defineComponent({
2909
2921
  loadScrollYData()
2910
2922
  }, 20, { leading: false, trailing: true })
2911
2923
 
2912
- const scrollXEvent = (evnt: Event) => {
2913
- const wrapperEl = evnt.currentTarget as HTMLDivElement
2924
+ const handleSyncScrollX = (scrollLeft: number) => {
2914
2925
  const tableHeader = refTableHeader.value
2915
2926
  const tableBody = refTableBody.value
2916
2927
  const tableFooter = refTableFooter.value
2917
2928
  const bodyElem = tableBody.$el as HTMLDivElement
2918
2929
  const headerElem = tableHeader ? tableHeader.$el as HTMLDivElement : null
2919
2930
  const footerElem = tableFooter ? tableFooter.$el as HTMLDivElement : null
2931
+ setScrollLeft(bodyElem, scrollLeft)
2932
+ setScrollLeft(headerElem, scrollLeft)
2933
+ setScrollLeft(footerElem, scrollLeft)
2934
+ setScrollLeft(bodyElem, scrollLeft)
2935
+ setScrollLeft(headerElem, scrollLeft)
2936
+ setScrollLeft(footerElem, scrollLeft)
2937
+ }
2938
+
2939
+ const scrollXEvent = (evnt: Event) => {
2940
+ const wrapperEl = evnt.currentTarget as HTMLDivElement
2920
2941
  const { scrollTop, scrollLeft } = wrapperEl
2921
2942
  const isRollX = true
2922
2943
  const isRollY = false
2923
2944
  internalData.lastScrollLeft = scrollLeft
2924
2945
  reactData.lastScrollTime = Date.now()
2925
- setScrollLeft(bodyElem, scrollLeft)
2926
- setScrollLeft(headerElem, scrollLeft)
2927
- setScrollLeft(footerElem, scrollLeft)
2946
+ handleSyncScrollX(scrollLeft)
2928
2947
  $xeTable.triggerScrollXEvent(evnt)
2929
2948
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
2930
2949
  type: 'table',
@@ -2938,22 +2957,26 @@ export default defineComponent({
2938
2957
  tablePrivateMethods.updateScrollYSpace()
2939
2958
  }, 1000, { leading: false, trailing: true })
2940
2959
 
2941
- const scrollYEvent = (evnt: Event) => {
2942
- const wrapperEl = evnt.currentTarget as HTMLDivElement
2960
+ const handleSyncScrollY = (scrollTop: number) => {
2943
2961
  const tableBody = refTableBody.value
2944
2962
  const leftBody = refTableLeftBody.value
2945
2963
  const rightBody = refTableRightBody.value
2946
2964
  const bodyElem = tableBody.$el as HTMLDivElement
2947
2965
  const leftElem = leftBody ? leftBody.$el as HTMLDivElement : null
2948
2966
  const rightElem = rightBody ? rightBody.$el as HTMLDivElement : null
2967
+ setScrollTop(bodyElem, scrollTop)
2968
+ setScrollTop(leftElem, scrollTop)
2969
+ setScrollTop(rightElem, scrollTop)
2970
+ }
2971
+
2972
+ const scrollYEvent = (evnt: Event) => {
2973
+ const wrapperEl = evnt.currentTarget as HTMLDivElement
2949
2974
  const { scrollTop, scrollLeft } = wrapperEl
2950
2975
  const isRollX = false
2951
2976
  const isRollY = true
2952
2977
  internalData.lastScrollTop = scrollTop
2953
2978
  reactData.lastScrollTime = Date.now()
2954
- setScrollTop(bodyElem, scrollTop)
2955
- setScrollTop(leftElem, scrollTop)
2956
- setScrollTop(rightElem, scrollTop)
2979
+ handleSyncScrollY(scrollTop)
2957
2980
  $xeTable.triggerScrollYEvent(evnt)
2958
2981
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
2959
2982
  type: 'table',
@@ -2965,10 +2988,12 @@ export default defineComponent({
2965
2988
 
2966
2989
  let keyCtxTimeout: any
2967
2990
 
2991
+ const dispatchEvent = (type: ValueOf<VxeTableEmits>, params: Record<string, any>, evnt: Event | null) => {
2992
+ emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params))
2993
+ }
2994
+
2968
2995
  tableMethods = {
2969
- dispatchEvent (type, params, evnt) {
2970
- emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params))
2971
- },
2996
+ dispatchEvent,
2972
2997
  /**
2973
2998
  * 重置表格的一切数据状态
2974
2999
  */
@@ -4291,7 +4316,7 @@ export default defineComponent({
4291
4316
  visible: false
4292
4317
  })
4293
4318
  if (visible) {
4294
- $xeTable.dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null)
4319
+ dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null)
4295
4320
  }
4296
4321
  return nextTick()
4297
4322
  },
@@ -5101,7 +5126,7 @@ export default defineComponent({
5101
5126
  tablePrivateMethods.preventEvent(evnt, 'event.clearAreas', {}, () => {
5102
5127
  $xeTable.clearCellAreas()
5103
5128
  $xeTable.clearCopyCellArea()
5104
- $xeTable.dispatchEvent('clear-cell-area-selection', { cellAreas }, evnt)
5129
+ dispatchEvent('clear-cell-area-selection', { cellAreas }, evnt)
5105
5130
  })
5106
5131
  }
5107
5132
  }
@@ -5155,7 +5180,7 @@ export default defineComponent({
5155
5180
  const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE)
5156
5181
  if (isEsc) {
5157
5182
  tablePrivateMethods.preventEvent(evnt, 'event.keydown', null, () => {
5158
- tableMethods.dispatchEvent('keydown-start', {}, evnt)
5183
+ dispatchEvent('keydown-start', {}, evnt)
5159
5184
  if (keyboardConfig && mouseConfig && mouseOpts.area && $xeTable.handleKeyboardEvent) {
5160
5185
  $xeTable.handleKeyboardEvent(evnt)
5161
5186
  } else if (actived.row || filterStore.visible || ctxMenuStore.visible) {
@@ -5177,8 +5202,8 @@ export default defineComponent({
5177
5202
  }
5178
5203
  }
5179
5204
  }
5180
- tableMethods.dispatchEvent('keydown', {}, evnt)
5181
- tableMethods.dispatchEvent('keydown-end', {}, evnt)
5205
+ dispatchEvent('keydown', {}, evnt)
5206
+ dispatchEvent('keydown-end', {}, evnt)
5182
5207
  })
5183
5208
  }
5184
5209
  }
@@ -5358,7 +5383,7 @@ export default defineComponent({
5358
5383
  }
5359
5384
  // 如果按下 del 键,更新表尾数据
5360
5385
  tableMethods.updateFooter()
5361
- $xeTable.dispatchEvent('cell-delete-value', params, evnt)
5386
+ dispatchEvent('cell-delete-value', params, evnt)
5362
5387
  }
5363
5388
  }
5364
5389
  } else if (hasBackspaceKey && keyboardConfig && keyboardOpts.isBack && isEnableConf(editConfig) && (selected.row || selected.column)) {
@@ -5382,7 +5407,7 @@ export default defineComponent({
5382
5407
  setCellValue(selected.row, selected.column, null)
5383
5408
  $xeTable.handleEdit(selected.args, evnt)
5384
5409
  }
5385
- $xeTable.dispatchEvent('cell-backspace-value', params, evnt)
5410
+ dispatchEvent('cell-backspace-value', params, evnt)
5386
5411
  }
5387
5412
  }
5388
5413
  }
@@ -5429,7 +5454,7 @@ export default defineComponent({
5429
5454
  }
5430
5455
  }
5431
5456
  }
5432
- tableMethods.dispatchEvent('keydown', {}, evnt)
5457
+ dispatchEvent('keydown', {}, evnt)
5433
5458
  })
5434
5459
  }
5435
5460
  }
@@ -5447,7 +5472,7 @@ export default defineComponent({
5447
5472
  $xeTable.handlePasteCellAreaEvent(evnt)
5448
5473
  }
5449
5474
  }
5450
- tableMethods.dispatchEvent('paste', {}, evnt)
5475
+ dispatchEvent('paste', {}, evnt)
5451
5476
  }
5452
5477
  }
5453
5478
 
@@ -5464,7 +5489,7 @@ export default defineComponent({
5464
5489
  $xeTable.handleCopyCellAreaEvent(evnt)
5465
5490
  }
5466
5491
  }
5467
- tableMethods.dispatchEvent('copy', {}, evnt)
5492
+ dispatchEvent('copy', {}, evnt)
5468
5493
  }
5469
5494
  }
5470
5495
 
@@ -5481,7 +5506,7 @@ export default defineComponent({
5481
5506
  $xeTable.handleCutCellAreaEvent(evnt)
5482
5507
  }
5483
5508
  }
5484
- tableMethods.dispatchEvent('cut', {}, evnt)
5509
+ dispatchEvent('cut', {}, evnt)
5485
5510
  }
5486
5511
  }
5487
5512
 
@@ -5509,6 +5534,55 @@ export default defineComponent({
5509
5534
  }
5510
5535
  }
5511
5536
 
5537
+ const clearRowDropOrigin = () => {
5538
+ const el = refElem.value
5539
+ if (el) {
5540
+ const clss = 'row--drag-origin'
5541
+ XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
5542
+ (elem as HTMLTableCellElement).draggable = false
5543
+ removeClass(elem, clss)
5544
+ })
5545
+ }
5546
+ }
5547
+
5548
+ const clearRowDropTarget = () => {
5549
+ const el = refElem.value
5550
+ if (el) {
5551
+ const clss = 'row--drag-active-target'
5552
+ XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
5553
+ removeClass(elem, clss)
5554
+ })
5555
+ }
5556
+ }
5557
+
5558
+ const showRowDropTip = (evnt: DragEvent | MouseEvent) => {
5559
+ const rdTipEl = refRowDragTipElem.value
5560
+ if (!rdTipEl) {
5561
+ return
5562
+ }
5563
+ const el = refElem.value
5564
+ if (!el) {
5565
+ return
5566
+ }
5567
+ if (rdTipEl) {
5568
+ const wrapperRect = el.getBoundingClientRect()
5569
+ rdTipEl.style.display = 'block'
5570
+ rdTipEl.style.top = `${Math.min(el.clientHeight - el.scrollTop - rdTipEl.clientHeight, evnt.clientY - wrapperRect.y)}px`
5571
+ rdTipEl.style.left = `${Math.min(el.clientWidth - el.scrollLeft - rdTipEl.clientWidth - 16, evnt.clientX - wrapperRect.x)}px`
5572
+ }
5573
+ }
5574
+
5575
+ const hideRowDropTip = () => {
5576
+ const rdTipEl = refRowDragTipElem.value
5577
+ if (rdTipEl) {
5578
+ rdTipEl.style.display = ''
5579
+ }
5580
+ }
5581
+
5582
+ const updateRowDropTipContent = (tdEl: HTMLElement) => {
5583
+ reactData.dragTipText = tdEl.textContent || ''
5584
+ }
5585
+
5512
5586
  /**
5513
5587
  * 处理显示 tooltip
5514
5588
  * @param {Event} evnt 事件
@@ -6254,13 +6328,13 @@ export default defineComponent({
6254
6328
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
6255
6329
  tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column))
6256
6330
  }
6257
- tableMethods.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt)
6331
+ dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt)
6258
6332
  if (columnOpts.isCurrent || props.highlightCurrentColumn) {
6259
6333
  tablePrivateMethods.triggerCurrentColumnEvent(evnt, params)
6260
6334
  }
6261
6335
  },
6262
6336
  triggerHeaderCellDblclickEvent (evnt, params) {
6263
- tableMethods.dispatchEvent('header-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt)
6337
+ dispatchEvent('header-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt)
6264
6338
  },
6265
6339
  /**
6266
6340
  * 列点击事件
@@ -6339,7 +6413,7 @@ export default defineComponent({
6339
6413
  }
6340
6414
  }
6341
6415
  }
6342
- tableMethods.dispatchEvent('cell-click', params, evnt)
6416
+ dispatchEvent('cell-click', params, evnt)
6343
6417
  },
6344
6418
  /**
6345
6419
  * 列双击点击事件
@@ -6369,7 +6443,7 @@ export default defineComponent({
6369
6443
  }
6370
6444
  }
6371
6445
  }
6372
- tableMethods.dispatchEvent('cell-dblclick', params, evnt)
6446
+ dispatchEvent('cell-dblclick', params, evnt)
6373
6447
  },
6374
6448
  handleToggleCheckRowEvent (evnt, params) {
6375
6449
  const { selectCheckboxMaps } = reactData
@@ -6411,7 +6485,7 @@ export default defineComponent({
6411
6485
  tableMethods.setAllCheckboxRow(false)
6412
6486
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
6413
6487
  handleCheckedCheckboxRow(rangeRows, true, false)
6414
- tableMethods.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
6488
+ dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
6415
6489
  return
6416
6490
  }
6417
6491
  }
@@ -6419,7 +6493,7 @@ export default defineComponent({
6419
6493
  if (!checkMethod || checkMethod({ row })) {
6420
6494
  tablePrivateMethods.handleSelectRow(params, value)
6421
6495
  tablePrivateMethods.checkSelectionStatus()
6422
- tableMethods.dispatchEvent('checkbox-change', Object.assign({
6496
+ dispatchEvent('checkbox-change', Object.assign({
6423
6497
  records: tableMethods.getCheckboxRecords(),
6424
6498
  reserves: tableMethods.getCheckboxReserveRecords(),
6425
6499
  indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
@@ -6465,7 +6539,7 @@ export default defineComponent({
6465
6539
  }
6466
6540
  }
6467
6541
  if (isChange) {
6468
- tableMethods.dispatchEvent('radio-change', { oldValue, newValue, ...params }, evnt)
6542
+ dispatchEvent('radio-change', { oldValue, newValue, ...params }, evnt)
6469
6543
  }
6470
6544
  },
6471
6545
  triggerCurrentColumnEvent (evnt, params) {
@@ -6485,7 +6559,7 @@ export default defineComponent({
6485
6559
  if (!currentMethod || currentMethod({ row: newValue })) {
6486
6560
  tableMethods.setCurrentRow(newValue)
6487
6561
  if (isChange) {
6488
- tableMethods.dispatchEvent('current-change', { oldValue, newValue, ...params }, evnt)
6562
+ dispatchEvent('current-change', { oldValue, newValue, ...params }, evnt)
6489
6563
  }
6490
6564
  }
6491
6565
  },
@@ -6507,7 +6581,7 @@ export default defineComponent({
6507
6581
  const columnIndex = tableMethods.getColumnIndex(column)
6508
6582
  const $columnIndex = tableMethods.getVMColumnIndex(column)
6509
6583
  tableMethods.setRowExpand(row, expanded)
6510
- tableMethods.dispatchEvent('toggle-row-expand', {
6584
+ dispatchEvent('toggle-row-expand', {
6511
6585
  expanded,
6512
6586
  column,
6513
6587
  columnIndex,
@@ -6536,7 +6610,7 @@ export default defineComponent({
6536
6610
  const columnIndex = tableMethods.getColumnIndex(column)
6537
6611
  const $columnIndex = tableMethods.getVMColumnIndex(column)
6538
6612
  tableMethods.setTreeExpand(row, expanded)
6539
- tableMethods.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt)
6613
+ dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt)
6540
6614
  }
6541
6615
  },
6542
6616
  /**
@@ -6557,9 +6631,141 @@ export default defineComponent({
6557
6631
  if (mouseConfig && mouseOpts.area && $xeTable.handleSortEvent) {
6558
6632
  $xeTable.handleSortEvent(evnt, params)
6559
6633
  }
6560
- tableMethods.dispatchEvent('sort-change', params, evnt)
6634
+ dispatchEvent('sort-change', params, evnt)
6561
6635
  }
6562
6636
  },
6637
+ handleRowDragDragstartEvent (evnt) {
6638
+ const img = new Image()
6639
+ if (evnt.dataTransfer) {
6640
+ evnt.dataTransfer.setDragImage(img, 0, 0)
6641
+ }
6642
+ },
6643
+ handleRowDragDragendEvent (evnt) {
6644
+ const { treeConfig } = props
6645
+ const rowOpts = computeRowOpts.value
6646
+ const { dragEndMethod } = rowOpts
6647
+ const treeOpts = computeTreeOpts.value
6648
+ const { transform } = treeOpts
6649
+ const { dragRow } = reactData
6650
+ const { afterFullData, tableFullData, prevDragRow, prevDragPos } = internalData
6651
+ if (prevDragRow && dragRow) {
6652
+ // 判断是否有拖动
6653
+ if (prevDragRow !== dragRow) {
6654
+ Promise.resolve(
6655
+ dragEndMethod
6656
+ ? dragEndMethod({
6657
+ oldRow: dragRow,
6658
+ newRow: prevDragRow
6659
+ })
6660
+ : true
6661
+ ).then((status) => {
6662
+ if (!status) {
6663
+ return
6664
+ }
6665
+ const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
6666
+
6667
+ // 移出源位置
6668
+ const oafIndex = $xeTable.findRowIndexOf(afterFullData, dragRow)
6669
+ const otfIndex = $xeTable.findRowIndexOf(tableFullData, dragRow)
6670
+ afterFullData.splice(oafIndex, 1)
6671
+ tableFullData.splice(otfIndex, 1)
6672
+ // 插新位置
6673
+ const pafIndex = $xeTable.findRowIndexOf(afterFullData, prevDragRow)
6674
+ const ptfIndex = $xeTable.findRowIndexOf(tableFullData, prevDragRow)
6675
+ const nafIndex = pafIndex + dragOffsetIndex
6676
+ const ntfIndex = ptfIndex + dragOffsetIndex
6677
+ afterFullData.splice(nafIndex, 0, dragRow)
6678
+ tableFullData.splice(ntfIndex, 0, dragRow)
6679
+
6680
+ reactData.isDragRowMove = true
6681
+ $xeTable.cacheRowMap()
6682
+ $xeTable.updateScrollYStatus()
6683
+ $xeTable.handleTableData(treeConfig && transform)
6684
+ if (!(treeConfig && transform)) {
6685
+ $xeTable.updateAfterDataIndex()
6686
+ }
6687
+ $xeTable.updateFooter()
6688
+ $xeTable.checkSelectionStatus()
6689
+ if (reactData.scrollYLoad) {
6690
+ $xeTable.updateScrollYSpace()
6691
+ }
6692
+ nextTick().then(() => {
6693
+ $xeTable.updateCellAreas()
6694
+ return $xeTable.recalculate()
6695
+ })
6696
+
6697
+ dispatchEvent('row-dragend', {
6698
+ oldRow: dragRow,
6699
+ newRow: prevDragRow,
6700
+ _index: {
6701
+ newIndex: nafIndex,
6702
+ oldIndex: oafIndex
6703
+ }
6704
+ }, evnt)
6705
+ }).catch(() => {
6706
+ })
6707
+ }
6708
+ }
6709
+ hideRowDropTip()
6710
+ clearRowDropOrigin()
6711
+ clearRowDropTarget()
6712
+ reactData.dragRow = null
6713
+ setTimeout(() => {
6714
+ reactData.isDragRowMove = false
6715
+ }, 500)
6716
+ },
6717
+ handleRowDragDragoverEvent (evnt) {
6718
+ const trEl = evnt.currentTarget as HTMLElement
6719
+ const rowid = trEl.getAttribute('rowid')
6720
+ const row = $xeTable.getRowById(rowid)
6721
+ clearRowDropTarget()
6722
+ if (row) {
6723
+ evnt.preventDefault()
6724
+ evnt.preventDefault()
6725
+ const { dragRow } = reactData
6726
+ const offsetY = evnt.clientY - trEl.getBoundingClientRect().y
6727
+ const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom'
6728
+ addClass(trEl, 'row--drag-active-target')
6729
+ trEl.setAttribute('drag-pos', dragPos)
6730
+ internalData.prevDragRow = row
6731
+ internalData.prevDragPos = dragPos
6732
+ dispatchEvent('row-dragover', {
6733
+ oldRow: dragRow,
6734
+ targetRow: row,
6735
+ dragPos
6736
+ }, evnt)
6737
+ }
6738
+ showRowDropTip(evnt)
6739
+ },
6740
+ handleCellDragMousedownEvent (evnt, params) {
6741
+ evnt.stopPropagation()
6742
+ const rowOpts = computeRowOpts.value
6743
+ const { dragStartMethod } = rowOpts
6744
+ const { row } = params
6745
+ const dragEl = evnt.currentTarget as HTMLElement
6746
+ const tdEl = dragEl.parentNode?.parentNode as HTMLElement
6747
+ const trEl = tdEl.parentNode as HTMLElement
6748
+ reactData.isDragRowMove = false
6749
+ clearRowDropOrigin()
6750
+ if (dragStartMethod && !dragStartMethod(params)) {
6751
+ trEl.draggable = false
6752
+ reactData.dragRow = null
6753
+ hideRowDropTip()
6754
+ return
6755
+ }
6756
+ reactData.dragRow = row
6757
+ trEl.draggable = true
6758
+ addClass(trEl, 'row--drag-origin')
6759
+ showRowDropTip(evnt)
6760
+ updateRowDropTipContent(tdEl)
6761
+ dispatchEvent('row-dragstart', params, evnt)
6762
+ },
6763
+ handleCellDragMouseupEvent () {
6764
+ clearRowDropOrigin()
6765
+ hideRowDropTip()
6766
+ reactData.dragRow = null
6767
+ reactData.isDragRowMove = false
6768
+ },
6563
6769
  /**
6564
6770
  * 横向 X 可视渲染事件处理
6565
6771
  */
@@ -6589,7 +6795,7 @@ export default defineComponent({
6589
6795
  const bodyWidth = bodyElem ? bodyElem.clientWidth : 0
6590
6796
  const scrollHeight = bodyElem ? bodyElem.scrollHeight : 0
6591
6797
  const scrollWidth = bodyElem ? bodyElem.scrollWidth : 0
6592
- $xeTable.dispatchEvent('scroll', {
6798
+ const evntParams = {
6593
6799
  bodyHeight,
6594
6800
  bodyWidth,
6595
6801
  scrollHeight,
@@ -6597,7 +6803,8 @@ export default defineComponent({
6597
6803
  isX: isRollX,
6598
6804
  isY: isRollY,
6599
6805
  ...params
6600
- }, evnt)
6806
+ }
6807
+ dispatchEvent('scroll', evntParams, evnt)
6601
6808
  },
6602
6809
  /**
6603
6810
  * 纵向 Y 可视渲染事件处理
@@ -6741,14 +6948,14 @@ export default defineComponent({
6741
6948
  },
6742
6949
  updateScrollXData () {
6743
6950
  // reactData.tableColumn = []
6744
- nextTick(() => {
6951
+ return nextTick().then(() => {
6745
6952
  handleTableColumn()
6746
6953
  tablePrivateMethods.updateScrollXSpace()
6747
6954
  })
6748
6955
  },
6749
6956
  updateScrollYData () {
6750
6957
  // reactData.tableData = []
6751
- nextTick(() => {
6958
+ return nextTick().then(() => {
6752
6959
  tablePrivateMethods.handleTableData()
6753
6960
  calcCellHeight()
6754
6961
  tablePrivateMethods.updateScrollYSpace()
@@ -7150,6 +7357,15 @@ export default defineComponent({
7150
7357
  ref: refTableMenu
7151
7358
  })
7152
7359
  : createCommentVNode(),
7360
+ /**
7361
+ * 拖拽提示
7362
+ */
7363
+ rowOpts.drag
7364
+ ? h('div', {
7365
+ ref: refRowDragTipElem,
7366
+ class: 'vxe-table--row-drag-hint'
7367
+ }, getI18n('vxe.table.dragTip', [reactData.dragTipText]))
7368
+ : createCommentVNode(),
7153
7369
  /**
7154
7370
  * 提示相关
7155
7371
  */
@@ -43,6 +43,9 @@ VxeUI.setConfig({
43
43
  // trigger: 'default'
44
44
  strict: true
45
45
  },
46
+ dragConfig: {
47
+ showIcon: true
48
+ },
46
49
  checkboxConfig: {
47
50
  // trigger: 'default',
48
51
  strict: true
@@ -4,6 +4,9 @@
4
4
  position: relative;
5
5
  display: flex;
6
6
  flex-direction: row;
7
+ &.active--drag-origin {
8
+ opacity: 0.5;
9
+ }
7
10
  &.active--drag-target {
8
11
  &[drag-pos="top"] {
9
12
  &::after {
@@ -166,7 +169,10 @@
166
169
  padding-left: 0.2em;
167
170
  padding-right: 0.4em;
168
171
  &:not(.is--disabled) {
169
- cursor: grabbing;
172
+ cursor: grab;
173
+ &:active {
174
+ cursor: grabbing;
175
+ }
170
176
  &:hover {
171
177
  color: var(--vxe-ui-font-primary-color);
172
178
  }
@@ -247,7 +253,7 @@
247
253
  position: absolute;
248
254
  top: 0;
249
255
  left: 0;
250
- padding: 0.6em 1em 0.6em 1.8em;
256
+ padding: 0.6em 1em 0.6em 1.6em;
251
257
  max-width: 300px;
252
258
  border-radius: var(--vxe-ui-border-radius);
253
259
  overflow: hidden;
@@ -338,7 +344,7 @@
338
344
  position: absolute;
339
345
  left: -1px;
340
346
  width: calc(100% + 1px);
341
- height: 3px;
347
+ height: 2px;
342
348
  background-color: var(--vxe-ui-font-primary-color);
343
349
  z-index: 12;
344
350
  }