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
package/lib/index.umd.js CHANGED
@@ -1998,7 +1998,7 @@ function eqEmptyValue(cellValue) {
1998
1998
  ;// CONCATENATED MODULE: ./packages/ui/index.ts
1999
1999
 
2000
2000
 
2001
- const version = "4.8.0";
2001
+ const version = "4.8.2";
2002
2002
  core_.VxeUI.version = version;
2003
2003
  core_.VxeUI.tableVersion = version;
2004
2004
  core_.VxeUI.setConfig({
@@ -2035,6 +2035,9 @@ core_.VxeUI.setConfig({
2035
2035
  // trigger: 'default'
2036
2036
  strict: true
2037
2037
  },
2038
+ dragConfig: {
2039
+ showRowIcon: true
2040
+ },
2038
2041
  checkboxConfig: {
2039
2042
  // trigger: 'default',
2040
2043
  strict: true
@@ -2384,7 +2387,7 @@ var es_array_push = __webpack_require__(4114);
2384
2387
  const {
2385
2388
  log: log_log
2386
2389
  } = core_.VxeUI;
2387
- const log_version = `table v${"4.8.0"}`;
2390
+ const log_version = `table v${"4.8.2"}`;
2388
2391
  const warnLog = log_log.create('warn', log_version);
2389
2392
  const errLog = log_log.create('error', log_version);
2390
2393
  ;// CONCATENATED MODULE: ./packages/table/src/columnInfo.ts
@@ -2483,6 +2486,7 @@ class ColumnInfo {
2483
2486
  filterRecoverMethod: _vm.filterRecoverMethod,
2484
2487
  filterRender: _vm.filterRender,
2485
2488
  treeNode: _vm.treeNode,
2489
+ dragSort: _vm.dragSort,
2486
2490
  cellType: _vm.cellType,
2487
2491
  cellRender: _vm.cellRender,
2488
2492
  editRender: _vm.editRender,
@@ -3316,7 +3320,8 @@ const {
3316
3320
  getI18n: cell_getI18n,
3317
3321
  getIcon: cell_getIcon,
3318
3322
  renderer: cell_renderer,
3319
- formats: cell_formats
3323
+ formats: cell_formats,
3324
+ renderEmptyElement
3320
3325
  } = core_.VxeUI;
3321
3326
  function renderTitlePrefixIcon(params) {
3322
3327
  const {
@@ -3350,6 +3355,57 @@ function renderTitleSuffixIcon(params) {
3350
3355
  }
3351
3356
  })] : [];
3352
3357
  }
3358
+ function renderCellDragIcon(params) {
3359
+ const {
3360
+ $table
3361
+ } = params;
3362
+ const {
3363
+ computeDragOpts
3364
+ } = $table.getComputeMaps();
3365
+ const dragOpts = computeDragOpts.value;
3366
+ const {
3367
+ rowDisabledMethod
3368
+ } = dragOpts;
3369
+ const isDisabled = rowDisabledMethod && rowDisabledMethod(params);
3370
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
3371
+ key: 'dg',
3372
+ class: ['vxe-cell--drag-handle', {
3373
+ 'is--disabled': isDisabled
3374
+ }],
3375
+ onMousedown(evnt) {
3376
+ if (!isDisabled) {
3377
+ $table.handleCellDragMousedownEvent(evnt, params);
3378
+ }
3379
+ },
3380
+ onMouseup: $table.handleCellDragMouseupEvent
3381
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('i', {
3382
+ class: 'vxe-table-icon-drag-handle'
3383
+ })]);
3384
+ }
3385
+ function renderCellBaseVNs(params, content) {
3386
+ const {
3387
+ $table,
3388
+ column
3389
+ } = params;
3390
+ const {
3391
+ dragSort
3392
+ } = column;
3393
+ const vns = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(content) ? content : [content];
3394
+ const {
3395
+ computeRowOpts,
3396
+ computeDragOpts
3397
+ } = $table.getComputeMaps();
3398
+ const rowOpts = computeRowOpts.value;
3399
+ const dragOpts = computeDragOpts.value;
3400
+ const {
3401
+ showRowIcon,
3402
+ rowVisibleMethod
3403
+ } = dragOpts;
3404
+ if (dragSort && rowOpts.drag && showRowIcon && (!rowVisibleMethod || rowVisibleMethod(params))) {
3405
+ vns.unshift(renderCellDragIcon(params));
3406
+ }
3407
+ return vns;
3408
+ }
3353
3409
  function renderTitleContent(params, content) {
3354
3410
  const {
3355
3411
  $table,
@@ -3588,7 +3644,7 @@ const Cell = {
3588
3644
  const renderOpts = editRender || cellRender;
3589
3645
  const defaultSlot = slots ? slots.default : null;
3590
3646
  if (defaultSlot) {
3591
- return $table.callSlot(defaultSlot, params);
3647
+ return renderCellBaseVNs(params, $table.callSlot(defaultSlot, params));
3592
3648
  }
3593
3649
  if (renderOpts) {
3594
3650
  const compConf = cell_renderer.get(renderOpts.name);
@@ -3597,21 +3653,21 @@ const Cell = {
3597
3653
  const rtDefault = compConf.renderTableDefault || compConf.renderDefault;
3598
3654
  const renderFn = editRender ? rtCell : rtDefault;
3599
3655
  if (renderFn) {
3600
- return getSlotVNs(renderFn(renderOpts, Object.assign({
3656
+ return renderCellBaseVNs(params, getSlotVNs(renderFn(renderOpts, Object.assign({
3601
3657
  $type: editRender ? 'edit' : 'cell'
3602
- }, params)));
3658
+ }, params))));
3603
3659
  }
3604
3660
  }
3605
3661
  }
3606
3662
  const cellValue = $table.getCellLabel(row, column);
3607
3663
  const cellPlaceholder = editRender ? editRender.placeholder : '';
3608
- return [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
3664
+ return renderCellBaseVNs(params, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
3609
3665
  class: 'vxe-cell--label'
3610
3666
  }, [
3611
3667
  // 如果设置占位符
3612
3668
  editRender && eqEmptyValue(cellValue) ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
3613
3669
  class: 'vxe-cell--placeholder'
3614
- }, formatText(getFuncText(cellPlaceholder), 1)) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', formatText(cellValue, 1))])];
3670
+ }, formatText(getFuncText(cellPlaceholder), 1)) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', formatText(cellValue, 1))])]);
3615
3671
  },
3616
3672
  renderTreeCell(params) {
3617
3673
  return Cell.renderTreeIcon(params, Cell.renderDefaultCell(params));
@@ -3739,13 +3795,13 @@ const Cell = {
3739
3795
  } = column;
3740
3796
  const defaultSlot = slots ? slots.default : null;
3741
3797
  if (defaultSlot) {
3742
- return $table.callSlot(defaultSlot, params);
3798
+ return renderCellBaseVNs(params, $table.callSlot(defaultSlot, params));
3743
3799
  }
3744
3800
  const {
3745
3801
  seq
3746
3802
  } = params;
3747
3803
  const seqMethod = seqOpts.seqMethod;
3748
- return [formatText(seqMethod ? seqMethod(params) : treeConfig ? seq : (seqOpts.startIndex || 0) + seq, 1)];
3804
+ return renderCellBaseVNs(params, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', `${formatText(seqMethod ? seqMethod(params) : treeConfig ? seq : (seqOpts.startIndex || 0) + seq, 1)}`)]);
3749
3805
  },
3750
3806
  renderTreeIndexCell(params) {
3751
3807
  return Cell.renderTreeIcon(params, Cell.renderSeqCell(params));
@@ -3823,7 +3879,7 @@ const Cell = {
3823
3879
  visible: isVisible
3824
3880
  };
3825
3881
  if (radioSlot) {
3826
- return $table.callSlot(radioSlot, radioParams);
3882
+ return renderCellBaseVNs(params, $table.callSlot(radioSlot, radioParams));
3827
3883
  }
3828
3884
  const radioVNs = [];
3829
3885
  if (isVisible) {
@@ -3836,13 +3892,13 @@ const Cell = {
3836
3892
  class: 'vxe-radio--label'
3837
3893
  }, defaultSlot ? $table.callSlot(defaultSlot, radioParams) : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(row, labelField)));
3838
3894
  }
3839
- return [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
3895
+ return renderCellBaseVNs(params, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
3840
3896
  class: ['vxe-cell--radio', {
3841
3897
  'is--checked': isChecked,
3842
3898
  'is--disabled': isDisabled
3843
3899
  }],
3844
3900
  ...ons
3845
- }, radioVNs)];
3901
+ }, radioVNs)]);
3846
3902
  },
3847
3903
  renderTreeRadioCell(params) {
3848
3904
  return Cell.renderTreeIcon(params, Cell.renderRadioCell(params));
@@ -3979,7 +4035,7 @@ const Cell = {
3979
4035
  indeterminate
3980
4036
  };
3981
4037
  if (checkboxSlot) {
3982
- return $table.callSlot(checkboxSlot, checkboxParams);
4038
+ return renderCellBaseVNs(params, $table.callSlot(checkboxSlot, checkboxParams));
3983
4039
  }
3984
4040
  const checkVNs = [];
3985
4041
  if (isVisible) {
@@ -3992,7 +4048,7 @@ const Cell = {
3992
4048
  class: 'vxe-checkbox--label'
3993
4049
  }, defaultSlot ? $table.callSlot(defaultSlot, checkboxParams) : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(row, labelField)));
3994
4050
  }
3995
- return [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4051
+ return renderCellBaseVNs(params, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
3996
4052
  class: ['vxe-cell--checkbox', {
3997
4053
  'is--checked': isChecked,
3998
4054
  'is--disabled': isDisabled,
@@ -4000,7 +4056,7 @@ const Cell = {
4000
4056
  'is--hidden': !isVisible
4001
4057
  }],
4002
4058
  ...ons
4003
- }, checkVNs)];
4059
+ }, checkVNs)]);
4004
4060
  },
4005
4061
  renderTreeSelectionCell(params) {
4006
4062
  return Cell.renderTreeIcon(params, Cell.renderCheckboxCell(params));
@@ -4072,7 +4128,7 @@ const Cell = {
4072
4128
  indeterminate: isIndeterminate
4073
4129
  };
4074
4130
  if (checkboxSlot) {
4075
- return $table.callSlot(checkboxSlot, checkboxParams);
4131
+ return renderCellBaseVNs(params, $table.callSlot(checkboxSlot, checkboxParams));
4076
4132
  }
4077
4133
  const checkVNs = [];
4078
4134
  if (isVisible) {
@@ -4085,7 +4141,7 @@ const Cell = {
4085
4141
  }, defaultSlot ? $table.callSlot(defaultSlot, checkboxParams) : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(row, labelField)));
4086
4142
  }
4087
4143
  }
4088
- return [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4144
+ return renderCellBaseVNs(params, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4089
4145
  class: ['vxe-cell--checkbox', {
4090
4146
  'is--checked': isChecked,
4091
4147
  'is--disabled': isDisabled,
@@ -4093,7 +4149,7 @@ const Cell = {
4093
4149
  'is--hidden': !isVisible
4094
4150
  }],
4095
4151
  ...ons
4096
- }, checkVNs)];
4152
+ }, checkVNs)]);
4097
4153
  },
4098
4154
  renderTreeSelectionCellByProp(params) {
4099
4155
  return Cell.renderTreeIcon(params, Cell.renderCheckboxCellByProp(params));
@@ -4136,7 +4192,7 @@ const Cell = {
4136
4192
  let isAceived = false;
4137
4193
  let isLazyLoading = false;
4138
4194
  if (iconSlot) {
4139
- return $table.callSlot(iconSlot, params);
4195
+ return renderCellBaseVNs(params, $table.callSlot(iconSlot, params));
4140
4196
  }
4141
4197
  if (!isHidden) {
4142
4198
  const rowid = getRowid($table, row);
@@ -4145,7 +4201,7 @@ const Cell = {
4145
4201
  isLazyLoading = !!rowExpandLazyLoadedMaps[rowid];
4146
4202
  }
4147
4203
  }
4148
- return [showIcon && (!visibleMethod || visibleMethod(params)) ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4204
+ return renderCellBaseVNs(params, [showIcon && (!visibleMethod || visibleMethod(params)) ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4149
4205
  class: ['vxe-table--expanded', {
4150
4206
  'is--active': isAceived
4151
4207
  }],
@@ -4154,9 +4210,9 @@ const Cell = {
4154
4210
  }
4155
4211
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('i', {
4156
4212
  class: ['vxe-table--expand-btn', isLazyLoading ? iconLoaded || cell_getIcon().TABLE_EXPAND_LOADED : isAceived ? iconOpen || cell_getIcon().TABLE_EXPAND_OPEN : iconClose || cell_getIcon().TABLE_EXPAND_CLOSE]
4157
- })]) : null, defaultSlot || labelField ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4213
+ })]) : renderEmptyElement($table), defaultSlot || labelField ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4158
4214
  class: 'vxe-table--expand-label'
4159
- }, defaultSlot ? $table.callSlot(defaultSlot, params) : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(row, labelField)) : null];
4215
+ }, defaultSlot ? $table.callSlot(defaultSlot, params) : external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(row, labelField)) : renderEmptyElement($table)]);
4160
4216
  },
4161
4217
  renderExpandData(params) {
4162
4218
  const {
@@ -4195,12 +4251,12 @@ const Cell = {
4195
4251
  } = column;
4196
4252
  const defaultSlot = slots ? slots.default : null;
4197
4253
  if (defaultSlot) {
4198
- return $table.callSlot(defaultSlot, params);
4254
+ return renderCellBaseVNs(params, $table.callSlot(defaultSlot, params));
4199
4255
  }
4200
- return [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4256
+ return renderCellBaseVNs(params, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4201
4257
  class: 'vxe-cell--html',
4202
4258
  innerHTML: getDefaultCellLabel(params)
4203
- })];
4259
+ })]);
4204
4260
  },
4205
4261
  renderTreeHTMLCell(params) {
4206
4262
  return Cell.renderTreeIcon(params, Cell.renderHTMLCell(params));
@@ -4413,12 +4469,12 @@ const Cell = {
4413
4469
  return [];
4414
4470
  }
4415
4471
  if (defaultSlot) {
4416
- return $table.callSlot(defaultSlot, cellParams);
4472
+ return renderCellBaseVNs(params, $table.callSlot(defaultSlot, cellParams));
4417
4473
  }
4418
4474
  if (formatter) {
4419
- return [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4475
+ return renderCellBaseVNs(params, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('span', {
4420
4476
  class: 'vxe-cell--label'
4421
- }, getDefaultCellLabel(cellParams))];
4477
+ }, getDefaultCellLabel(cellParams))]);
4422
4478
  }
4423
4479
  return Cell.renderDefaultCell(cellParams);
4424
4480
  }
@@ -4505,8 +4561,10 @@ const columnProps = {
4505
4561
  filterRecoverMethod: Function,
4506
4562
  // 筛选模板配置项
4507
4563
  filterRender: Object,
4508
- // 指定为树节点
4564
+ // 设置为树节点
4509
4565
  treeNode: Boolean,
4566
+ // 指定为树节点
4567
+ dragSort: Boolean,
4510
4568
  // 是否可视
4511
4569
  visible: {
4512
4570
  type: Boolean,
@@ -5079,7 +5137,7 @@ const lineOffsetSizes = {
5079
5137
  'col--valid-error': !!errorValidItem,
5080
5138
  'col--current': currentColumn === column
5081
5139
  }, getPropClass(compCellClassName, params), getPropClass(className, params), getPropClass(allCellClassName, params)],
5082
- key: columnKey || columnOpts.useKey ? colid : $columnIndex,
5140
+ key: columnKey || columnOpts.useKey || rowOpts.useKey ? colid : $columnIndex,
5083
5141
  ...attrs,
5084
5142
  style: Object.assign({
5085
5143
  height: cellHeight
@@ -5126,7 +5184,7 @@ const lineOffsetSizes = {
5126
5184
  let rowIndex = $rowIndex;
5127
5185
  // 确保任何情况下 rowIndex 都精准指向真实 data 索引
5128
5186
  rowIndex = $xeTable.getRowIndex(row);
5129
- // 事件绑定
5187
+ // 当前行事件
5130
5188
  if (rowOpts.isHover || highlightHoverRow) {
5131
5189
  trOn.onMouseenter = evnt => {
5132
5190
  if (isVMScrollProcess()) {
@@ -5144,6 +5202,12 @@ const lineOffsetSizes = {
5144
5202
  $xeTable.clearHoverRow();
5145
5203
  };
5146
5204
  }
5205
+ // 拖拽行事件
5206
+ if (rowOpts.drag) {
5207
+ trOn.onDragstart = $xeTable.handleRowDragDragstartEvent;
5208
+ trOn.onDragend = $xeTable.handleRowDragDragendEvent;
5209
+ trOn.onDragover = $xeTable.handleRowDragDragoverEvent;
5210
+ }
5147
5211
  const rowid = getRowid($xeTable, row);
5148
5212
  const rest = fullAllDataRowIdData[rowid];
5149
5213
  let rowLevel = 0;
@@ -5193,7 +5257,7 @@ const lineOffsetSizes = {
5193
5257
  }, getPropClass(rowClassName, params)],
5194
5258
  rowid: rowid,
5195
5259
  style: rowStyle ? external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(rowStyle) ? rowStyle(params) : rowStyle : null,
5196
- key: rowKey || rowOpts.useKey || treeConfig ? rowid : $rowIndex,
5260
+ key: rowKey || rowOpts.useKey || rowOpts.drag || treeConfig ? rowid : $rowIndex,
5197
5261
  ...trOn
5198
5262
  }, tableColumn.map((column, $columnIndex) => {
5199
5263
  return renderColumn(seq, rowid, fixedType, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, tableColumn, tableData);
@@ -5498,7 +5562,8 @@ const lineOffsetSizes = {
5498
5562
  tableData,
5499
5563
  mergeList,
5500
5564
  scrollYLoad,
5501
- isAllOverflow
5565
+ isAllOverflow,
5566
+ isDragRowMove
5502
5567
  } = tableReactData;
5503
5568
  const {
5504
5569
  visibleColumn
@@ -5506,6 +5571,7 @@ const lineOffsetSizes = {
5506
5571
  const {
5507
5572
  slots
5508
5573
  } = tableContext;
5574
+ const rowOpts = computeRowOpts.value;
5509
5575
  const sYOpts = computeSYOpts.value;
5510
5576
  const emptyOpts = computeEmptyOpts.value;
5511
5577
  const keyboardOpts = computeKeyboardOpts.value;
@@ -5587,7 +5653,12 @@ const lineOffsetSizes = {
5587
5653
  /**
5588
5654
  * 内容
5589
5655
  */
5590
- (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('tbody', {
5656
+ rowOpts.drag ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)(external_commonjs_vue_commonjs2_vue_root_Vue_.TransitionGroup, {
5657
+ name: `vxe-body--row-list${isDragRowMove ? '' : '-disabled'}`,
5658
+ tag: 'tbody'
5659
+ }, {
5660
+ default: () => renderRows(fixedType, tableData, tableColumn)
5661
+ }) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('tbody', {
5591
5662
  ref: refBodyTBody
5592
5663
  }, renderRows(fixedType, tableData, tableColumn))]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
5593
5664
  class: 'vxe-table--checkbox-range'
@@ -6553,6 +6624,8 @@ const {
6553
6624
  cellConfig: Object,
6554
6625
  // 行配置信息
6555
6626
  rowConfig: Object,
6627
+ // 可拖拽配置项
6628
+ dragConfig: Object,
6556
6629
  // 列调整配置项
6557
6630
  resizableConfig: Object,
6558
6631
  // 序号配置项
@@ -6619,7 +6692,7 @@ const {
6619
6692
  params: Object
6620
6693
  });
6621
6694
  ;// CONCATENATED MODULE: ./packages/table/src/emits.ts
6622
- /* harmony default export */ var emits = (['update:data', 'keydown-start', 'keydown', 'keydown-end', 'paste', 'copy', 'cut', 'current-change', 'radio-change', 'checkbox-change', 'checkbox-all', 'checkbox-range-start', 'checkbox-range-change', 'checkbox-range-end', 'checkbox-range-select', 'cell-click', 'cell-dblclick', 'cell-menu', 'cell-mouseenter', 'cell-mouseleave', 'cell-selected', 'cell-delete-value', 'cell-backspace-value', 'header-cell-click', 'header-cell-dblclick', 'header-cell-menu', 'footer-cell-click', 'footer-cell-dblclick', 'footer-cell-menu', 'clear-merge', 'sort-change', 'clear-sort', 'filter-change', 'filter-visible', 'clear-filter', 'resizable-change', 'toggle-row-expand', 'toggle-tree-expand', 'menu-click', 'edit-closed', 'edit-actived', 'edit-activated', 'edit-disabled', 'valid-error', 'scroll', 'custom', 'change-fnr', 'open-fnr', 'show-fnr', 'hide-fnr', 'fnr-change', 'fnr-find', 'fnr-find-all', 'fnr-replace', 'fnr-replace-all', 'cell-area-copy', 'cell-area-cut', 'cell-area-paste', 'cell-area-merge', 'clear-cell-area-selection', 'clear-cell-area-merge', 'header-cell-area-selection', 'cell-area-selection-invalid', 'cell-area-selection-start', 'cell-area-selection-drag', 'cell-area-selection-end', 'cell-area-extension-start', 'cell-area-extension-drag', 'cell-area-extension-end', 'cell-area-selection-all-start', 'cell-area-selection-all-end', 'cell-area-arrows-start', 'cell-area-arrows-end', 'active-cell-change-start', 'active-cell-change-end']);
6695
+ /* harmony default export */ var emits = (['update:data', 'keydown-start', 'keydown', 'keydown-end', 'paste', 'copy', 'cut', 'current-change', 'radio-change', 'checkbox-change', 'checkbox-all', 'checkbox-range-start', 'checkbox-range-change', 'checkbox-range-end', 'checkbox-range-select', 'cell-click', 'cell-dblclick', 'cell-menu', 'cell-mouseenter', 'cell-mouseleave', 'cell-selected', 'cell-delete-value', 'cell-backspace-value', 'header-cell-click', 'header-cell-dblclick', 'header-cell-menu', 'footer-cell-click', 'footer-cell-dblclick', 'footer-cell-menu', 'clear-merge', 'sort-change', 'clear-sort', 'filter-change', 'filter-visible', 'clear-filter', 'resizable-change', 'toggle-row-expand', 'toggle-tree-expand', 'menu-click', 'edit-closed', 'row-dragstart', 'row-dragover', 'row-dragend', 'edit-actived', 'edit-activated', 'edit-disabled', 'valid-error', 'scroll', 'custom', 'change-fnr', 'open-fnr', 'show-fnr', 'hide-fnr', 'fnr-change', 'fnr-find', 'fnr-find-all', 'fnr-replace', 'fnr-replace-all', 'cell-area-copy', 'cell-area-cut', 'cell-area-paste', 'cell-area-merge', 'clear-cell-area-selection', 'clear-cell-area-merge', 'header-cell-area-selection', 'cell-area-selection-invalid', 'cell-area-selection-start', 'cell-area-selection-drag', 'cell-area-selection-end', 'cell-area-extension-start', 'cell-area-extension-drag', 'cell-area-extension-end', 'cell-area-selection-all-start', 'cell-area-selection-all-end', 'cell-area-arrows-start', 'cell-area-arrows-end', 'active-cell-change-start', 'active-cell-change-end']);
6623
6696
  ;// CONCATENATED MODULE: ./packages/table/module/custom/panel.ts
6624
6697
 
6625
6698
 
@@ -8740,6 +8813,9 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
8740
8813
  isFooter: false
8741
8814
  },
8742
8815
  scrollVMLoading: false,
8816
+ isDragRowMove: false,
8817
+ dragRow: null,
8818
+ dragTipText: '',
8743
8819
  _isResize: false,
8744
8820
  _isLoading: false
8745
8821
  });
@@ -8814,6 +8890,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
8814
8890
  columnStatusMaps: {},
8815
8891
  // 行选取状态
8816
8892
  rowStatusMaps: {},
8893
+ // prevDragRow: null,
8817
8894
  inited: false,
8818
8895
  tooltipTimeout: null,
8819
8896
  initStatus: false,
@@ -8841,6 +8918,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
8841
8918
  const refRightContainer = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
8842
8919
  const refCellResizeBar = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
8843
8920
  const refEmptyPlaceholder = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
8921
+ const refRowDragTipElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
8844
8922
  const refScrollXVirtualElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
8845
8923
  const refScrollYVirtualElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
8846
8924
  const refScrollXHandleElem = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
@@ -8890,6 +8968,9 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
8890
8968
  const computeRowOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
8891
8969
  return Object.assign({}, table_getConfig().table.rowConfig, props.rowConfig);
8892
8970
  });
8971
+ const computeDragOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
8972
+ return Object.assign({}, table_getConfig().table.dragConfig, props.dragConfig);
8973
+ });
8893
8974
  const computeResizeOpts = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.computed)(() => {
8894
8975
  return Object.assign({}, table_getConfig().table.resizeConfig, props.resizeConfig);
8895
8976
  });
@@ -9137,6 +9218,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
9137
9218
  computeColumnOpts,
9138
9219
  computeCellOpts,
9139
9220
  computeRowOpts,
9221
+ computeDragOpts,
9140
9222
  computeResizeOpts,
9141
9223
  computeResizableOpts,
9142
9224
  computeSeqOpts,
@@ -11707,7 +11789,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
11707
11789
  const handleCheckAllEvent = (evnt, value) => {
11708
11790
  handleCheckedAllCheckboxRow(value);
11709
11791
  if (evnt) {
11710
- tableMethods.dispatchEvent('checkbox-all', {
11792
+ dispatchEvent('checkbox-all', {
11711
11793
  records: tableMethods.getCheckboxRecords(),
11712
11794
  reserves: tableMethods.getCheckboxReserveRecords(),
11713
11795
  indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
@@ -11786,14 +11868,22 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
11786
11868
  leading: false,
11787
11869
  trailing: true
11788
11870
  });
11789
- const scrollXEvent = evnt => {
11790
- const wrapperEl = evnt.currentTarget;
11871
+ const handleSyncScrollX = scrollLeft => {
11791
11872
  const tableHeader = refTableHeader.value;
11792
11873
  const tableBody = refTableBody.value;
11793
11874
  const tableFooter = refTableFooter.value;
11794
11875
  const bodyElem = tableBody.$el;
11795
11876
  const headerElem = tableHeader ? tableHeader.$el : null;
11796
11877
  const footerElem = tableFooter ? tableFooter.$el : null;
11878
+ setScrollLeft(bodyElem, scrollLeft);
11879
+ setScrollLeft(headerElem, scrollLeft);
11880
+ setScrollLeft(footerElem, scrollLeft);
11881
+ setScrollLeft(bodyElem, scrollLeft);
11882
+ setScrollLeft(headerElem, scrollLeft);
11883
+ setScrollLeft(footerElem, scrollLeft);
11884
+ };
11885
+ const scrollXEvent = evnt => {
11886
+ const wrapperEl = evnt.currentTarget;
11797
11887
  const {
11798
11888
  scrollTop,
11799
11889
  scrollLeft
@@ -11802,9 +11892,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
11802
11892
  const isRollY = false;
11803
11893
  internalData.lastScrollLeft = scrollLeft;
11804
11894
  reactData.lastScrollTime = Date.now();
11805
- setScrollLeft(bodyElem, scrollLeft);
11806
- setScrollLeft(headerElem, scrollLeft);
11807
- setScrollLeft(footerElem, scrollLeft);
11895
+ handleSyncScrollX(scrollLeft);
11808
11896
  $xeTable.triggerScrollXEvent(evnt);
11809
11897
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
11810
11898
  type: 'table',
@@ -11819,14 +11907,19 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
11819
11907
  leading: false,
11820
11908
  trailing: true
11821
11909
  });
11822
- const scrollYEvent = evnt => {
11823
- const wrapperEl = evnt.currentTarget;
11910
+ const handleSyncScrollY = scrollTop => {
11824
11911
  const tableBody = refTableBody.value;
11825
11912
  const leftBody = refTableLeftBody.value;
11826
11913
  const rightBody = refTableRightBody.value;
11827
11914
  const bodyElem = tableBody.$el;
11828
11915
  const leftElem = leftBody ? leftBody.$el : null;
11829
11916
  const rightElem = rightBody ? rightBody.$el : null;
11917
+ setScrollTop(bodyElem, scrollTop);
11918
+ setScrollTop(leftElem, scrollTop);
11919
+ setScrollTop(rightElem, scrollTop);
11920
+ };
11921
+ const scrollYEvent = evnt => {
11922
+ const wrapperEl = evnt.currentTarget;
11830
11923
  const {
11831
11924
  scrollTop,
11832
11925
  scrollLeft
@@ -11835,9 +11928,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
11835
11928
  const isRollY = true;
11836
11929
  internalData.lastScrollTop = scrollTop;
11837
11930
  reactData.lastScrollTime = Date.now();
11838
- setScrollTop(bodyElem, scrollTop);
11839
- setScrollTop(leftElem, scrollTop);
11840
- setScrollTop(rightElem, scrollTop);
11931
+ handleSyncScrollY(scrollTop);
11841
11932
  $xeTable.triggerScrollYEvent(evnt);
11842
11933
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
11843
11934
  type: 'table',
@@ -11847,13 +11938,14 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
11847
11938
  });
11848
11939
  };
11849
11940
  let keyCtxTimeout;
11941
+ const dispatchEvent = (type, params, evnt) => {
11942
+ emit(type, createEvent(evnt, {
11943
+ $table: $xeTable,
11944
+ $grid: $xeGrid
11945
+ }, params));
11946
+ };
11850
11947
  tableMethods = {
11851
- dispatchEvent(type, params, evnt) {
11852
- emit(type, createEvent(evnt, {
11853
- $table: $xeTable,
11854
- $grid: $xeGrid
11855
- }, params));
11856
- },
11948
+ dispatchEvent,
11857
11949
  /**
11858
11950
  * 重置表格的一切数据状态
11859
11951
  */
@@ -13371,7 +13463,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
13371
13463
  visible: false
13372
13464
  });
13373
13465
  if (visible) {
13374
- $xeTable.dispatchEvent('filter-visible', {
13466
+ dispatchEvent('filter-visible', {
13375
13467
  column,
13376
13468
  property: column.field,
13377
13469
  field: column.field,
@@ -14313,7 +14405,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14313
14405
  tablePrivateMethods.preventEvent(evnt, 'event.clearAreas', {}, () => {
14314
14406
  $xeTable.clearCellAreas();
14315
14407
  $xeTable.clearCopyCellArea();
14316
- $xeTable.dispatchEvent('clear-cell-area-selection', {
14408
+ dispatchEvent('clear-cell-area-selection', {
14317
14409
  cellAreas
14318
14410
  }, evnt);
14319
14411
  });
@@ -14375,7 +14467,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14375
14467
  const isEsc = table_globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
14376
14468
  if (isEsc) {
14377
14469
  tablePrivateMethods.preventEvent(evnt, 'event.keydown', null, () => {
14378
- tableMethods.dispatchEvent('keydown-start', {}, evnt);
14470
+ dispatchEvent('keydown-start', {}, evnt);
14379
14471
  if (keyboardConfig && mouseConfig && mouseOpts.area && $xeTable.handleKeyboardEvent) {
14380
14472
  $xeTable.handleKeyboardEvent(evnt);
14381
14473
  } else if (actived.row || filterStore.visible || ctxMenuStore.visible) {
@@ -14397,8 +14489,8 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14397
14489
  }
14398
14490
  }
14399
14491
  }
14400
- tableMethods.dispatchEvent('keydown', {}, evnt);
14401
- tableMethods.dispatchEvent('keydown-end', {}, evnt);
14492
+ dispatchEvent('keydown', {}, evnt);
14493
+ dispatchEvent('keydown-end', {}, evnt);
14402
14494
  });
14403
14495
  }
14404
14496
  };
@@ -14590,7 +14682,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14590
14682
  }
14591
14683
  // 如果按下 del 键,更新表尾数据
14592
14684
  tableMethods.updateFooter();
14593
- $xeTable.dispatchEvent('cell-delete-value', params, evnt);
14685
+ dispatchEvent('cell-delete-value', params, evnt);
14594
14686
  }
14595
14687
  }
14596
14688
  } else if (hasBackspaceKey && keyboardConfig && keyboardOpts.isBack && isEnableConf(editConfig) && (selected.row || selected.column)) {
@@ -14616,7 +14708,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14616
14708
  setCellValue(selected.row, selected.column, null);
14617
14709
  $xeTable.handleEdit(selected.args, evnt);
14618
14710
  }
14619
- $xeTable.dispatchEvent('cell-backspace-value', params, evnt);
14711
+ dispatchEvent('cell-backspace-value', params, evnt);
14620
14712
  }
14621
14713
  }
14622
14714
  }
@@ -14671,7 +14763,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14671
14763
  }
14672
14764
  }
14673
14765
  }
14674
- tableMethods.dispatchEvent('keydown', {}, evnt);
14766
+ dispatchEvent('keydown', {}, evnt);
14675
14767
  });
14676
14768
  }
14677
14769
  };
@@ -14698,7 +14790,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14698
14790
  $xeTable.handlePasteCellAreaEvent(evnt);
14699
14791
  }
14700
14792
  }
14701
- tableMethods.dispatchEvent('paste', {}, evnt);
14793
+ dispatchEvent('paste', {}, evnt);
14702
14794
  }
14703
14795
  };
14704
14796
  const handleGlobalCopyEvent = evnt => {
@@ -14724,7 +14816,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14724
14816
  $xeTable.handleCopyCellAreaEvent(evnt);
14725
14817
  }
14726
14818
  }
14727
- tableMethods.dispatchEvent('copy', {}, evnt);
14819
+ dispatchEvent('copy', {}, evnt);
14728
14820
  }
14729
14821
  };
14730
14822
  const handleGlobalCutEvent = evnt => {
@@ -14750,7 +14842,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14750
14842
  $xeTable.handleCutCellAreaEvent(evnt);
14751
14843
  }
14752
14844
  }
14753
- tableMethods.dispatchEvent('cut', {}, evnt);
14845
+ dispatchEvent('cut', {}, evnt);
14754
14846
  }
14755
14847
  };
14756
14848
  const handleGlobalResizeEvent = () => {
@@ -14775,6 +14867,50 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
14775
14867
  }
14776
14868
  }
14777
14869
  };
14870
+ const clearRowDropOrigin = () => {
14871
+ const el = refElem.value;
14872
+ if (el) {
14873
+ const clss = 'row--drag-origin';
14874
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().arrayEach(el.querySelectorAll(`.${clss}`), elem => {
14875
+ elem.draggable = false;
14876
+ removeClass(elem, clss);
14877
+ });
14878
+ }
14879
+ };
14880
+ const clearRowDropTarget = () => {
14881
+ const el = refElem.value;
14882
+ if (el) {
14883
+ const clss = 'row--drag-active-target';
14884
+ external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().arrayEach(el.querySelectorAll(`.${clss}`), elem => {
14885
+ removeClass(elem, clss);
14886
+ });
14887
+ }
14888
+ };
14889
+ const showRowDropTip = evnt => {
14890
+ const rdTipEl = refRowDragTipElem.value;
14891
+ if (!rdTipEl) {
14892
+ return;
14893
+ }
14894
+ const el = refElem.value;
14895
+ if (!el) {
14896
+ return;
14897
+ }
14898
+ if (rdTipEl) {
14899
+ const wrapperRect = el.getBoundingClientRect();
14900
+ rdTipEl.style.display = 'block';
14901
+ rdTipEl.style.top = `${Math.min(el.clientHeight - el.scrollTop - rdTipEl.clientHeight, evnt.clientY - wrapperRect.y)}px`;
14902
+ rdTipEl.style.left = `${Math.min(el.clientWidth - el.scrollLeft - rdTipEl.clientWidth - 16, evnt.clientX - wrapperRect.x)}px`;
14903
+ }
14904
+ };
14905
+ const hideRowDropTip = () => {
14906
+ const rdTipEl = refRowDragTipElem.value;
14907
+ if (rdTipEl) {
14908
+ rdTipEl.style.display = '';
14909
+ }
14910
+ };
14911
+ const updateRowDropTipContent = tdEl => {
14912
+ reactData.dragTipText = tdEl.textContent || '';
14913
+ };
14778
14914
  /**
14779
14915
  * 处理显示 tooltip
14780
14916
  * @param {Event} evnt 事件
@@ -15674,7 +15810,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15674
15810
  if (sortOpts.trigger === 'cell' && !(triggerResizable || triggerSort || triggerFilter)) {
15675
15811
  tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column));
15676
15812
  }
15677
- tableMethods.dispatchEvent('header-cell-click', Object.assign({
15813
+ dispatchEvent('header-cell-click', Object.assign({
15678
15814
  triggerResizable,
15679
15815
  triggerSort,
15680
15816
  triggerFilter,
@@ -15685,7 +15821,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15685
15821
  }
15686
15822
  },
15687
15823
  triggerHeaderCellDblclickEvent(evnt, params) {
15688
- tableMethods.dispatchEvent('header-cell-dblclick', Object.assign({
15824
+ dispatchEvent('header-cell-dblclick', Object.assign({
15689
15825
  cell: evnt.currentTarget
15690
15826
  }, params), evnt);
15691
15827
  },
@@ -15786,7 +15922,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15786
15922
  }
15787
15923
  }
15788
15924
  }
15789
- tableMethods.dispatchEvent('cell-click', params, evnt);
15925
+ dispatchEvent('cell-click', params, evnt);
15790
15926
  },
15791
15927
  /**
15792
15928
  * 列双击点击事件
@@ -15818,7 +15954,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15818
15954
  }
15819
15955
  }
15820
15956
  }
15821
- tableMethods.dispatchEvent('cell-dblclick', params, evnt);
15957
+ dispatchEvent('cell-dblclick', params, evnt);
15822
15958
  },
15823
15959
  handleToggleCheckRowEvent(evnt, params) {
15824
15960
  const {
@@ -15874,7 +16010,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15874
16010
  tableMethods.setAllCheckboxRow(false);
15875
16011
  const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
15876
16012
  handleCheckedCheckboxRow(rangeRows, true, false);
15877
- tableMethods.dispatchEvent('checkbox-range-select', Object.assign({
16013
+ dispatchEvent('checkbox-range-select', Object.assign({
15878
16014
  rangeRecords: rangeRows
15879
16015
  }, params), evnt);
15880
16016
  return;
@@ -15886,7 +16022,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15886
16022
  })) {
15887
16023
  tablePrivateMethods.handleSelectRow(params, value);
15888
16024
  tablePrivateMethods.checkSelectionStatus();
15889
- tableMethods.dispatchEvent('checkbox-change', Object.assign({
16025
+ dispatchEvent('checkbox-change', Object.assign({
15890
16026
  records: tableMethods.getCheckboxRecords(),
15891
16027
  reserves: tableMethods.getCheckboxReserveRecords(),
15892
16028
  indeterminates: tableMethods.getCheckboxIndeterminateRecords(),
@@ -15940,7 +16076,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15940
16076
  }
15941
16077
  }
15942
16078
  if (isChange) {
15943
- tableMethods.dispatchEvent('radio-change', {
16079
+ dispatchEvent('radio-change', {
15944
16080
  oldValue,
15945
16081
  newValue,
15946
16082
  ...params
@@ -15978,7 +16114,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
15978
16114
  })) {
15979
16115
  tableMethods.setCurrentRow(newValue);
15980
16116
  if (isChange) {
15981
- tableMethods.dispatchEvent('current-change', {
16117
+ dispatchEvent('current-change', {
15982
16118
  oldValue,
15983
16119
  newValue,
15984
16120
  ...params
@@ -16012,7 +16148,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
16012
16148
  const columnIndex = tableMethods.getColumnIndex(column);
16013
16149
  const $columnIndex = tableMethods.getVMColumnIndex(column);
16014
16150
  tableMethods.setRowExpand(row, expanded);
16015
- tableMethods.dispatchEvent('toggle-row-expand', {
16151
+ dispatchEvent('toggle-row-expand', {
16016
16152
  expanded,
16017
16153
  column,
16018
16154
  columnIndex,
@@ -16049,7 +16185,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
16049
16185
  const columnIndex = tableMethods.getColumnIndex(column);
16050
16186
  const $columnIndex = tableMethods.getVMColumnIndex(column);
16051
16187
  tableMethods.setTreeExpand(row, expanded);
16052
- tableMethods.dispatchEvent('toggle-tree-expand', {
16188
+ dispatchEvent('toggle-tree-expand', {
16053
16189
  expanded,
16054
16190
  column,
16055
16191
  columnIndex,
@@ -16093,9 +16229,152 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
16093
16229
  if (mouseConfig && mouseOpts.area && $xeTable.handleSortEvent) {
16094
16230
  $xeTable.handleSortEvent(evnt, params);
16095
16231
  }
16096
- tableMethods.dispatchEvent('sort-change', params, evnt);
16232
+ dispatchEvent('sort-change', params, evnt);
16097
16233
  }
16098
16234
  },
16235
+ handleRowDragDragstartEvent(evnt) {
16236
+ const img = new Image();
16237
+ if (evnt.dataTransfer) {
16238
+ evnt.dataTransfer.setDragImage(img, 0, 0);
16239
+ }
16240
+ },
16241
+ handleRowDragDragendEvent(evnt) {
16242
+ const {
16243
+ treeConfig
16244
+ } = props;
16245
+ const dragOpts = computeDragOpts.value;
16246
+ const {
16247
+ dragEndMethod
16248
+ } = dragOpts;
16249
+ const treeOpts = computeTreeOpts.value;
16250
+ const {
16251
+ transform
16252
+ } = treeOpts;
16253
+ const {
16254
+ dragRow
16255
+ } = reactData;
16256
+ const {
16257
+ afterFullData,
16258
+ tableFullData,
16259
+ prevDragRow,
16260
+ prevDragPos
16261
+ } = internalData;
16262
+ if (prevDragRow && dragRow) {
16263
+ // 判断是否有拖动
16264
+ if (prevDragRow !== dragRow) {
16265
+ Promise.resolve(dragEndMethod ? dragEndMethod({
16266
+ oldRow: dragRow,
16267
+ newRow: prevDragRow
16268
+ }) : true).then(status => {
16269
+ if (!status) {
16270
+ return;
16271
+ }
16272
+ const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
16273
+ // 移出源位置
16274
+ const oafIndex = $xeTable.findRowIndexOf(afterFullData, dragRow);
16275
+ const otfIndex = $xeTable.findRowIndexOf(tableFullData, dragRow);
16276
+ afterFullData.splice(oafIndex, 1);
16277
+ tableFullData.splice(otfIndex, 1);
16278
+ // 插新位置
16279
+ const pafIndex = $xeTable.findRowIndexOf(afterFullData, prevDragRow);
16280
+ const ptfIndex = $xeTable.findRowIndexOf(tableFullData, prevDragRow);
16281
+ const nafIndex = pafIndex + dragOffsetIndex;
16282
+ const ntfIndex = ptfIndex + dragOffsetIndex;
16283
+ afterFullData.splice(nafIndex, 0, dragRow);
16284
+ tableFullData.splice(ntfIndex, 0, dragRow);
16285
+ reactData.isDragRowMove = true;
16286
+ $xeTable.cacheRowMap();
16287
+ $xeTable.updateScrollYStatus();
16288
+ $xeTable.handleTableData(treeConfig && transform);
16289
+ if (!(treeConfig && transform)) {
16290
+ $xeTable.updateAfterDataIndex();
16291
+ }
16292
+ $xeTable.updateFooter();
16293
+ $xeTable.checkSelectionStatus();
16294
+ if (reactData.scrollYLoad) {
16295
+ $xeTable.updateScrollYSpace();
16296
+ }
16297
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)().then(() => {
16298
+ $xeTable.updateCellAreas();
16299
+ return $xeTable.recalculate();
16300
+ });
16301
+ dispatchEvent('row-dragend', {
16302
+ oldRow: dragRow,
16303
+ newRow: prevDragRow,
16304
+ _index: {
16305
+ newIndex: nafIndex,
16306
+ oldIndex: oafIndex
16307
+ }
16308
+ }, evnt);
16309
+ }).catch(() => {});
16310
+ }
16311
+ }
16312
+ hideRowDropTip();
16313
+ clearRowDropOrigin();
16314
+ clearRowDropTarget();
16315
+ reactData.dragRow = null;
16316
+ setTimeout(() => {
16317
+ reactData.isDragRowMove = false;
16318
+ }, 500);
16319
+ },
16320
+ handleRowDragDragoverEvent(evnt) {
16321
+ const trEl = evnt.currentTarget;
16322
+ const rowid = trEl.getAttribute('rowid');
16323
+ const row = $xeTable.getRowById(rowid);
16324
+ clearRowDropTarget();
16325
+ if (row) {
16326
+ evnt.preventDefault();
16327
+ evnt.preventDefault();
16328
+ const {
16329
+ dragRow
16330
+ } = reactData;
16331
+ const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
16332
+ const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
16333
+ addClass(trEl, 'row--drag-active-target');
16334
+ trEl.setAttribute('drag-pos', dragPos);
16335
+ internalData.prevDragRow = row;
16336
+ internalData.prevDragPos = dragPos;
16337
+ dispatchEvent('row-dragover', {
16338
+ oldRow: dragRow,
16339
+ targetRow: row,
16340
+ dragPos
16341
+ }, evnt);
16342
+ }
16343
+ showRowDropTip(evnt);
16344
+ },
16345
+ handleCellDragMousedownEvent(evnt, params) {
16346
+ evnt.stopPropagation();
16347
+ const dragOpts = computeDragOpts.value;
16348
+ const {
16349
+ dragStartMethod
16350
+ } = dragOpts;
16351
+ const {
16352
+ row
16353
+ } = params;
16354
+ const dragEl = evnt.currentTarget;
16355
+ const tdEl = dragEl.parentNode?.parentNode;
16356
+ const trEl = tdEl.parentNode;
16357
+ reactData.isDragRowMove = false;
16358
+ clearRowDropOrigin();
16359
+ if (dragStartMethod && !dragStartMethod(params)) {
16360
+ trEl.draggable = false;
16361
+ reactData.dragRow = null;
16362
+ hideRowDropTip();
16363
+ return;
16364
+ }
16365
+ reactData.dragRow = row;
16366
+ trEl.draggable = true;
16367
+ addClass(trEl, 'row--drag-origin');
16368
+ showRowDropTip(evnt);
16369
+ updateRowDropTipContent(tdEl);
16370
+ dispatchEvent('row-dragstart', params, evnt);
16371
+ },
16372
+ handleCellDragMouseupEvent() {
16373
+ clearRowDropOrigin();
16374
+ hideRowDropTip();
16375
+ reactData.dragRow = null;
16376
+ reactData.isDragRowMove = false;
16377
+ },
16099
16378
  /**
16100
16379
  * 横向 X 可视渲染事件处理
16101
16380
  */
@@ -16127,7 +16406,7 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
16127
16406
  const bodyWidth = bodyElem ? bodyElem.clientWidth : 0;
16128
16407
  const scrollHeight = bodyElem ? bodyElem.scrollHeight : 0;
16129
16408
  const scrollWidth = bodyElem ? bodyElem.scrollWidth : 0;
16130
- $xeTable.dispatchEvent('scroll', {
16409
+ const evntParams = {
16131
16410
  bodyHeight,
16132
16411
  bodyWidth,
16133
16412
  scrollHeight,
@@ -16135,7 +16414,8 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
16135
16414
  isX: isRollX,
16136
16415
  isY: isRollY,
16137
16416
  ...params
16138
- }, evnt);
16417
+ };
16418
+ dispatchEvent('scroll', evntParams, evnt);
16139
16419
  },
16140
16420
  /**
16141
16421
  * 纵向 Y 可视渲染事件处理
@@ -16312,14 +16592,14 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
16312
16592
  },
16313
16593
  updateScrollXData() {
16314
16594
  // reactData.tableColumn = []
16315
- (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
16595
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)().then(() => {
16316
16596
  handleTableColumn();
16317
16597
  tablePrivateMethods.updateScrollXSpace();
16318
16598
  });
16319
16599
  },
16320
16600
  updateScrollYData() {
16321
16601
  // reactData.tableData = []
16322
- (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
16602
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)().then(() => {
16323
16603
  tablePrivateMethods.handleTableData();
16324
16604
  calcCellHeight();
16325
16605
  tablePrivateMethods.updateScrollYSpace();
@@ -16712,6 +16992,13 @@ const customStorageKey = 'VXE_CUSTOM_STORE';
16712
16992
  key: 'tm',
16713
16993
  ref: refTableMenu
16714
16994
  }) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createCommentVNode)(),
16995
+ /**
16996
+ * 拖拽提示
16997
+ */
16998
+ rowOpts.drag ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
16999
+ ref: refRowDragTipElem,
17000
+ class: 'vxe-table--row-drag-hint'
17001
+ }, table_getI18n('vxe.table.dragTip', [reactData.dragTipText])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createCommentVNode)(),
16715
17002
  /**
16716
17003
  * 提示相关
16717
17004
  */
@@ -18043,7 +18330,8 @@ edit_hook_hooks.add('tableEditModule', {
18043
18330
  computeMouseOpts,
18044
18331
  computeEditOpts,
18045
18332
  computeCheckboxOpts,
18046
- computeTreeOpts
18333
+ computeTreeOpts,
18334
+ computeValidOpts
18047
18335
  } = $xeTable.getComputeMaps();
18048
18336
  let editMethods = {};
18049
18337
  let editPrivateMethods = {};
@@ -18707,6 +18995,7 @@ edit_hook_hooks.add('tableEditModule', {
18707
18995
  row,
18708
18996
  column
18709
18997
  } = actived;
18998
+ const validOpts = computeValidOpts.value;
18710
18999
  if (row || column) {
18711
19000
  syncActivedCell();
18712
19001
  actived.args = null;
@@ -18722,9 +19011,11 @@ edit_hook_hooks.add('tableEditModule', {
18722
19011
  $columnIndex: $xeTable.getVMColumnIndex(column)
18723
19012
  }, evnt || null);
18724
19013
  }
18725
- if (hook_getConfig().cellVaildMode === 'obsolete') {
18726
- if ($xeTable.clearValidate) {
18727
- return $xeTable.clearValidate();
19014
+ if (validOpts.autoClear) {
19015
+ if (validOpts.msgMode !== 'full' || hook_getConfig().cellVaildMode === 'obsolete') {
19016
+ if ($xeTable.clearValidate) {
19017
+ return $xeTable.clearValidate();
19018
+ }
18728
19019
  }
18729
19020
  }
18730
19021
  focused.row = null;
@@ -25220,6 +25511,7 @@ const Grid = VxeGrid;
25220
25511
  impSuccess: '成功导入 {0} 条记录',
25221
25512
  expLoading: '正在导出中',
25222
25513
  expSuccess: '导出成功',
25514
+ expError: '导出失败',
25223
25515
  expFilename: '导出_{0}',
25224
25516
  expOriginFilename: '导出_源_{0}',
25225
25517
  customTitle: '列设置',
@@ -25228,7 +25520,8 @@ const Grid = VxeGrid;
25228
25520
  customClose: '关闭',
25229
25521
  customCancel: '取消',
25230
25522
  customRestore: '恢复默认',
25231
- maxFixedCol: '最大冻结列的数量不能超过 {0} 个'
25523
+ maxFixedCol: '最大冻结列的数量不能超过 {0} 个',
25524
+ dragTip: '移动:{0}'
25232
25525
  },
25233
25526
  grid: {
25234
25527
  selectOneRecord: '请至少选择一条记录!',
@@ -25279,7 +25572,7 @@ const Grid = VxeGrid;
25279
25572
  cstmCancel: '取消',
25280
25573
  cstmConfirm: '确定',
25281
25574
  cstmConfirmRestore: '请确认是否恢复成默认列配置?',
25282
- cstmDragTarget: '移动目标:{0}',
25575
+ cstmDragTarget: '移动:{0}',
25283
25576
  setting: {
25284
25577
  colSort: '排序',
25285
25578
  sortHelpTip: '点击并拖动图标可以调整列的排序',