vxe-table 3.10.0 → 3.10.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 (127) 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/mixin.js +9 -4
  15. package/es/table/module/export/export-panel.js +2 -2
  16. package/es/table/module/export/import-panel.js +1 -1
  17. package/es/table/src/body.js +43 -24
  18. package/es/table/src/cell.js +54 -24
  19. package/es/table/src/column.js +3 -1
  20. package/es/table/src/columnInfo.js +1 -0
  21. package/es/table/src/methods.js +211 -14
  22. package/es/table/src/props.js +2 -0
  23. package/es/table/src/table.js +16 -1
  24. package/es/table/style.css +80 -3
  25. package/es/table/style.min.css +1 -1
  26. package/es/ui/index.js +4 -1
  27. package/es/ui/src/log.js +1 -1
  28. package/es/vxe-table/style.css +80 -3
  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 +371 -78
  33. package/lib/index.umd.min.js +1 -1
  34. package/lib/locale/lang/en-US.js +4 -2
  35. package/lib/locale/lang/en-US.min.js +1 -1
  36. package/lib/locale/lang/en-US.umd.js +4 -2
  37. package/lib/locale/lang/es-ES.js +4 -2
  38. package/lib/locale/lang/es-ES.min.js +1 -1
  39. package/lib/locale/lang/es-ES.umd.js +4 -2
  40. package/lib/locale/lang/hu-HU.js +4 -2
  41. package/lib/locale/lang/hu-HU.min.js +1 -1
  42. package/lib/locale/lang/hu-HU.umd.js +4 -2
  43. package/lib/locale/lang/ja-JP.js +4 -2
  44. package/lib/locale/lang/ja-JP.min.js +1 -1
  45. package/lib/locale/lang/ja-JP.umd.js +4 -2
  46. package/lib/locale/lang/ko-KR.js +4 -2
  47. package/lib/locale/lang/ko-KR.min.js +1 -1
  48. package/lib/locale/lang/ko-KR.umd.js +4 -2
  49. package/lib/locale/lang/pt-BR.js +4 -2
  50. package/lib/locale/lang/pt-BR.min.js +1 -1
  51. package/lib/locale/lang/pt-BR.umd.js +4 -2
  52. package/lib/locale/lang/ru-RU.js +4 -2
  53. package/lib/locale/lang/ru-RU.min.js +1 -1
  54. package/lib/locale/lang/ru-RU.umd.js +4 -2
  55. package/lib/locale/lang/uk-UA.js +4 -2
  56. package/lib/locale/lang/uk-UA.min.js +1 -1
  57. package/lib/locale/lang/uk-UA.umd.js +4 -2
  58. package/lib/locale/lang/vi-VN.js +4 -2
  59. package/lib/locale/lang/vi-VN.min.js +1 -1
  60. package/lib/locale/lang/zh-CHT.js +4 -2
  61. package/lib/locale/lang/zh-CHT.min.js +1 -1
  62. package/lib/locale/lang/zh-CHT.umd.js +4 -2
  63. package/lib/locale/lang/zh-CN.js +4 -2
  64. package/lib/locale/lang/zh-CN.min.js +1 -1
  65. package/lib/locale/lang/zh-CN.umd.js +4 -2
  66. package/lib/style.css +1 -1
  67. package/lib/style.min.css +1 -1
  68. package/lib/table/module/edit/mixin.js +9 -4
  69. package/lib/table/module/edit/mixin.min.js +1 -1
  70. package/lib/table/module/export/export-panel.js +2 -2
  71. package/lib/table/module/export/export-panel.min.js +1 -1
  72. package/lib/table/module/export/import-panel.js +1 -1
  73. package/lib/table/module/export/import-panel.min.js +1 -1
  74. package/lib/table/src/body.js +41 -22
  75. package/lib/table/src/body.min.js +1 -1
  76. package/lib/table/src/cell.js +58 -24
  77. package/lib/table/src/cell.min.js +1 -1
  78. package/lib/table/src/column.js +3 -1
  79. package/lib/table/src/column.min.js +1 -1
  80. package/lib/table/src/columnInfo.js +1 -0
  81. package/lib/table/src/columnInfo.min.js +1 -1
  82. package/lib/table/src/methods.js +227 -14
  83. package/lib/table/src/methods.min.js +1 -1
  84. package/lib/table/src/props.js +2 -0
  85. package/lib/table/src/props.min.js +1 -1
  86. package/lib/table/src/table.js +15 -2
  87. package/lib/table/src/table.min.js +1 -1
  88. package/lib/table/style/style.css +80 -3
  89. package/lib/table/style/style.min.css +1 -1
  90. package/lib/ui/index.js +4 -1
  91. package/lib/ui/index.min.js +1 -1
  92. package/lib/ui/src/log.js +1 -1
  93. package/lib/ui/src/log.min.js +1 -1
  94. package/lib/vxe-table/style/style.css +80 -3
  95. package/lib/vxe-table/style/style.min.css +1 -1
  96. package/package.json +2 -2
  97. package/packages/locale/lang/en-US.ts +4 -2
  98. package/packages/locale/lang/es-ES.ts +4 -2
  99. package/packages/locale/lang/hu-HU.ts +4 -2
  100. package/packages/locale/lang/ja-JP.ts +4 -2
  101. package/packages/locale/lang/ko-KR.ts +4 -2
  102. package/packages/locale/lang/pt-BR.ts +4 -2
  103. package/packages/locale/lang/ru-RU.ts +4 -2
  104. package/packages/locale/lang/uk-UA.ts +4 -2
  105. package/packages/locale/lang/vi-VN.ts +4 -2
  106. package/packages/locale/lang/zh-CHT.ts +4 -2
  107. package/packages/locale/lang/zh-CN.ts +4 -2
  108. package/packages/table/module/custom/panel.ts +8 -8
  109. package/packages/table/module/edit/mixin.ts +10 -4
  110. package/packages/table/module/export/export-panel.ts +2 -2
  111. package/packages/table/module/export/import-panel.ts +1 -1
  112. package/packages/table/src/body.ts +43 -24
  113. package/packages/table/src/cell.ts +58 -24
  114. package/packages/table/src/column.ts +3 -1
  115. package/packages/table/src/columnInfo.ts +1 -0
  116. package/packages/table/src/methods.ts +227 -14
  117. package/packages/table/src/props.ts +2 -0
  118. package/packages/table/src/table.ts +16 -1
  119. package/packages/ui/index.ts +3 -0
  120. package/styles/components/table-module/custom.scss +9 -3
  121. package/styles/components/table.scss +89 -0
  122. /package/es/{iconfont.1730681241769.ttf → iconfont.1730873052490.ttf} +0 -0
  123. /package/es/{iconfont.1730681241769.woff → iconfont.1730873052490.woff} +0 -0
  124. /package/es/{iconfont.1730681241769.woff2 → iconfont.1730873052490.woff2} +0 -0
  125. /package/lib/{iconfont.1730681241769.ttf → iconfont.1730873052490.ttf} +0 -0
  126. /package/lib/{iconfont.1730681241769.woff → iconfont.1730873052490.woff} +0 -0
  127. /package/lib/{iconfont.1730681241769.woff2 → iconfont.1730873052490.woff2} +0 -0
@@ -328,6 +328,57 @@ function getOrderField (_vm: any, column: any) {
328
328
  }
329
329
  }
330
330
 
331
+ function clearRowDropOrigin ($xeTable: any) {
332
+ const el = $xeTable.$el
333
+ if (el) {
334
+ const clss = 'row--drag-origin'
335
+ XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
336
+ (elem as HTMLTableCellElement).draggable = false
337
+ removeClass(elem, clss)
338
+ })
339
+ }
340
+ }
341
+
342
+ function clearRowDropTarget ($xeTable: any) {
343
+ const el = $xeTable.$el
344
+ if (el) {
345
+ const clss = 'row--drag-active-target'
346
+ XEUtils.arrayEach(el.querySelectorAll(`.${clss}`), (elem) => {
347
+ removeClass(elem, clss)
348
+ })
349
+ }
350
+ }
351
+
352
+ function showRowDropTip (evnt: DragEvent | MouseEvent, $xeTable: any) {
353
+ const rdTipEl = $xeTable.$refs.refRowDragTipElem as HTMLDivElement
354
+ if (!rdTipEl) {
355
+ return
356
+ }
357
+ const el = $xeTable.$el
358
+ if (!el) {
359
+ return
360
+ }
361
+ if (rdTipEl) {
362
+ const wrapperRect = el.getBoundingClientRect()
363
+ rdTipEl.style.display = 'block'
364
+ rdTipEl.style.top = `${Math.min(el.clientHeight - el.scrollTop - rdTipEl.clientHeight, evnt.clientY - wrapperRect.y)}px`
365
+ rdTipEl.style.left = `${Math.min(el.clientWidth - el.scrollLeft - rdTipEl.clientWidth - 16, evnt.clientX - wrapperRect.x)}px`
366
+ }
367
+ }
368
+
369
+ const hideRowDropTip = ($xeTable: any) => {
370
+ const rdTipEl = $xeTable.$refs.refRowDragTipElem as HTMLDivElement
371
+ if (rdTipEl) {
372
+ rdTipEl.style.display = ''
373
+ }
374
+ }
375
+
376
+ const updateRowDropTipContent = ($xeTable: any, tdEl: HTMLElement) => {
377
+ const reactData = $xeTable
378
+
379
+ reactData.dragTipText = tdEl.textContent || ''
380
+ }
381
+
331
382
  const Methods = {
332
383
  callSlot (slotFunc: any, params: any, h: any, vNodes: any) {
333
384
  if (slotFunc) {
@@ -4531,6 +4582,153 @@ const Methods = {
4531
4582
  this.emitEvent('sort-change', params, evnt)
4532
4583
  }
4533
4584
  },
4585
+ handleRowDragDragstartEvent (evnt: DragEvent) {
4586
+ const img = new Image()
4587
+ if (evnt.dataTransfer) {
4588
+ evnt.dataTransfer.setDragImage(img, 0, 0)
4589
+ }
4590
+ },
4591
+ handleRowDragDragendEvent (evnt: DragEvent) {
4592
+ const $xeTable = this
4593
+ const props = $xeTable
4594
+ const reactData = $xeTable
4595
+ const internalData = $xeTable
4596
+
4597
+ const { treeConfig } = props
4598
+ const rowOpts = $xeTable.computeRowOpts
4599
+ const { dragEndMethod } = rowOpts
4600
+ const treeOpts = $xeTable.computeTreeOpts
4601
+ const { transform } = treeOpts
4602
+ const { dragRow } = reactData
4603
+ const { afterFullData, tableFullData, prevDragRow, prevDragPos } = internalData
4604
+ if (prevDragRow && dragRow) {
4605
+ // 判断是否有拖动
4606
+ if (prevDragRow !== dragRow) {
4607
+ Promise.resolve(
4608
+ dragEndMethod
4609
+ ? dragEndMethod({
4610
+ oldRow: dragRow,
4611
+ newRow: prevDragRow
4612
+ })
4613
+ : true
4614
+ ).then((status) => {
4615
+ if (!status) {
4616
+ return
4617
+ }
4618
+ const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
4619
+
4620
+ // 移出源位置
4621
+ const oafIndex = $xeTable.findRowIndexOf(afterFullData, dragRow)
4622
+ const otfIndex = $xeTable.findRowIndexOf(tableFullData, dragRow)
4623
+ afterFullData.splice(oafIndex, 1)
4624
+ tableFullData.splice(otfIndex, 1)
4625
+ // 插新位置
4626
+ const pafIndex = $xeTable.findRowIndexOf(afterFullData, prevDragRow)
4627
+ const ptfIndex = $xeTable.findRowIndexOf(tableFullData, prevDragRow)
4628
+ const nafIndex = pafIndex + dragOffsetIndex
4629
+ const ntfIndex = ptfIndex + dragOffsetIndex
4630
+ afterFullData.splice(nafIndex, 0, dragRow)
4631
+ tableFullData.splice(ntfIndex, 0, dragRow)
4632
+
4633
+ reactData.isDragRowMove = true
4634
+ $xeTable.cacheRowMap()
4635
+ $xeTable.updateScrollYStatus()
4636
+ $xeTable.handleTableData(treeConfig && transform)
4637
+ if (!(treeConfig && transform)) {
4638
+ $xeTable.updateAfterDataIndex()
4639
+ }
4640
+ $xeTable.updateFooter()
4641
+ $xeTable.checkSelectionStatus()
4642
+ if (reactData.scrollYLoad) {
4643
+ $xeTable.updateScrollYSpace()
4644
+ }
4645
+ $xeTable.$nextTick().then(() => {
4646
+ $xeTable.updateCellAreas()
4647
+ return $xeTable.recalculate()
4648
+ })
4649
+
4650
+ $xeTable.dispatchEvent('row-dragend', {
4651
+ oldRow: dragRow,
4652
+ newRow: prevDragRow,
4653
+ _index: {
4654
+ newIndex: nafIndex,
4655
+ oldIndex: oafIndex
4656
+ }
4657
+ }, evnt)
4658
+ }).catch(() => {
4659
+ })
4660
+ }
4661
+ }
4662
+ hideRowDropTip($xeTable)
4663
+ clearRowDropOrigin($xeTable)
4664
+ clearRowDropTarget($xeTable)
4665
+ reactData.dragRow = null
4666
+ setTimeout(() => {
4667
+ reactData.isDragRowMove = false
4668
+ }, 500)
4669
+ },
4670
+ handleRowDragDragoverEvent (evnt: DragEvent) {
4671
+ const $xeTable = this
4672
+ const internalData = $xeTable
4673
+ const reactData = $xeTable
4674
+
4675
+ const trEl = evnt.currentTarget as HTMLElement
4676
+ const rowid = trEl.getAttribute('rowid')
4677
+ const row = $xeTable.getRowById(rowid)
4678
+ clearRowDropTarget($xeTable)
4679
+ if (row) {
4680
+ evnt.preventDefault()
4681
+ evnt.preventDefault()
4682
+ const { dragRow } = reactData
4683
+ const offsetY = evnt.clientY - trEl.getBoundingClientRect().y
4684
+ const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom'
4685
+ addClass(trEl, 'row--drag-active-target')
4686
+ trEl.setAttribute('drag-pos', dragPos)
4687
+ internalData.prevDragRow = row
4688
+ internalData.prevDragPos = dragPos
4689
+ $xeTable.dispatchEvent('row-dragover', {
4690
+ oldRow: dragRow,
4691
+ targetRow: row,
4692
+ dragPos
4693
+ }, evnt)
4694
+ }
4695
+ showRowDropTip(evnt, $xeTable)
4696
+ },
4697
+ handleCellDragMousedownEvent (evnt: MouseEvent, params: any) {
4698
+ const $xeTable = this
4699
+ const reactData = $xeTable
4700
+
4701
+ evnt.stopPropagation()
4702
+ const rowOpts = $xeTable.computeRowOpts
4703
+ const { dragStartMethod } = rowOpts
4704
+ const { row } = params
4705
+ const dragEl = evnt.currentTarget as HTMLElement
4706
+ const tdEl = dragEl.parentNode?.parentNode as HTMLElement
4707
+ const trEl = tdEl.parentNode as HTMLElement
4708
+ reactData.isDragRowMove = false
4709
+ clearRowDropOrigin($xeTable)
4710
+ if (dragStartMethod && !dragStartMethod(params)) {
4711
+ trEl.draggable = false
4712
+ reactData.dragRow = null
4713
+ hideRowDropTip($xeTable)
4714
+ return
4715
+ }
4716
+ reactData.dragRow = row
4717
+ trEl.draggable = true
4718
+ addClass(trEl, 'row--drag-origin')
4719
+ showRowDropTip(evnt, $xeTable)
4720
+ updateRowDropTipContent($xeTable, tdEl)
4721
+ $xeTable.dispatchEvent('row-dragstart', params, evnt)
4722
+ },
4723
+ handleCellDragMouseupEvent () {
4724
+ const $xeTable = this
4725
+ const reactData = $xeTable
4726
+
4727
+ clearRowDropOrigin($xeTable)
4728
+ hideRowDropTip($xeTable)
4729
+ reactData.dragRow = null
4730
+ reactData.isDragRowMove = false
4731
+ },
4534
4732
  setPendingRow (rows: any, status: any) {
4535
4733
  const pendingMaps = { ...this.pendingRowMaps }
4536
4734
  const pendingList = [...this.pendingRowList]
@@ -5384,7 +5582,7 @@ const Methods = {
5384
5582
  const bodyWidth = bodyElem ? bodyElem.clientWidth : 0
5385
5583
  const scrollHeight = bodyElem ? bodyElem.scrollHeight : 0
5386
5584
  const scrollWidth = bodyElem ? bodyElem.scrollWidth : 0
5387
- $xeTable.dispatchEvent('scroll', {
5585
+ const evntParams = {
5388
5586
  bodyHeight,
5389
5587
  bodyWidth,
5390
5588
  scrollHeight,
@@ -5392,7 +5590,8 @@ const Methods = {
5392
5590
  isX: isRollX,
5393
5591
  isY: isRollY,
5394
5592
  ...params
5395
- }, evnt)
5593
+ }
5594
+ $xeTable.dispatchEvent('scroll', evntParams, evnt)
5396
5595
  },
5397
5596
  /**
5398
5597
  * 纵向 Y 可视渲染事件处理
@@ -5411,24 +5610,31 @@ const Methods = {
5411
5610
  debounceScrollYData: XEUtils.debounce(function () {
5412
5611
  this.loadScrollYData()
5413
5612
  }, debounceScrollYDuration, { leading: false, trailing: true }),
5414
- scrollXEvent (evnt: Event) {
5613
+ handleSyncScrollX (scrollLeft: number) {
5415
5614
  const $xeTable = this
5416
5615
 
5417
- const wrapperEl = evnt.currentTarget as HTMLDivElement
5418
5616
  const tableHeader = $xeTable.$refs.tableHeader
5419
5617
  const tableBody = $xeTable.$refs.tableBody
5420
5618
  const tableFooter = $xeTable.$refs.tableFooter
5421
5619
  const bodyElem = tableBody.$el as HTMLDivElement
5422
5620
  const headerElem = tableHeader ? tableHeader.$el as HTMLDivElement : null
5423
5621
  const footerElem = tableFooter ? tableFooter.$el as HTMLDivElement : null
5424
- const { scrollTop, scrollLeft } = wrapperEl
5425
- const isRollX = true
5426
- const isRollY = false
5427
5622
  $xeTable.lastScrollLeft = scrollLeft
5428
5623
  $xeTable.lastScrollTime = Date.now()
5429
5624
  setScrollLeft(bodyElem, scrollLeft)
5430
5625
  setScrollLeft(headerElem, scrollLeft)
5431
5626
  setScrollLeft(footerElem, scrollLeft)
5627
+ },
5628
+ scrollXEvent (evnt: Event) {
5629
+ const $xeTable = this
5630
+
5631
+ const wrapperEl = evnt.currentTarget as HTMLDivElement
5632
+ const { scrollTop, scrollLeft } = wrapperEl
5633
+ const isRollX = true
5634
+ const isRollY = false
5635
+ $xeTable.lastScrollLeft = scrollLeft
5636
+ $xeTable.lastScrollTime = Date.now()
5637
+ $xeTable.handleSyncScrollX(scrollLeft)
5432
5638
  $xeTable.triggerScrollXEvent(evnt)
5433
5639
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
5434
5640
  type: 'table',
@@ -5440,24 +5646,31 @@ const Methods = {
5440
5646
  debounceScrollYCalculate: XEUtils.debounce(function () {
5441
5647
  this.updateScrollYSpace()
5442
5648
  }, 1000, { leading: false, trailing: true }),
5443
- scrollYEvent (evnt: Event) {
5649
+ handleSyncScrollY (scrollTop: number) {
5444
5650
  const $xeTable = this
5445
5651
 
5446
- const wrapperEl = evnt.currentTarget as HTMLDivElement
5447
5652
  const tableBody = $xeTable.$refs.tableBody
5448
5653
  const leftBody = $xeTable.$refs.leftBody
5449
5654
  const rightBody = $xeTable.$refs.rightBody
5450
5655
  const bodyElem = tableBody.$el as HTMLDivElement
5451
5656
  const leftElem = leftBody ? leftBody.$el as HTMLDivElement : null
5452
5657
  const rightElem = rightBody ? rightBody.$el as HTMLDivElement : null
5453
- const { scrollTop, scrollLeft } = wrapperEl
5454
- const isRollX = false
5455
- const isRollY = true
5456
5658
  $xeTable.lastScrollTop = scrollTop
5457
5659
  $xeTable.lastScrollTime = Date.now()
5458
5660
  setScrollTop(bodyElem, scrollTop)
5459
5661
  setScrollTop(leftElem, scrollTop)
5460
5662
  setScrollTop(rightElem, scrollTop)
5663
+ },
5664
+ scrollYEvent (evnt: Event) {
5665
+ const $xeTable = this
5666
+
5667
+ const wrapperEl = evnt.currentTarget as HTMLDivElement
5668
+ const { scrollTop, scrollLeft } = wrapperEl
5669
+ const isRollX = false
5670
+ const isRollY = true
5671
+ $xeTable.lastScrollTop = scrollTop
5672
+ $xeTable.lastScrollTime = Date.now()
5673
+ $xeTable.handleSyncScrollY(scrollTop)
5461
5674
  $xeTable.triggerScrollYEvent(evnt)
5462
5675
  $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
5463
5676
  type: 'table',
@@ -5542,7 +5755,7 @@ const Methods = {
5542
5755
  },
5543
5756
  updateScrollXData () {
5544
5757
  // this.tableColumn = []
5545
- this.$nextTick(() => {
5758
+ return this.$nextTick().then(() => {
5546
5759
  this.handleTableColumn()
5547
5760
  this.updateScrollXSpace()
5548
5761
  })
@@ -5593,7 +5806,7 @@ const Methods = {
5593
5806
  const $xeTable = this
5594
5807
 
5595
5808
  // this.tableData = []
5596
- this.$nextTick(() => {
5809
+ return this.$nextTick().then(() => {
5597
5810
  this.handleTableData()
5598
5811
  calcCellHeight($xeTable)
5599
5812
  this.updateScrollYSpace()
@@ -165,6 +165,8 @@ export default {
165
165
  cellConfig: Object as PropType<VxeTablePropTypes.CellConfig>,
166
166
  // 行配置信息
167
167
  rowConfig: Object,
168
+ // 可拖拽配置项
169
+ dragConfig: Object as PropType<VxeTablePropTypes.DragConfig>,
168
170
  // 列调整配置项
169
171
  resizableConfig: Object,
170
172
  // 序号配置项
@@ -352,6 +352,9 @@ export default {
352
352
  isHeader: false,
353
353
  isFooter: false
354
354
  },
355
+ isDragRowMove: false,
356
+ dragRow: null,
357
+ dragTipText: '',
355
358
  _isLoading: false
356
359
  }
357
360
  },
@@ -410,6 +413,9 @@ export default {
410
413
  computeRowOpts () {
411
414
  return Object.assign({}, getConfig().table.rowConfig, this.rowConfig)
412
415
  },
416
+ computeDragOpts () {
417
+ return Object.assign({}, getConfig().table.dragConfig, this.dragConfig)
418
+ },
413
419
  resizeOpts () {
414
420
  return this.computeResizeOpts
415
421
  },
@@ -1330,9 +1336,18 @@ export default {
1330
1336
  }
1331
1337
  })
1332
1338
  : _e(),
1339
+ /**
1340
+ * 拖拽提示
1341
+ */
1342
+ rowOpts.drag
1343
+ ? h('div', {
1344
+ ref: 'refRowDragTipElem',
1345
+ class: 'vxe-table--row-drag-hint'
1346
+ }, getI18n('vxe.table.dragTip', [this.dragTipText]))
1347
+ : _e(),
1333
1348
  h('div', {}, [
1334
1349
  /**
1335
- * 通用提示
1350
+ * 提示相关
1336
1351
  */
1337
1352
  VxeUITooltipComponent
1338
1353
  ? h(VxeUITooltipComponent, {
@@ -43,6 +43,9 @@ VxeUI.setConfig({
43
43
  // trigger: 'default'
44
44
  strict: true
45
45
  },
46
+ dragConfig: {
47
+ showIcon: true
48
+ },
46
49
  checkboxConfig: {
47
50
  // trigger: 'default',
48
51
  strict: true
@@ -4,6 +4,9 @@
4
4
  position: relative;
5
5
  display: flex;
6
6
  flex-direction: row;
7
+ &.active--drag-origin {
8
+ opacity: 0.5;
9
+ }
7
10
  &.active--drag-target {
8
11
  &[drag-pos="top"] {
9
12
  &::after {
@@ -166,7 +169,10 @@
166
169
  padding-left: 0.2em;
167
170
  padding-right: 0.4em;
168
171
  &:not(.is--disabled) {
169
- cursor: grabbing;
172
+ cursor: grab;
173
+ &:active {
174
+ cursor: grabbing;
175
+ }
170
176
  &:hover {
171
177
  color: var(--vxe-ui-font-primary-color);
172
178
  }
@@ -247,7 +253,7 @@
247
253
  position: absolute;
248
254
  top: 0;
249
255
  left: 0;
250
- padding: 0.6em 1em 0.6em 1.8em;
256
+ padding: 0.6em 1em 0.6em 1.6em;
251
257
  max-width: 300px;
252
258
  border-radius: var(--vxe-ui-border-radius);
253
259
  overflow: hidden;
@@ -338,7 +344,7 @@
338
344
  position: absolute;
339
345
  left: -1px;
340
346
  width: calc(100% + 1px);
341
- height: 3px;
347
+ height: 2px;
342
348
  background-color: var(--vxe-ui-font-primary-color);
343
349
  z-index: 12;
344
350
  }
@@ -961,6 +961,15 @@
961
961
  }
962
962
 
963
963
  &.is--padding {
964
+ .vxe-body--column {
965
+ .vxe-cell {
966
+ padding-left: var(--vxe-ui-table-cell-padding-left);
967
+ padding-right: var(--vxe-ui-table-cell-padding-right);
968
+ }
969
+ }
970
+ }
971
+ .vxe-header--column,
972
+ .vxe-footer--column {
964
973
  .vxe-cell {
965
974
  padding-left: var(--vxe-ui-table-cell-padding-left);
966
975
  padding-right: var(--vxe-ui-table-cell-padding-right);
@@ -1228,6 +1237,86 @@
1228
1237
  }
1229
1238
  }
1230
1239
 
1240
+ /*拖拽行*/
1241
+ .vxe-cell--drag-handle {
1242
+ user-select: none;
1243
+ & + span {
1244
+ padding-left: 0.5em;
1245
+ }
1246
+ &:not(.is--disabled) {
1247
+ cursor: grab;
1248
+ &:active {
1249
+ cursor: grabbing;
1250
+ }
1251
+ &:hover {
1252
+ color: var(--vxe-ui-font-primary-color);
1253
+ }
1254
+ }
1255
+ &.is--disabled {
1256
+ color: var(--vxe-ui-input-disabled-color);
1257
+ cursor: not-allowed;
1258
+ }
1259
+ }
1260
+ .vxe-body--row {
1261
+ &.row--drag-origin {
1262
+ & > .vxe-body--column {
1263
+ & > .vxe-cell {
1264
+ opacity: 0.5;
1265
+ }
1266
+ }
1267
+ }
1268
+ &.row--drag-active-target {
1269
+ & > .vxe-body--column {
1270
+ &::after {
1271
+ display: none;
1272
+ content: "";
1273
+ position: absolute;
1274
+ left: 0;
1275
+ width: 100%;
1276
+ height: 2px;
1277
+ background-color: var(--vxe-ui-font-primary-color);
1278
+ z-index: 12;
1279
+ }
1280
+ }
1281
+ &[drag-pos="top"] {
1282
+ & > .vxe-body--column {
1283
+ &::after {
1284
+ display: block;
1285
+ top: 0;
1286
+ }
1287
+ }
1288
+ }
1289
+ &[drag-pos="bottom"] {
1290
+ & > .vxe-body--column {
1291
+ &::after {
1292
+ display: block;
1293
+ bottom: 0;
1294
+ }
1295
+ }
1296
+ }
1297
+ }
1298
+ }
1299
+ .vxe-body--row-list-move {
1300
+ transition: transform 0.35s;
1301
+ }
1302
+ .vxe-table--row-drag-hint {
1303
+ display: none;
1304
+ position: absolute;
1305
+ top: 0;
1306
+ left: 0;
1307
+ padding: 0.6em 1em 0.6em 1.6em;
1308
+ max-width: 50%;
1309
+ min-width: 100px;
1310
+ border-radius: var(--vxe-ui-border-radius);
1311
+ overflow: hidden;
1312
+ text-overflow: ellipsis;
1313
+ white-space: nowrap;
1314
+ user-select: none;
1315
+ pointer-events: none;
1316
+ background-color: var(--vxe-ui-layout-background-color);
1317
+ box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.2);
1318
+ z-index: 33;
1319
+ }
1231
1320
 
1232
1321
  /*溢出列*/
1233
1322
  .vxe-header--column,