vxe-table 4.8.0 → 4.8.2

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 +65 -27
  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 +77 -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 +77 -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 +378 -85
  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 +79 -27
  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 +77 -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 +77 -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 +69 -27
  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 +14 -3
  112. package/styles/components/table.scss +80 -0
  113. /package/es/{iconfont.1730681238555.ttf → iconfont.1730898232530.ttf} +0 -0
  114. /package/es/{iconfont.1730681238555.woff → iconfont.1730898232530.woff} +0 -0
  115. /package/es/{iconfont.1730681238555.woff2 → iconfont.1730898232530.woff2} +0 -0
  116. /package/lib/{iconfont.1730681238555.ttf → iconfont.1730898232530.ttf} +0 -0
  117. /package/lib/{iconfont.1730681238555.woff → iconfont.1730898232530.woff} +0 -0
  118. /package/lib/{iconfont.1730681238555.woff2 → iconfont.1730898232530.woff2} +0 -0
@@ -248,6 +248,9 @@ export default defineComponent({
248
248
  isFooter: false
249
249
  },
250
250
  scrollVMLoading: false,
251
+ isDragRowMove: false,
252
+ dragRow: null,
253
+ dragTipText: '',
251
254
  _isResize: false,
252
255
  _isLoading: false
253
256
  });
@@ -322,6 +325,7 @@ export default defineComponent({
322
325
  columnStatusMaps: {},
323
326
  // 行选取状态
324
327
  rowStatusMaps: {},
328
+ // prevDragRow: null,
325
329
  inited: false,
326
330
  tooltipTimeout: null,
327
331
  initStatus: false,
@@ -349,6 +353,7 @@ export default defineComponent({
349
353
  const refRightContainer = ref();
350
354
  const refCellResizeBar = ref();
351
355
  const refEmptyPlaceholder = ref();
356
+ const refRowDragTipElem = ref();
352
357
  const refScrollXVirtualElem = ref();
353
358
  const refScrollYVirtualElem = ref();
354
359
  const refScrollXHandleElem = ref();
@@ -393,6 +398,9 @@ export default defineComponent({
393
398
  const computeRowOpts = computed(() => {
394
399
  return Object.assign({}, getConfig().table.rowConfig, props.rowConfig);
395
400
  });
401
+ const computeDragOpts = computed(() => {
402
+ return Object.assign({}, getConfig().table.dragConfig, props.dragConfig);
403
+ });
396
404
  const computeResizeOpts = computed(() => {
397
405
  return Object.assign({}, getConfig().table.resizeConfig, props.resizeConfig);
398
406
  });
@@ -604,6 +612,7 @@ export default defineComponent({
604
612
  computeColumnOpts,
605
613
  computeCellOpts,
606
614
  computeRowOpts,
615
+ computeDragOpts,
607
616
  computeResizeOpts,
608
617
  computeResizableOpts,
609
618
  computeSeqOpts,
@@ -2751,7 +2760,7 @@ export default defineComponent({
2751
2760
  const handleCheckAllEvent = (evnt, value) => {
2752
2761
  handleCheckedAllCheckboxRow(value);
2753
2762
  if (evnt) {
2754
- tableMethods.dispatchEvent('checkbox-all', {
2763
+ dispatchEvent('checkbox-all', {
2755
2764
  records: tableMethods.getCheckboxRecords(),
2756
2765
  reserves: tableMethods.getCheckboxReserveRecords(),
2757
2766
  indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
@@ -2809,22 +2818,28 @@ export default defineComponent({
2809
2818
  const debounceScrollYData = XEUtils.debounce(function () {
2810
2819
  loadScrollYData();
2811
2820
  }, 20, { leading: false, trailing: true });
2812
- const scrollXEvent = (evnt) => {
2813
- const wrapperEl = evnt.currentTarget;
2821
+ const handleSyncScrollX = (scrollLeft) => {
2814
2822
  const tableHeader = refTableHeader.value;
2815
2823
  const tableBody = refTableBody.value;
2816
2824
  const tableFooter = refTableFooter.value;
2817
2825
  const bodyElem = tableBody.$el;
2818
2826
  const headerElem = tableHeader ? tableHeader.$el : null;
2819
2827
  const footerElem = tableFooter ? tableFooter.$el : null;
2828
+ setScrollLeft(bodyElem, scrollLeft);
2829
+ setScrollLeft(headerElem, scrollLeft);
2830
+ setScrollLeft(footerElem, scrollLeft);
2831
+ setScrollLeft(bodyElem, scrollLeft);
2832
+ setScrollLeft(headerElem, scrollLeft);
2833
+ setScrollLeft(footerElem, scrollLeft);
2834
+ };
2835
+ const scrollXEvent = (evnt) => {
2836
+ const wrapperEl = evnt.currentTarget;
2820
2837
  const { scrollTop, scrollLeft } = wrapperEl;
2821
2838
  const isRollX = true;
2822
2839
  const isRollY = false;
2823
2840
  internalData.lastScrollLeft = scrollLeft;
2824
2841
  reactData.lastScrollTime = Date.now();
2825
- setScrollLeft(bodyElem, scrollLeft);
2826
- setScrollLeft(headerElem, scrollLeft);
2827
- setScrollLeft(footerElem, scrollLeft);
2842
+ handleSyncScrollX(scrollLeft);
2828
2843
  $xeTable.triggerScrollXEvent(evnt);
2829
2844
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
2830
2845
  type: 'table',
@@ -2836,22 +2851,25 @@ export default defineComponent({
2836
2851
  const debounceScrollYCalculate = XEUtils.debounce(function () {
2837
2852
  tablePrivateMethods.updateScrollYSpace();
2838
2853
  }, 1000, { leading: false, trailing: true });
2839
- const scrollYEvent = (evnt) => {
2840
- const wrapperEl = evnt.currentTarget;
2854
+ const handleSyncScrollY = (scrollTop) => {
2841
2855
  const tableBody = refTableBody.value;
2842
2856
  const leftBody = refTableLeftBody.value;
2843
2857
  const rightBody = refTableRightBody.value;
2844
2858
  const bodyElem = tableBody.$el;
2845
2859
  const leftElem = leftBody ? leftBody.$el : null;
2846
2860
  const rightElem = rightBody ? rightBody.$el : null;
2861
+ setScrollTop(bodyElem, scrollTop);
2862
+ setScrollTop(leftElem, scrollTop);
2863
+ setScrollTop(rightElem, scrollTop);
2864
+ };
2865
+ const scrollYEvent = (evnt) => {
2866
+ const wrapperEl = evnt.currentTarget;
2847
2867
  const { scrollTop, scrollLeft } = wrapperEl;
2848
2868
  const isRollX = false;
2849
2869
  const isRollY = true;
2850
2870
  internalData.lastScrollTop = scrollTop;
2851
2871
  reactData.lastScrollTime = Date.now();
2852
- setScrollTop(bodyElem, scrollTop);
2853
- setScrollTop(leftElem, scrollTop);
2854
- setScrollTop(rightElem, scrollTop);
2872
+ handleSyncScrollY(scrollTop);
2855
2873
  $xeTable.triggerScrollYEvent(evnt);
2856
2874
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
2857
2875
  type: 'table',
@@ -2861,10 +2879,11 @@ export default defineComponent({
2861
2879
  });
2862
2880
  };
2863
2881
  let keyCtxTimeout;
2882
+ const dispatchEvent = (type, params, evnt) => {
2883
+ emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params));
2884
+ };
2864
2885
  tableMethods = {
2865
- dispatchEvent(type, params, evnt) {
2866
- emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params));
2867
- },
2886
+ dispatchEvent,
2868
2887
  /**
2869
2888
  * 重置表格的一切数据状态
2870
2889
  */
@@ -4209,7 +4228,7 @@ export default defineComponent({
4209
4228
  visible: false
4210
4229
  });
4211
4230
  if (visible) {
4212
- $xeTable.dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null);
4231
+ dispatchEvent('filter-visible', { column, property: column.field, field: column.field, filterList: $xeTable.getCheckedFilters(), visible: false }, null);
4213
4232
  }
4214
4233
  return nextTick();
4215
4234
  },
@@ -5031,7 +5050,7 @@ export default defineComponent({
5031
5050
  tablePrivateMethods.preventEvent(evnt, 'event.clearAreas', {}, () => {
5032
5051
  $xeTable.clearCellAreas();
5033
5052
  $xeTable.clearCopyCellArea();
5034
- $xeTable.dispatchEvent('clear-cell-area-selection', { cellAreas }, evnt);
5053
+ dispatchEvent('clear-cell-area-selection', { cellAreas }, evnt);
5035
5054
  });
5036
5055
  }
5037
5056
  }
@@ -5082,7 +5101,7 @@ export default defineComponent({
5082
5101
  const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
5083
5102
  if (isEsc) {
5084
5103
  tablePrivateMethods.preventEvent(evnt, 'event.keydown', null, () => {
5085
- tableMethods.dispatchEvent('keydown-start', {}, evnt);
5104
+ dispatchEvent('keydown-start', {}, evnt);
5086
5105
  if (keyboardConfig && mouseConfig && mouseOpts.area && $xeTable.handleKeyboardEvent) {
5087
5106
  $xeTable.handleKeyboardEvent(evnt);
5088
5107
  }
@@ -5105,8 +5124,8 @@ export default defineComponent({
5105
5124
  }
5106
5125
  }
5107
5126
  }
5108
- tableMethods.dispatchEvent('keydown', {}, evnt);
5109
- tableMethods.dispatchEvent('keydown-end', {}, evnt);
5127
+ dispatchEvent('keydown', {}, evnt);
5128
+ dispatchEvent('keydown-end', {}, evnt);
5110
5129
  });
5111
5130
  }
5112
5131
  };
@@ -5304,7 +5323,7 @@ export default defineComponent({
5304
5323
  }
5305
5324
  // 如果按下 del 键,更新表尾数据
5306
5325
  tableMethods.updateFooter();
5307
- $xeTable.dispatchEvent('cell-delete-value', params, evnt);
5326
+ dispatchEvent('cell-delete-value', params, evnt);
5308
5327
  }
5309
5328
  }
5310
5329
  }
@@ -5330,7 +5349,7 @@ export default defineComponent({
5330
5349
  setCellValue(selected.row, selected.column, null);
5331
5350
  $xeTable.handleEdit(selected.args, evnt);
5332
5351
  }
5333
- $xeTable.dispatchEvent('cell-backspace-value', params, evnt);
5352
+ dispatchEvent('cell-backspace-value', params, evnt);
5334
5353
  }
5335
5354
  }
5336
5355
  }
@@ -5380,7 +5399,7 @@ export default defineComponent({
5380
5399
  }
5381
5400
  }
5382
5401
  }
5383
- tableMethods.dispatchEvent('keydown', {}, evnt);
5402
+ dispatchEvent('keydown', {}, evnt);
5384
5403
  });
5385
5404
  }
5386
5405
  };
@@ -5397,7 +5416,7 @@ export default defineComponent({
5397
5416
  $xeTable.handlePasteCellAreaEvent(evnt);
5398
5417
  }
5399
5418
  }
5400
- tableMethods.dispatchEvent('paste', {}, evnt);
5419
+ dispatchEvent('paste', {}, evnt);
5401
5420
  }
5402
5421
  };
5403
5422
  const handleGlobalCopyEvent = (evnt) => {
@@ -5413,7 +5432,7 @@ export default defineComponent({
5413
5432
  $xeTable.handleCopyCellAreaEvent(evnt);
5414
5433
  }
5415
5434
  }
5416
- tableMethods.dispatchEvent('copy', {}, evnt);
5435
+ dispatchEvent('copy', {}, evnt);
5417
5436
  }
5418
5437
  };
5419
5438
  const handleGlobalCutEvent = (evnt) => {
@@ -5429,7 +5448,7 @@ export default defineComponent({
5429
5448
  $xeTable.handleCutCellAreaEvent(evnt);
5430
5449
  }
5431
5450
  }
5432
- tableMethods.dispatchEvent('cut', {}, evnt);
5451
+ dispatchEvent('cut', {}, evnt);
5433
5452
  }
5434
5453
  };
5435
5454
  const handleGlobalResizeEvent = () => {
@@ -5455,6 +5474,50 @@ export default defineComponent({
5455
5474
  }
5456
5475
  }
5457
5476
  };
5477
+ const clearRowDropOrigin = () => {
5478
+ const el = refElem.value;
5479
+ if (el) {
5480
+ const clss = 'row--drag-origin';
5481
+ XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
5482
+ elem.draggable = false;
5483
+ removeClass(elem, clss);
5484
+ });
5485
+ }
5486
+ };
5487
+ const clearRowDropTarget = () => {
5488
+ const el = refElem.value;
5489
+ if (el) {
5490
+ const clss = 'row--drag-active-target';
5491
+ XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
5492
+ removeClass(elem, clss);
5493
+ });
5494
+ }
5495
+ };
5496
+ const showRowDropTip = (evnt) => {
5497
+ const rdTipEl = refRowDragTipElem.value;
5498
+ if (!rdTipEl) {
5499
+ return;
5500
+ }
5501
+ const el = refElem.value;
5502
+ if (!el) {
5503
+ return;
5504
+ }
5505
+ if (rdTipEl) {
5506
+ const wrapperRect = el.getBoundingClientRect();
5507
+ rdTipEl.style.display = 'block';
5508
+ rdTipEl.style.top = `${Math.min(el.clientHeight - el.scrollTop - rdTipEl.clientHeight, evnt.clientY - wrapperRect.y)}px`;
5509
+ rdTipEl.style.left = `${Math.min(el.clientWidth - el.scrollLeft - rdTipEl.clientWidth - 16, evnt.clientX - wrapperRect.x)}px`;
5510
+ }
5511
+ };
5512
+ const hideRowDropTip = () => {
5513
+ const rdTipEl = refRowDragTipElem.value;
5514
+ if (rdTipEl) {
5515
+ rdTipEl.style.display = '';
5516
+ }
5517
+ };
5518
+ const updateRowDropTipContent = (tdEl) => {
5519
+ reactData.dragTipText = tdEl.textContent || '';
5520
+ };
5458
5521
  /**
5459
5522
  * 处理显示 tooltip
5460
5523
  * @param {Event} evnt 事件
@@ -6226,13 +6289,13 @@ export default defineComponent({
6226
6289
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
6227
6290
  tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column));
6228
6291
  }
6229
- tableMethods.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
6292
+ dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
6230
6293
  if (columnOpts.isCurrent || props.highlightCurrentColumn) {
6231
6294
  tablePrivateMethods.triggerCurrentColumnEvent(evnt, params);
6232
6295
  }
6233
6296
  },
6234
6297
  triggerHeaderCellDblclickEvent(evnt, params) {
6235
- tableMethods.dispatchEvent('header-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt);
6298
+ dispatchEvent('header-cell-dblclick', Object.assign({ cell: evnt.currentTarget }, params), evnt);
6236
6299
  },
6237
6300
  /**
6238
6301
  * 列点击事件
@@ -6313,7 +6376,7 @@ export default defineComponent({
6313
6376
  }
6314
6377
  }
6315
6378
  }
6316
- tableMethods.dispatchEvent('cell-click', params, evnt);
6379
+ dispatchEvent('cell-click', params, evnt);
6317
6380
  },
6318
6381
  /**
6319
6382
  * 列双击点击事件
@@ -6344,7 +6407,7 @@ export default defineComponent({
6344
6407
  }
6345
6408
  }
6346
6409
  }
6347
- tableMethods.dispatchEvent('cell-dblclick', params, evnt);
6410
+ dispatchEvent('cell-dblclick', params, evnt);
6348
6411
  },
6349
6412
  handleToggleCheckRowEvent(evnt, params) {
6350
6413
  const { selectCheckboxMaps } = reactData;
@@ -6388,7 +6451,7 @@ export default defineComponent({
6388
6451
  tableMethods.setAllCheckboxRow(false);
6389
6452
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
6390
6453
  handleCheckedCheckboxRow(rangeRows, true, false);
6391
- tableMethods.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
6454
+ dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
6392
6455
  return;
6393
6456
  }
6394
6457
  }
@@ -6396,7 +6459,7 @@ export default defineComponent({
6396
6459
  if (!checkMethod || checkMethod({ row })) {
6397
6460
  tablePrivateMethods.handleSelectRow(params, value);
6398
6461
  tablePrivateMethods.checkSelectionStatus();
6399
- tableMethods.dispatchEvent('checkbox-change', Object.assign({
6462
+ dispatchEvent('checkbox-change', Object.assign({
6400
6463
  records: tableMethods.getCheckboxRecords(),
6401
6464
  reserves: tableMethods.getCheckboxReserveRecords(),
6402
6465
  indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
@@ -6443,7 +6506,7 @@ export default defineComponent({
6443
6506
  }
6444
6507
  }
6445
6508
  if (isChange) {
6446
- tableMethods.dispatchEvent('radio-change', Object.assign({ oldValue, newValue }, params), evnt);
6509
+ dispatchEvent('radio-change', Object.assign({ oldValue, newValue }, params), evnt);
6447
6510
  }
6448
6511
  },
6449
6512
  triggerCurrentColumnEvent(evnt, params) {
@@ -6463,7 +6526,7 @@ export default defineComponent({
6463
6526
  if (!currentMethod || currentMethod({ row: newValue })) {
6464
6527
  tableMethods.setCurrentRow(newValue);
6465
6528
  if (isChange) {
6466
- tableMethods.dispatchEvent('current-change', Object.assign({ oldValue, newValue }, params), evnt);
6529
+ dispatchEvent('current-change', Object.assign({ oldValue, newValue }, params), evnt);
6467
6530
  }
6468
6531
  }
6469
6532
  },
@@ -6485,7 +6548,7 @@ export default defineComponent({
6485
6548
  const columnIndex = tableMethods.getColumnIndex(column);
6486
6549
  const $columnIndex = tableMethods.getVMColumnIndex(column);
6487
6550
  tableMethods.setRowExpand(row, expanded);
6488
- tableMethods.dispatchEvent('toggle-row-expand', {
6551
+ dispatchEvent('toggle-row-expand', {
6489
6552
  expanded,
6490
6553
  column,
6491
6554
  columnIndex,
@@ -6514,7 +6577,7 @@ export default defineComponent({
6514
6577
  const columnIndex = tableMethods.getColumnIndex(column);
6515
6578
  const $columnIndex = tableMethods.getVMColumnIndex(column);
6516
6579
  tableMethods.setTreeExpand(row, expanded);
6517
- tableMethods.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
6580
+ dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
6518
6581
  }
6519
6582
  },
6520
6583
  /**
@@ -6536,9 +6599,137 @@ export default defineComponent({
6536
6599
  if (mouseConfig && mouseOpts.area && $xeTable.handleSortEvent) {
6537
6600
  $xeTable.handleSortEvent(evnt, params);
6538
6601
  }
6539
- tableMethods.dispatchEvent('sort-change', params, evnt);
6602
+ dispatchEvent('sort-change', params, evnt);
6603
+ }
6604
+ },
6605
+ handleRowDragDragstartEvent(evnt) {
6606
+ const img = new Image();
6607
+ if (evnt.dataTransfer) {
6608
+ evnt.dataTransfer.setDragImage(img, 0, 0);
6540
6609
  }
6541
6610
  },
6611
+ handleRowDragDragendEvent(evnt) {
6612
+ const { treeConfig } = props;
6613
+ const dragOpts = computeDragOpts.value;
6614
+ const { dragEndMethod } = dragOpts;
6615
+ const treeOpts = computeTreeOpts.value;
6616
+ const { transform } = treeOpts;
6617
+ const { dragRow } = reactData;
6618
+ const { afterFullData, tableFullData, prevDragRow, prevDragPos } = internalData;
6619
+ if (prevDragRow && dragRow) {
6620
+ // 判断是否有拖动
6621
+ if (prevDragRow !== dragRow) {
6622
+ Promise.resolve(dragEndMethod
6623
+ ? dragEndMethod({
6624
+ oldRow: dragRow,
6625
+ newRow: prevDragRow
6626
+ })
6627
+ : true).then((status) => {
6628
+ if (!status) {
6629
+ return;
6630
+ }
6631
+ const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
6632
+ // 移出源位置
6633
+ const oafIndex = $xeTable.findRowIndexOf(afterFullData, dragRow);
6634
+ const otfIndex = $xeTable.findRowIndexOf(tableFullData, dragRow);
6635
+ afterFullData.splice(oafIndex, 1);
6636
+ tableFullData.splice(otfIndex, 1);
6637
+ // 插新位置
6638
+ const pafIndex = $xeTable.findRowIndexOf(afterFullData, prevDragRow);
6639
+ const ptfIndex = $xeTable.findRowIndexOf(tableFullData, prevDragRow);
6640
+ const nafIndex = pafIndex + dragOffsetIndex;
6641
+ const ntfIndex = ptfIndex + dragOffsetIndex;
6642
+ afterFullData.splice(nafIndex, 0, dragRow);
6643
+ tableFullData.splice(ntfIndex, 0, dragRow);
6644
+ reactData.isDragRowMove = true;
6645
+ $xeTable.cacheRowMap();
6646
+ $xeTable.updateScrollYStatus();
6647
+ $xeTable.handleTableData(treeConfig && transform);
6648
+ if (!(treeConfig && transform)) {
6649
+ $xeTable.updateAfterDataIndex();
6650
+ }
6651
+ $xeTable.updateFooter();
6652
+ $xeTable.checkSelectionStatus();
6653
+ if (reactData.scrollYLoad) {
6654
+ $xeTable.updateScrollYSpace();
6655
+ }
6656
+ nextTick().then(() => {
6657
+ $xeTable.updateCellAreas();
6658
+ return $xeTable.recalculate();
6659
+ });
6660
+ dispatchEvent('row-dragend', {
6661
+ oldRow: dragRow,
6662
+ newRow: prevDragRow,
6663
+ _index: {
6664
+ newIndex: nafIndex,
6665
+ oldIndex: oafIndex
6666
+ }
6667
+ }, evnt);
6668
+ }).catch(() => {
6669
+ });
6670
+ }
6671
+ }
6672
+ hideRowDropTip();
6673
+ clearRowDropOrigin();
6674
+ clearRowDropTarget();
6675
+ reactData.dragRow = null;
6676
+ setTimeout(() => {
6677
+ reactData.isDragRowMove = false;
6678
+ }, 500);
6679
+ },
6680
+ handleRowDragDragoverEvent(evnt) {
6681
+ const trEl = evnt.currentTarget;
6682
+ const rowid = trEl.getAttribute('rowid');
6683
+ const row = $xeTable.getRowById(rowid);
6684
+ clearRowDropTarget();
6685
+ if (row) {
6686
+ evnt.preventDefault();
6687
+ evnt.preventDefault();
6688
+ const { dragRow } = reactData;
6689
+ const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
6690
+ const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
6691
+ addClass(trEl, 'row--drag-active-target');
6692
+ trEl.setAttribute('drag-pos', dragPos);
6693
+ internalData.prevDragRow = row;
6694
+ internalData.prevDragPos = dragPos;
6695
+ dispatchEvent('row-dragover', {
6696
+ oldRow: dragRow,
6697
+ targetRow: row,
6698
+ dragPos
6699
+ }, evnt);
6700
+ }
6701
+ showRowDropTip(evnt);
6702
+ },
6703
+ handleCellDragMousedownEvent(evnt, params) {
6704
+ var _a;
6705
+ evnt.stopPropagation();
6706
+ const dragOpts = computeDragOpts.value;
6707
+ const { dragStartMethod } = dragOpts;
6708
+ const { row } = params;
6709
+ const dragEl = evnt.currentTarget;
6710
+ const tdEl = (_a = dragEl.parentNode) === null || _a === void 0 ? void 0 : _a.parentNode;
6711
+ const trEl = tdEl.parentNode;
6712
+ reactData.isDragRowMove = false;
6713
+ clearRowDropOrigin();
6714
+ if (dragStartMethod && !dragStartMethod(params)) {
6715
+ trEl.draggable = false;
6716
+ reactData.dragRow = null;
6717
+ hideRowDropTip();
6718
+ return;
6719
+ }
6720
+ reactData.dragRow = row;
6721
+ trEl.draggable = true;
6722
+ addClass(trEl, 'row--drag-origin');
6723
+ showRowDropTip(evnt);
6724
+ updateRowDropTipContent(tdEl);
6725
+ dispatchEvent('row-dragstart', params, evnt);
6726
+ },
6727
+ handleCellDragMouseupEvent() {
6728
+ clearRowDropOrigin();
6729
+ hideRowDropTip();
6730
+ reactData.dragRow = null;
6731
+ reactData.isDragRowMove = false;
6732
+ },
6542
6733
  /**
6543
6734
  * 横向 X 可视渲染事件处理
6544
6735
  */
@@ -6568,10 +6759,11 @@ export default defineComponent({
6568
6759
  const bodyWidth = bodyElem ? bodyElem.clientWidth : 0;
6569
6760
  const scrollHeight = bodyElem ? bodyElem.scrollHeight : 0;
6570
6761
  const scrollWidth = bodyElem ? bodyElem.scrollWidth : 0;
6571
- $xeTable.dispatchEvent('scroll', Object.assign({ bodyHeight,
6762
+ const evntParams = Object.assign({ bodyHeight,
6572
6763
  bodyWidth,
6573
6764
  scrollHeight,
6574
- scrollWidth, isX: isRollX, isY: isRollY }, params), evnt);
6765
+ scrollWidth, isX: isRollX, isY: isRollY }, params);
6766
+ dispatchEvent('scroll', evntParams, evnt);
6575
6767
  },
6576
6768
  /**
6577
6769
  * 纵向 Y 可视渲染事件处理
@@ -6717,14 +6909,14 @@ export default defineComponent({
6717
6909
  },
6718
6910
  updateScrollXData() {
6719
6911
  // reactData.tableColumn = []
6720
- nextTick(() => {
6912
+ return nextTick().then(() => {
6721
6913
  handleTableColumn();
6722
6914
  tablePrivateMethods.updateScrollXSpace();
6723
6915
  });
6724
6916
  },
6725
6917
  updateScrollYData() {
6726
6918
  // reactData.tableData = []
6727
- nextTick(() => {
6919
+ return nextTick().then(() => {
6728
6920
  tablePrivateMethods.handleTableData();
6729
6921
  calcCellHeight();
6730
6922
  tablePrivateMethods.updateScrollYSpace();
@@ -7124,6 +7316,15 @@ export default defineComponent({
7124
7316
  ref: refTableMenu
7125
7317
  })
7126
7318
  : createCommentVNode(),
7319
+ /**
7320
+ * 拖拽提示
7321
+ */
7322
+ rowOpts.drag
7323
+ ? h('div', {
7324
+ ref: refRowDragTipElem,
7325
+ class: 'vxe-table--row-drag-hint'
7326
+ }, getI18n('vxe.table.dragTip', [reactData.dragTipText]))
7327
+ : createCommentVNode(),
7127
7328
  /**
7128
7329
  * 提示相关
7129
7330
  */
@@ -712,6 +712,9 @@
712
712
  display: flex;
713
713
  flex-direction: row;
714
714
  }
715
+ .vxe-table-custom--option.active--drag-origin {
716
+ opacity: 0.5;
717
+ }
715
718
  .vxe-table-custom--option.active--drag-target[drag-pos=top]::after {
716
719
  display: block;
717
720
  top: -2px;
@@ -944,6 +947,9 @@
944
947
  padding-right: 0.4em;
945
948
  }
946
949
  .vxe-table-custom--sort-btn:not(.is--disabled) {
950
+ cursor: grab;
951
+ }
952
+ .vxe-table-custom--sort-btn:not(.is--disabled):active {
947
953
  cursor: grabbing;
948
954
  }
949
955
  .vxe-table-custom--sort-btn:not(.is--disabled):hover {
@@ -1024,7 +1030,7 @@
1024
1030
  position: absolute;
1025
1031
  top: 0;
1026
1032
  left: 0;
1027
- padding: 0.6em 1em 0.6em 1.8em;
1033
+ padding: 0.6em 1em 0.6em 1.6em;
1028
1034
  max-width: 300px;
1029
1035
  border-radius: var(--vxe-ui-border-radius);
1030
1036
  overflow: hidden;
@@ -1087,6 +1093,9 @@
1087
1093
  width: 100%;
1088
1094
  }
1089
1095
 
1096
+ .vxe-table-custom-popup--row.active--drag-origin .vxe-table-custom-popup--column-item {
1097
+ opacity: 0.5;
1098
+ }
1090
1099
  .vxe-table-custom-popup--row.active--drag-target[drag-pos=top] .vxe-table-custom-popup--column-item::after {
1091
1100
  display: block;
1092
1101
  top: -2px;
@@ -1108,7 +1117,7 @@
1108
1117
  position: absolute;
1109
1118
  left: -1px;
1110
1119
  width: calc(100% + 1px);
1111
- height: 3px;
1120
+ height: 2px;
1112
1121
  background-color: var(--vxe-ui-font-primary-color);
1113
1122
  z-index: 12;
1114
1123
  }
@@ -2032,6 +2041,7 @@
2032
2041
  /*树形节点*/
2033
2042
  /*展开行*/
2034
2043
  /*设置列高度*/
2044
+ /*拖拽行*/
2035
2045
  /*溢出列*/
2036
2046
  /*暂无数据*/
2037
2047
  /*校验不通过*/
@@ -2592,6 +2602,71 @@
2592
2602
  overflow: auto;
2593
2603
  outline: 0;
2594
2604
  }
2605
+ .vxe-table--render-default .vxe-cell--drag-handle {
2606
+ -webkit-user-select: none;
2607
+ -moz-user-select: none;
2608
+ user-select: none;
2609
+ }
2610
+ .vxe-table--render-default .vxe-cell--drag-handle + span {
2611
+ padding-left: 0.5em;
2612
+ }
2613
+ .vxe-table--render-default .vxe-cell--drag-handle:not(.is--disabled) {
2614
+ cursor: grab;
2615
+ }
2616
+ .vxe-table--render-default .vxe-cell--drag-handle:not(.is--disabled):active {
2617
+ cursor: grabbing;
2618
+ }
2619
+ .vxe-table--render-default .vxe-cell--drag-handle:not(.is--disabled):hover {
2620
+ color: var(--vxe-ui-font-primary-color);
2621
+ }
2622
+ .vxe-table--render-default .vxe-cell--drag-handle.is--disabled {
2623
+ color: var(--vxe-ui-input-disabled-color);
2624
+ cursor: not-allowed;
2625
+ }
2626
+ .vxe-table--render-default .vxe-body--row.row--drag-origin > .vxe-body--column > .vxe-cell {
2627
+ opacity: 0.5;
2628
+ }
2629
+ .vxe-table--render-default .vxe-body--row.row--drag-active-target > .vxe-body--column::after {
2630
+ display: none;
2631
+ content: "";
2632
+ position: absolute;
2633
+ left: 0;
2634
+ width: 100%;
2635
+ height: 2px;
2636
+ background-color: var(--vxe-ui-font-primary-color);
2637
+ z-index: 12;
2638
+ }
2639
+ .vxe-table--render-default .vxe-body--row.row--drag-active-target[drag-pos=top] > .vxe-body--column::after {
2640
+ display: block;
2641
+ top: 0;
2642
+ }
2643
+ .vxe-table--render-default .vxe-body--row.row--drag-active-target[drag-pos=bottom] > .vxe-body--column::after {
2644
+ display: block;
2645
+ bottom: 0;
2646
+ }
2647
+ .vxe-table--render-default .vxe-body--row-list-move {
2648
+ transition: transform 0.35s;
2649
+ }
2650
+ .vxe-table--render-default .vxe-table--row-drag-hint {
2651
+ display: none;
2652
+ position: absolute;
2653
+ top: 0;
2654
+ left: 0;
2655
+ padding: 0.6em 1em 0.6em 1.6em;
2656
+ max-width: 50%;
2657
+ min-width: 100px;
2658
+ border-radius: var(--vxe-ui-border-radius);
2659
+ overflow: hidden;
2660
+ text-overflow: ellipsis;
2661
+ white-space: nowrap;
2662
+ -webkit-user-select: none;
2663
+ -moz-user-select: none;
2664
+ user-select: none;
2665
+ pointer-events: none;
2666
+ background-color: var(--vxe-ui-layout-background-color);
2667
+ box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);
2668
+ z-index: 33;
2669
+ }
2595
2670
  .vxe-table--render-default .vxe-header--column.col--ellipsis:not(.col--active) > .vxe-cell,
2596
2671
  .vxe-table--render-default .vxe-body--column.col--ellipsis:not(.col--active) > .vxe-cell,
2597
2672
  .vxe-table--render-default .vxe-footer--column.col--ellipsis:not(.col--active) > .vxe-cell {