vxe-table 3.10.16 → 3.11.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 (122) hide show
  1. package/README.md +1 -1
  2. package/es/locale/lang/en-US.js +1 -0
  3. package/es/locale/lang/es-ES.js +1 -0
  4. package/es/locale/lang/hu-HU.js +1 -0
  5. package/es/locale/lang/ja-JP.js +1 -0
  6. package/es/locale/lang/ko-KR.js +1 -0
  7. package/es/locale/lang/pt-BR.js +1 -0
  8. package/es/locale/lang/ru-RU.js +1 -0
  9. package/es/locale/lang/uk-UA.js +1 -0
  10. package/es/locale/lang/vi-VN.js +1 -0
  11. package/es/locale/lang/zh-CHT.js +1 -0
  12. package/es/locale/lang/zh-CN.js +1 -0
  13. package/es/style.css +1 -1
  14. package/es/style.min.css +1 -1
  15. package/es/table/module/custom/mixin.js +5 -1
  16. package/es/table/module/edit/mixin.js +32 -15
  17. package/es/table/src/body.js +40 -24
  18. package/es/table/src/cell.js +75 -32
  19. package/es/table/src/footer.js +159 -131
  20. package/es/table/src/header.js +128 -90
  21. package/es/table/src/methods.js +284 -65
  22. package/es/table/src/props.js +5 -1
  23. package/es/table/src/table.js +64 -20
  24. package/es/table/style.css +33 -20
  25. package/es/table/style.min.css +1 -1
  26. package/es/ui/index.js +9 -4
  27. package/es/ui/src/log.js +1 -1
  28. package/es/vxe-table/style.css +33 -20
  29. package/es/vxe-table/style.min.css +1 -1
  30. package/helper/vetur/attributes.json +1 -1
  31. package/helper/vetur/tags.json +1 -1
  32. package/lib/index.umd.js +917 -449
  33. package/lib/index.umd.min.js +1 -1
  34. package/lib/locale/lang/en-US.js +1 -0
  35. package/lib/locale/lang/en-US.min.js +1 -1
  36. package/lib/locale/lang/en-US.umd.js +1 -0
  37. package/lib/locale/lang/es-ES.js +1 -0
  38. package/lib/locale/lang/es-ES.min.js +1 -1
  39. package/lib/locale/lang/es-ES.umd.js +1 -0
  40. package/lib/locale/lang/hu-HU.js +1 -0
  41. package/lib/locale/lang/hu-HU.min.js +1 -1
  42. package/lib/locale/lang/hu-HU.umd.js +1 -0
  43. package/lib/locale/lang/ja-JP.js +1 -0
  44. package/lib/locale/lang/ja-JP.min.js +1 -1
  45. package/lib/locale/lang/ja-JP.umd.js +1 -0
  46. package/lib/locale/lang/ko-KR.js +1 -0
  47. package/lib/locale/lang/ko-KR.min.js +1 -1
  48. package/lib/locale/lang/ko-KR.umd.js +1 -0
  49. package/lib/locale/lang/pt-BR.js +1 -0
  50. package/lib/locale/lang/pt-BR.min.js +1 -1
  51. package/lib/locale/lang/pt-BR.umd.js +1 -0
  52. package/lib/locale/lang/ru-RU.js +1 -0
  53. package/lib/locale/lang/ru-RU.min.js +1 -1
  54. package/lib/locale/lang/ru-RU.umd.js +1 -0
  55. package/lib/locale/lang/uk-UA.js +1 -0
  56. package/lib/locale/lang/uk-UA.min.js +1 -1
  57. package/lib/locale/lang/uk-UA.umd.js +1 -0
  58. package/lib/locale/lang/vi-VN.js +1 -0
  59. package/lib/locale/lang/vi-VN.min.js +1 -1
  60. package/lib/locale/lang/zh-CHT.js +1 -0
  61. package/lib/locale/lang/zh-CHT.min.js +1 -1
  62. package/lib/locale/lang/zh-CHT.umd.js +1 -0
  63. package/lib/locale/lang/zh-CN.js +1 -0
  64. package/lib/locale/lang/zh-CN.min.js +1 -1
  65. package/lib/locale/lang/zh-CN.umd.js +1 -0
  66. package/lib/style.css +1 -1
  67. package/lib/style.min.css +1 -1
  68. package/lib/table/module/custom/mixin.js +5 -1
  69. package/lib/table/module/custom/mixin.min.js +1 -1
  70. package/lib/table/module/edit/mixin.js +34 -15
  71. package/lib/table/module/edit/mixin.min.js +1 -1
  72. package/lib/table/src/body.js +31 -15
  73. package/lib/table/src/body.min.js +1 -1
  74. package/lib/table/src/cell.js +82 -35
  75. package/lib/table/src/cell.min.js +1 -1
  76. package/lib/table/src/footer.js +198 -161
  77. package/lib/table/src/footer.min.js +1 -1
  78. package/lib/table/src/header.js +169 -128
  79. package/lib/table/src/header.min.js +1 -1
  80. package/lib/table/src/methods.js +313 -68
  81. package/lib/table/src/methods.min.js +1 -1
  82. package/lib/table/src/props.js +5 -1
  83. package/lib/table/src/props.min.js +1 -1
  84. package/lib/table/src/table.js +70 -20
  85. package/lib/table/src/table.min.js +1 -1
  86. package/lib/table/style/style.css +33 -20
  87. package/lib/table/style/style.min.css +1 -1
  88. package/lib/ui/index.js +9 -4
  89. package/lib/ui/index.min.js +1 -1
  90. package/lib/ui/src/log.js +1 -1
  91. package/lib/ui/src/log.min.js +1 -1
  92. package/lib/vxe-table/style/style.css +33 -20
  93. package/lib/vxe-table/style/style.min.css +1 -1
  94. package/package.json +3 -3
  95. package/packages/locale/lang/en-US.ts +1 -0
  96. package/packages/locale/lang/es-ES.ts +1 -0
  97. package/packages/locale/lang/hu-HU.ts +1 -0
  98. package/packages/locale/lang/ja-JP.ts +1 -0
  99. package/packages/locale/lang/ko-KR.ts +1 -0
  100. package/packages/locale/lang/pt-BR.ts +1 -0
  101. package/packages/locale/lang/ru-RU.ts +1 -0
  102. package/packages/locale/lang/uk-UA.ts +1 -0
  103. package/packages/locale/lang/vi-VN.ts +1 -0
  104. package/packages/locale/lang/zh-CHT.ts +1 -0
  105. package/packages/locale/lang/zh-CN.ts +1 -0
  106. package/packages/table/module/custom/mixin.ts +5 -1
  107. package/packages/table/module/edit/mixin.ts +32 -15
  108. package/packages/table/src/body.ts +43 -25
  109. package/packages/table/src/cell.ts +120 -67
  110. package/packages/table/src/footer.ts +164 -150
  111. package/packages/table/src/header.ts +136 -90
  112. package/packages/table/src/methods.ts +296 -67
  113. package/packages/table/src/props.ts +5 -1
  114. package/packages/table/src/table.ts +71 -19
  115. package/packages/ui/index.ts +8 -3
  116. package/styles/components/table.scss +42 -35
  117. /package/es/{iconfont.1731633464058.ttf → iconfont.1731937243466.ttf} +0 -0
  118. /package/es/{iconfont.1731633464058.woff → iconfont.1731937243466.woff} +0 -0
  119. /package/es/{iconfont.1731633464058.woff2 → iconfont.1731937243466.woff2} +0 -0
  120. /package/lib/{iconfont.1731633464058.ttf → iconfont.1731937243466.ttf} +0 -0
  121. /package/lib/{iconfont.1731633464058.woff → iconfont.1731937243466.woff} +0 -0
  122. /package/lib/{iconfont.1731633464058.woff2 → iconfont.1731937243466.woff2} +0 -0
@@ -331,63 +331,114 @@ function updateRowDropOrigin($xeTable, row) {
331
331
  });
332
332
  }
333
333
  }
334
- function clearRowDropTarget($xeTable) {
334
+ const updateRowDropTipContent = ($xeTable, tdEl) => {
335
+ const reactData = $xeTable;
336
+ const props = $xeTable;
337
+ const { dragConfig } = props;
338
+ const { dragRow } = reactData;
339
+ const rowDragOpts = $xeTable.computeRowDragOpts;
340
+ const { tooltipMethod } = rowDragOpts;
341
+ const rTooltipMethod = tooltipMethod || (dragConfig ? dragConfig.rowTooltipMethod : null);
342
+ let tipContent = '';
343
+ if (rTooltipMethod) {
344
+ tipContent = `${rTooltipMethod({
345
+ row: dragRow
346
+ }) || ''}`;
347
+ }
348
+ else {
349
+ tipContent = getI18n('vxe.table.dragTip', [tdEl.textContent || '']);
350
+ }
351
+ reactData.dragTipText = tipContent;
352
+ };
353
+ const updateColDropOrigin = ($xeTable, column) => {
335
354
  const el = $xeTable.$el;
336
355
  if (el) {
337
- const clss = 'row--drag-active-target';
338
- XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
339
- removeClass(elem, clss);
356
+ const clss = 'col--drag-origin';
357
+ XEUtils.arrayEach(el.querySelectorAll(`[colid="${column.id}"]`), (elem) => {
358
+ addClass(elem, clss);
340
359
  });
341
360
  }
342
- }
343
- function updateRowDropTarget($xeTable, row, dragPos) {
361
+ };
362
+ const clearColDropOrigin = ($xeTable) => {
344
363
  const el = $xeTable.$el;
345
364
  if (el) {
346
- const clss = 'row--drag-active-target';
347
- const rowid = getRowid($xeTable, row);
348
- XEUtils.arrayEach(el.querySelectorAll(`[rowid="${rowid}"]`), (elem) => {
349
- addClass(elem, clss);
350
- elem.setAttribute('drag-pos', dragPos);
365
+ const clss = 'col--drag-origin';
366
+ XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
367
+ elem.draggable = false;
368
+ removeClass(elem, clss);
351
369
  });
352
370
  }
353
- }
354
- function showRowDropTip(evnt, $xeTable) {
355
- const rdTipEl = $xeTable.$refs.refRowDragTipElem;
356
- if (!rdTipEl) {
357
- return;
371
+ };
372
+ const updateColDropTipContent = ($xeTable, tdEl) => {
373
+ const reactData = $xeTable;
374
+ const { dragCol } = reactData;
375
+ const columnDragOpts = $xeTable.computeColumnDragOpts;
376
+ const { tooltipMethod } = columnDragOpts;
377
+ let tipContent = '';
378
+ if (tooltipMethod) {
379
+ tipContent = `${tooltipMethod({
380
+ column: dragCol
381
+ }) || ''}`;
358
382
  }
359
- const el = $xeTable.$el;
383
+ else {
384
+ tipContent = getI18n('vxe.table.dragTip', [tdEl.textContent || '']);
385
+ }
386
+ reactData.dragTipText = tipContent;
387
+ };
388
+ function showDropTip($xeTable, evnt, trEl, thEl, dragPos) {
389
+ const reactData = $xeTable;
390
+ const el = $xeTable.$refs.refElem;
360
391
  if (!el) {
361
392
  return;
362
393
  }
394
+ const { scrollbarWidth, scrollbarHeight } = reactData;
395
+ const wrapperRect = el.getBoundingClientRect();
396
+ if (trEl) {
397
+ const rdLineEl = $xeTable.$refs.refDragRowLineElem;
398
+ if (rdLineEl) {
399
+ const trRect = trEl.getBoundingClientRect();
400
+ let top = Math.max(1, trRect.y - wrapperRect.y);
401
+ if (dragPos === 'bottom') {
402
+ top = Math.min(wrapperRect.height - 1, trRect.y - wrapperRect.y + trRect.height);
403
+ }
404
+ rdLineEl.style.top = `${top}px`;
405
+ rdLineEl.style.width = `${wrapperRect.width - scrollbarWidth}px`;
406
+ rdLineEl.style.display = 'block';
407
+ }
408
+ }
409
+ else if (thEl) {
410
+ const cdLineEl = $xeTable.$refs.refDragColLineElem;
411
+ if (cdLineEl) {
412
+ const thRect = thEl.getBoundingClientRect();
413
+ let left = Math.max(1, thRect.x - wrapperRect.x);
414
+ if (dragPos === 'right') {
415
+ left = Math.min(wrapperRect.width - 2, thRect.x - wrapperRect.x + thRect.width);
416
+ }
417
+ cdLineEl.style.left = `${left}px`;
418
+ cdLineEl.style.height = `${wrapperRect.height - scrollbarHeight}px`;
419
+ cdLineEl.style.display = 'block';
420
+ }
421
+ }
422
+ const rdTipEl = $xeTable.$refs.refDragTipElem;
363
423
  if (rdTipEl) {
364
- const wrapperRect = el.getBoundingClientRect();
365
424
  rdTipEl.style.display = 'block';
366
425
  rdTipEl.style.top = `${Math.min(el.clientHeight - el.scrollTop - rdTipEl.clientHeight, evnt.clientY - wrapperRect.y)}px`;
367
426
  rdTipEl.style.left = `${Math.min(el.clientWidth - el.scrollLeft - rdTipEl.clientWidth - 16, evnt.clientX - wrapperRect.x)}px`;
368
427
  }
369
428
  }
370
- const hideRowDropTip = ($xeTable) => {
371
- const rdTipEl = $xeTable.$refs.refRowDragTipElem;
429
+ const hideDropTip = ($xeTable) => {
430
+ const rdTipEl = $xeTable.$refs.refDragTipElem;
431
+ const rdLineEl = $xeTable.$refs.refDragRowLineElem;
432
+ const cdLineEl = $xeTable.$refs.refDragColLineElem;
372
433
  if (rdTipEl) {
373
434
  rdTipEl.style.display = '';
374
435
  }
375
- };
376
- const updateRowDropTipContent = ($xeTable, tdEl) => {
377
- const reactData = $xeTable;
378
- const { dragRow } = reactData;
379
- const dragOpts = $xeTable.computeDragOpts;
380
- const { rowTooltipMethod } = dragOpts;
381
- let tipContent = '';
382
- if (rowTooltipMethod) {
383
- tipContent = `${rowTooltipMethod({
384
- row: dragRow
385
- }) || ''}`;
436
+ if (rdLineEl) {
437
+ rdLineEl.style.display = '';
386
438
  }
387
- else {
388
- tipContent = getI18n('vxe.table.dragTip', [tdEl.textContent || '']);
439
+ if (cdLineEl) {
440
+ cdLineEl.style.display = '';
389
441
  }
390
- reactData.dragTipText = tipContent;
391
442
  };
392
443
  const Methods = {
393
444
  callSlot(slotFunc, params, h, vNodes) {
@@ -556,6 +607,7 @@ const Methods = {
556
607
  editStore.removeMaps = {};
557
608
  const sYLoad = this.updateScrollYStatus(fullData);
558
609
  this.scrollYLoad = sYLoad;
610
+ this.isDragRowMove = false;
559
611
  // 全量数据
560
612
  this.tableFullData = fullData;
561
613
  this.tableFullTreeData = treeData;
@@ -739,6 +791,7 @@ const Methods = {
739
791
  const tableFullColumn = getColumnList(collectColumn);
740
792
  this.tableFullColumn = tableFullColumn;
741
793
  this._isLoading = true;
794
+ this.isDragColMove = false;
742
795
  this.initColumnSort();
743
796
  return Promise.resolve(this.restoreCustomStorage()).then(() => {
744
797
  this._isLoading = false;
@@ -3013,7 +3066,7 @@ const Methods = {
3013
3066
  // 如果点击了当前表格之外
3014
3067
  !getEventTargetNode(evnt, $el).flag) {
3015
3068
  setTimeout(() => {
3016
- this.clearEdit(evnt).then(() => {
3069
+ this.handleClearEdit(evnt).then(() => {
3017
3070
  // 如果存在校验,点击了表格之外则清除
3018
3071
  if (!this.isActivated && editRules && validOpts.autoClear) {
3019
3072
  this.validErrorMaps = {};
@@ -3083,8 +3136,8 @@ const Methods = {
3083
3136
  if (isEsc) {
3084
3137
  this.preventEvent(evnt, 'event.keydown', null, () => {
3085
3138
  this.emitEvent('keydown-start', {}, evnt);
3086
- if (keyboardConfig && mouseConfig && mouseOpts.area && this.handleKeyboardEvent) {
3087
- this.handleKeyboardEvent(evnt);
3139
+ if (keyboardConfig && mouseConfig && mouseOpts.area && this.handleKeyboardCellAreaEvent) {
3140
+ this.handleKeyboardCellAreaEvent(evnt);
3088
3141
  }
3089
3142
  else if (actived.row || filterStore.visible || ctxMenuStore.visible) {
3090
3143
  evnt.stopPropagation();
@@ -3095,7 +3148,7 @@ const Methods = {
3095
3148
  // 如果是激活编辑状态,则取消编辑
3096
3149
  if (actived.row) {
3097
3150
  const params = actived.args;
3098
- this.clearEdit(evnt);
3151
+ this.handleClearEdit(evnt);
3099
3152
  // 如果配置了选中功能,则为选中状态
3100
3153
  if (mouseConfig && mouseOpts.selected) {
3101
3154
  this.$nextTick(() => this.handleSelected(params, evnt));
@@ -3155,8 +3208,8 @@ const Methods = {
3155
3208
  this.moveCtxMenu(evnt, keyCode, ctxMenuStore, 'selected', 39, true, this.ctxMenuList);
3156
3209
  }
3157
3210
  }
3158
- else if (keyboardConfig && mouseConfig && mouseOpts.area && this.handleKeyboardEvent) {
3159
- this.handleKeyboardEvent(evnt);
3211
+ else if (keyboardConfig && mouseConfig && mouseOpts.area && this.handleKeyboardCellAreaEvent) {
3212
+ this.handleKeyboardCellAreaEvent(evnt);
3160
3213
  }
3161
3214
  else if (keyboardConfig && isSpacebar && keyboardOpts.isChecked && selected.row && selected.column && (selected.column.type === 'checkbox' || selected.column.type === 'radio')) {
3162
3215
  // 空格键支持选中复选框
@@ -3192,7 +3245,7 @@ const Methods = {
3192
3245
  // 如果是激活编辑状态,则取消编辑
3193
3246
  if (actived.row) {
3194
3247
  const params = actived.args;
3195
- this.clearEdit(evnt);
3248
+ this.handleClearEdit(evnt);
3196
3249
  // 如果配置了选中功能,则为选中状态
3197
3250
  if (mouseConfig && mouseOpts.selected) {
3198
3251
  this.$nextTick(() => this.handleSelected(params, evnt));
@@ -4708,6 +4761,9 @@ const Methods = {
4708
4761
  this.emitEvent('sort-change', params, evnt);
4709
4762
  }
4710
4763
  },
4764
+ /**
4765
+ * 行拖拽
4766
+ */
4711
4767
  handleRowDragDragstartEvent(evnt) {
4712
4768
  const img = new Image();
4713
4769
  if (evnt.dataTransfer) {
@@ -4719,26 +4775,29 @@ const Methods = {
4719
4775
  const props = $xeTable;
4720
4776
  const reactData = $xeTable;
4721
4777
  const internalData = $xeTable;
4722
- const { treeConfig } = props;
4723
- const dragOpts = $xeTable.computeDragOpts;
4724
- const { dragEndMethod } = dragOpts;
4778
+ const { treeConfig, dragConfig } = props;
4779
+ const rowDragOpts = $xeTable.computeRowDragOpts;
4780
+ const { dragEndMethod } = rowDragOpts;
4725
4781
  const treeOpts = $xeTable.computeTreeOpts;
4726
4782
  const { transform } = treeOpts;
4727
4783
  const { dragRow } = reactData;
4728
4784
  const { afterFullData, afterTreeFullData, tableFullData, tableFullTreeData, prevDragRow, prevDragPos } = internalData;
4785
+ const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
4786
+ const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
4729
4787
  if (prevDragRow && dragRow) {
4730
4788
  // 判断是否有拖动
4731
4789
  if (prevDragRow !== dragRow) {
4732
- Promise.resolve(dragEndMethod
4733
- ? dragEndMethod({
4790
+ Promise.resolve(dEndMethod
4791
+ ? dEndMethod({
4734
4792
  oldRow: dragRow,
4735
- newRow: prevDragRow
4793
+ newRow: prevDragRow,
4794
+ dragPos: prevDragPos,
4795
+ offsetIndex: dragOffsetIndex
4736
4796
  })
4737
4797
  : true).then((status) => {
4738
4798
  if (!status) {
4739
4799
  return;
4740
4800
  }
4741
- const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
4742
4801
  let oafIndex = -1;
4743
4802
  let nafIndex = -1;
4744
4803
  if (treeConfig) {
@@ -4776,18 +4835,19 @@ const Methods = {
4776
4835
  if (!(treeConfig && transform)) {
4777
4836
  $xeTable.updateAfterDataIndex();
4778
4837
  }
4779
- $xeTable.updateFooter();
4780
4838
  $xeTable.checkSelectionStatus();
4781
4839
  if (reactData.scrollYLoad) {
4782
4840
  $xeTable.updateScrollYSpace();
4783
4841
  }
4784
4842
  $xeTable.$nextTick().then(() => {
4785
4843
  $xeTable.updateCellAreas();
4786
- return $xeTable.recalculate();
4844
+ $xeTable.recalculate();
4787
4845
  });
4788
4846
  $xeTable.dispatchEvent('row-dragend', {
4789
4847
  oldRow: dragRow,
4790
4848
  newRow: prevDragRow,
4849
+ dragPos: prevDragPos,
4850
+ offsetIndex: dragOffsetIndex,
4791
4851
  _index: {
4792
4852
  newIndex: nafIndex,
4793
4853
  oldIndex: oafIndex
@@ -4797,10 +4857,10 @@ const Methods = {
4797
4857
  });
4798
4858
  }
4799
4859
  }
4800
- hideRowDropTip($xeTable);
4860
+ hideDropTip($xeTable);
4801
4861
  clearRowDropOrigin($xeTable);
4802
- clearRowDropTarget($xeTable);
4803
4862
  reactData.dragRow = null;
4863
+ reactData.dragCol = null;
4804
4864
  setTimeout(() => {
4805
4865
  reactData.isDragRowMove = false;
4806
4866
  }, 500);
@@ -4809,50 +4869,57 @@ const Methods = {
4809
4869
  const $xeTable = this;
4810
4870
  const internalData = $xeTable;
4811
4871
  const reactData = $xeTable;
4872
+ const { dragRow } = reactData;
4873
+ if (!dragRow) {
4874
+ evnt.preventDefault();
4875
+ return;
4876
+ }
4812
4877
  const trEl = evnt.currentTarget;
4813
4878
  const rowid = trEl.getAttribute('rowid');
4814
4879
  const row = $xeTable.getRowById(rowid);
4815
- clearRowDropTarget($xeTable);
4816
4880
  if (row) {
4817
4881
  evnt.preventDefault();
4818
4882
  evnt.preventDefault();
4819
4883
  const { dragRow } = reactData;
4820
4884
  const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
4821
4885
  const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
4822
- updateRowDropTarget($xeTable, row, dragPos);
4823
4886
  internalData.prevDragRow = row;
4824
4887
  internalData.prevDragPos = dragPos;
4888
+ showDropTip($xeTable, evnt, trEl, null, dragPos);
4825
4889
  $xeTable.dispatchEvent('row-dragover', {
4826
4890
  oldRow: dragRow,
4827
4891
  targetRow: row,
4828
4892
  dragPos
4829
4893
  }, evnt);
4830
4894
  }
4831
- showRowDropTip(evnt, $xeTable);
4832
4895
  },
4833
4896
  handleCellDragMousedownEvent(evnt, params) {
4834
4897
  var _a;
4835
4898
  const $xeTable = this;
4899
+ const props = $xeTable;
4836
4900
  const reactData = $xeTable;
4837
4901
  evnt.stopPropagation();
4838
- const dragOpts = $xeTable.computeDragOpts;
4839
- const { dragStartMethod } = dragOpts;
4902
+ const { dragConfig } = props;
4903
+ const rowDragOpts = $xeTable.computeRowDragOpts;
4904
+ const { dragStartMethod } = rowDragOpts;
4840
4905
  const { row } = params;
4841
4906
  const dragEl = evnt.currentTarget;
4842
- const tdEl = (_a = dragEl.parentNode) === null || _a === void 0 ? void 0 : _a.parentNode;
4843
- const trEl = tdEl.parentNode;
4907
+ const tdEl = (_a = dragEl.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
4908
+ const trEl = tdEl.parentElement;
4909
+ const dStartMethod = dragStartMethod || (dragConfig ? dragConfig.dragStartMethod : null);
4844
4910
  reactData.isDragRowMove = false;
4845
4911
  clearRowDropOrigin($xeTable);
4846
- if (dragStartMethod && !dragStartMethod(params)) {
4912
+ if (dStartMethod && !dStartMethod(params)) {
4847
4913
  trEl.draggable = false;
4848
4914
  reactData.dragRow = null;
4849
- hideRowDropTip($xeTable);
4915
+ reactData.dragCol = null;
4916
+ hideDropTip($xeTable);
4850
4917
  return;
4851
4918
  }
4852
4919
  reactData.dragRow = row;
4920
+ reactData.dragCol = null;
4853
4921
  trEl.draggable = true;
4854
4922
  updateRowDropOrigin($xeTable, row);
4855
- showRowDropTip(evnt, $xeTable);
4856
4923
  updateRowDropTipContent($xeTable, tdEl);
4857
4924
  $xeTable.dispatchEvent('row-dragstart', params, evnt);
4858
4925
  },
@@ -4860,10 +4927,162 @@ const Methods = {
4860
4927
  const $xeTable = this;
4861
4928
  const reactData = $xeTable;
4862
4929
  clearRowDropOrigin($xeTable);
4863
- hideRowDropTip($xeTable);
4930
+ hideDropTip($xeTable);
4864
4931
  reactData.dragRow = null;
4932
+ reactData.dragCol = null;
4865
4933
  reactData.isDragRowMove = false;
4866
4934
  },
4935
+ /**
4936
+ * 列拖拽
4937
+ */
4938
+ handleHeaderCellDragDragstartEvent(evnt) {
4939
+ const img = new Image();
4940
+ if (evnt.dataTransfer) {
4941
+ evnt.dataTransfer.setDragImage(img, 0, 0);
4942
+ }
4943
+ },
4944
+ handleHeaderCellDragDragendEvent(evnt) {
4945
+ const $xeTable = this;
4946
+ const props = $xeTable;
4947
+ const reactData = $xeTable;
4948
+ const internalData = $xeTable;
4949
+ const { mouseConfig } = props;
4950
+ const columnDragOpts = $xeTable.computeColumnDragOpts;
4951
+ const { dragEndMethod } = columnDragOpts;
4952
+ const { dragCol } = reactData;
4953
+ const { collectColumn, prevDragCol, prevDragPos } = internalData;
4954
+ const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0;
4955
+ if (prevDragCol && dragCol) {
4956
+ // 判断是否有拖动
4957
+ if (prevDragCol !== dragCol) {
4958
+ Promise.resolve(dragEndMethod
4959
+ ? dragEndMethod({
4960
+ oldColumn: dragCol,
4961
+ newColumn: prevDragCol,
4962
+ dragPos: prevDragPos,
4963
+ offsetIndex: dragOffsetIndex
4964
+ })
4965
+ : true).then((status) => {
4966
+ if (!status) {
4967
+ return;
4968
+ }
4969
+ XEUtils.eachTree(collectColumn, (column, index, items, path, parent) => {
4970
+ if (!parent) {
4971
+ const sortIndex = index + 1;
4972
+ column.renderSortNumber = sortIndex;
4973
+ }
4974
+ });
4975
+ const oafIndex = XEUtils.findIndexOf(collectColumn, item => item.id === dragCol.id);
4976
+ const nafIndex = XEUtils.findIndexOf(collectColumn, item => item.id === prevDragCol.id) + dragOffsetIndex;
4977
+ const newTargetCol = collectColumn[nafIndex];
4978
+ if (newTargetCol) {
4979
+ // 插入最后位置
4980
+ dragCol.renderSortNumber = newTargetCol.renderSortNumber;
4981
+ newTargetCol.renderSortNumber = dragCol.renderSortNumber + 0.5;
4982
+ }
4983
+ else {
4984
+ // 插入新位置
4985
+ dragCol.renderSortNumber = collectColumn.length + 1.5;
4986
+ }
4987
+ reactData.isDragColMove = true;
4988
+ if (mouseConfig) {
4989
+ if ($xeTable.clearSelected) {
4990
+ $xeTable.clearSelected();
4991
+ }
4992
+ if ($xeTable.clearCellAreas) {
4993
+ $xeTable.clearCellAreas();
4994
+ $xeTable.clearCopyCellArea();
4995
+ }
4996
+ }
4997
+ $xeTable.analyColumnWidth();
4998
+ $xeTable.$nextTick().then(() => {
4999
+ $xeTable.updateCellAreas();
5000
+ $xeTable.refreshColumn(true);
5001
+ });
5002
+ $xeTable.dispatchEvent('column-dragend', {
5003
+ oldColumn: dragCol,
5004
+ newColumn: prevDragCol,
5005
+ dragPos: prevDragPos,
5006
+ offsetIndex: dragOffsetIndex,
5007
+ _index: {
5008
+ newIndex: nafIndex,
5009
+ oldIndex: oafIndex
5010
+ }
5011
+ }, evnt);
5012
+ }).catch(() => {
5013
+ });
5014
+ }
5015
+ }
5016
+ hideDropTip($xeTable);
5017
+ clearColDropOrigin($xeTable);
5018
+ reactData.dragRow = null;
5019
+ reactData.dragCol = null;
5020
+ setTimeout(() => {
5021
+ reactData.isDragColMove = false;
5022
+ }, 500);
5023
+ },
5024
+ handleHeaderCellDragDragoverEvent(evnt) {
5025
+ const $xeTable = this;
5026
+ const reactData = $xeTable;
5027
+ const internalData = $xeTable;
5028
+ const { dragCol } = reactData;
5029
+ if (!dragCol) {
5030
+ evnt.preventDefault();
5031
+ return;
5032
+ }
5033
+ const thEl = evnt.currentTarget;
5034
+ const colid = thEl.getAttribute('colid');
5035
+ const column = $xeTable.getColumnById(colid);
5036
+ if (column) {
5037
+ evnt.preventDefault();
5038
+ const { dragCol } = reactData;
5039
+ const offsetX = evnt.clientX - thEl.getBoundingClientRect().x;
5040
+ const dragPos = offsetX < thEl.clientWidth / 2 ? 'left' : 'right';
5041
+ internalData.prevDragCol = column;
5042
+ internalData.prevDragPos = dragPos;
5043
+ showDropTip($xeTable, evnt, null, thEl, dragPos);
5044
+ $xeTable.dispatchEvent('column-dragover', {
5045
+ oldColumn: dragCol,
5046
+ targetColumn: column,
5047
+ dragPos
5048
+ }, evnt);
5049
+ }
5050
+ },
5051
+ handleHeaderCellDragMousedownEvent(evnt, params) {
5052
+ var _a;
5053
+ const $xeTable = this;
5054
+ const reactData = $xeTable;
5055
+ evnt.stopPropagation();
5056
+ const columnDragOpts = $xeTable.computeColumnDragOpts;
5057
+ const { dragStartMethod } = columnDragOpts;
5058
+ const { column } = params;
5059
+ const dragEl = evnt.currentTarget;
5060
+ const thEl = (_a = dragEl.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
5061
+ reactData.isDragColMove = false;
5062
+ clearColDropOrigin($xeTable);
5063
+ if (dragStartMethod && !dragStartMethod(params)) {
5064
+ thEl.draggable = false;
5065
+ reactData.dragRow = null;
5066
+ reactData.dragCol = null;
5067
+ hideDropTip($xeTable);
5068
+ return;
5069
+ }
5070
+ reactData.dragCol = column;
5071
+ reactData.dragRow = null;
5072
+ thEl.draggable = true;
5073
+ updateColDropOrigin($xeTable, column);
5074
+ updateColDropTipContent($xeTable, thEl);
5075
+ $xeTable.dispatchEvent('column-dragstart', params, evnt);
5076
+ },
5077
+ handleHeaderCellDragMouseupEvent() {
5078
+ const $xeTable = this;
5079
+ const reactData = $xeTable;
5080
+ clearColDropOrigin($xeTable);
5081
+ hideDropTip($xeTable);
5082
+ reactData.dragRow = null;
5083
+ reactData.dragCol = null;
5084
+ reactData.isDragColMove = false;
5085
+ },
4867
5086
  setPendingRow(rows, status) {
4868
5087
  const pendingMaps = Object.assign({}, this.pendingRowMaps);
4869
5088
  const pendingList = [...this.pendingRowList];
@@ -6341,8 +6560,8 @@ const Methods = {
6341
6560
  }
6342
6561
  },
6343
6562
  updateCellAreas() {
6344
- if (this.mouseConfig && this.mouseOpts.area && this.handleUpdateCellAreas) {
6345
- return this.handleUpdateCellAreas();
6563
+ if (this.mouseConfig && this.mouseOpts.area && this.handleRecalculateCellAreas) {
6564
+ return this.handleRecalculateCellAreas();
6346
6565
  }
6347
6566
  return this.$nextTick();
6348
6567
  },
@@ -159,8 +159,12 @@ export default {
159
159
  cellConfig: Object,
160
160
  // 行配置信息
161
161
  rowConfig: Object,
162
- // 可拖拽配置项
162
+ // 已废弃,被 rowDragConfig 替换
163
163
  dragConfig: Object,
164
+ // 行拖拽排序配置项
165
+ rowDragConfig: Object,
166
+ // 列拖拽排序配置项
167
+ columnDragConfig: Object,
164
168
  // 列调整配置项
165
169
  resizableConfig: Object,
166
170
  // 序号配置项