vxe-table 4.11.18 → 4.11.19

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 (37) hide show
  1. package/es/grid/src/grid.js +4 -1
  2. package/es/style.css +1 -1
  3. package/es/table/src/body.js +11 -6
  4. package/es/table/src/footer.js +7 -2
  5. package/es/table/src/table.js +158 -46
  6. package/es/table/src/util.js +13 -3
  7. package/es/ui/index.js +1 -1
  8. package/es/ui/src/log.js +1 -1
  9. package/lib/grid/src/grid.js +4 -1
  10. package/lib/grid/src/grid.min.js +1 -1
  11. package/lib/index.umd.js +211 -62
  12. package/lib/index.umd.min.js +1 -1
  13. package/lib/style.css +1 -1
  14. package/lib/table/src/body.js +10 -5
  15. package/lib/table/src/body.min.js +1 -1
  16. package/lib/table/src/footer.js +7 -2
  17. package/lib/table/src/footer.min.js +1 -1
  18. package/lib/table/src/table.js +175 -47
  19. package/lib/table/src/table.min.js +1 -1
  20. package/lib/table/src/util.js +16 -6
  21. package/lib/table/src/util.min.js +1 -1
  22. package/lib/ui/index.js +1 -1
  23. package/lib/ui/index.min.js +1 -1
  24. package/lib/ui/src/log.js +1 -1
  25. package/lib/ui/src/log.min.js +1 -1
  26. package/package.json +2 -2
  27. package/packages/grid/src/grid.ts +4 -1
  28. package/packages/table/src/body.ts +10 -5
  29. package/packages/table/src/footer.ts +7 -2
  30. package/packages/table/src/table.ts +159 -47
  31. package/packages/table/src/util.ts +15 -3
  32. /package/es/{iconfont.1741224125327.ttf → iconfont.1741333398347.ttf} +0 -0
  33. /package/es/{iconfont.1741224125327.woff → iconfont.1741333398347.woff} +0 -0
  34. /package/es/{iconfont.1741224125327.woff2 → iconfont.1741333398347.woff2} +0 -0
  35. /package/lib/{iconfont.1741224125327.ttf → iconfont.1741333398347.ttf} +0 -0
  36. /package/lib/{iconfont.1741224125327.woff → iconfont.1741333398347.woff} +0 -0
  37. /package/lib/{iconfont.1741224125327.woff2 → iconfont.1741333398347.woff2} +0 -0
@@ -9,7 +9,7 @@ import TableHeaderComponent from './header'
9
9
  import TableFooterComponent from './footer'
10
10
  import tableProps from './props'
11
11
  import tableEmits from './emits'
12
- import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth } from './util'
12
+ import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth } from './util'
13
13
  import { getSlotVNs } from '../../ui/src/vn'
14
14
  import { warnLog, errLog } from '../../ui/src/log'
15
15
  import TableCustomPanelComponent from '../module/custom/panel'
@@ -3524,6 +3524,9 @@ export default defineComponent({
3524
3524
 
3525
3525
  tableMethods = {
3526
3526
  dispatchEvent,
3527
+ getEl () {
3528
+ return refElem.value
3529
+ },
3527
3530
  /**
3528
3531
  * 重置表格的一切数据状态
3529
3532
  */
@@ -4032,18 +4035,20 @@ export default defineComponent({
4032
4035
  },
4033
4036
  /**
4034
4037
  * 检查行或列数据是否发生改变
4035
- * @param {Row} row 行对象
4038
+ * @param {Row} rowOrId 行对象
4036
4039
  * @param {String} field 字段名
4037
4040
  */
4038
- isUpdateByRow (row, field) {
4041
+ isUpdateByRow (rowOrId, field) {
4039
4042
  const { keepSource } = props
4040
4043
  const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData
4041
4044
  if (keepSource) {
4042
- const rowid = getRowid($xeTable, row)
4045
+ const rowid = XEUtils.isString(rowOrId) || XEUtils.isNumber(rowOrId) ? rowOrId : getRowid($xeTable, rowOrId)
4046
+ const rowRest = fullDataRowIdData[rowid]
4043
4047
  // 新增的数据不需要检测
4044
- if (!fullDataRowIdData[rowid]) {
4048
+ if (!rowRest) {
4045
4049
  return false
4046
4050
  }
4051
+ const row = rowRest.row
4047
4052
  const oRow = sourceDataRowIdData[rowid]
4048
4053
  if (oRow) {
4049
4054
  if (arguments.length > 1) {
@@ -4107,6 +4112,92 @@ export default defineComponent({
4107
4112
  tableColumn: reactData.tableColumn.slice(0)
4108
4113
  }
4109
4114
  },
4115
+ /**
4116
+ * 移动列到指定列的位置
4117
+ * @param fieldOrColumn
4118
+ * @param targetFieldOrColumn
4119
+ * @param options
4120
+ */
4121
+ moveColumnTo (fieldOrColumn, targetFieldOrColumn, options) {
4122
+ const { fullColumnIdData, visibleColumn } = internalData
4123
+ const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options)
4124
+ const dragCol = handleFieldOrColumn($xeTable, fieldOrColumn)
4125
+ let prevDragCol: VxeTableDefines.ColumnInfo | null = null
4126
+ const colRest = dragCol ? fullColumnIdData[dragCol.id] : null
4127
+ let defPos: 'left' | 'right' = 'left'
4128
+ if (XEUtils.isNumber(targetFieldOrColumn)) {
4129
+ if (colRest && targetFieldOrColumn) {
4130
+ let currList = colRest.items
4131
+ let offsetIndex = colRest._index + targetFieldOrColumn
4132
+ if (isCrossDrag) {
4133
+ currList = visibleColumn
4134
+ offsetIndex = colRest._index + targetFieldOrColumn
4135
+ }
4136
+ if (offsetIndex > 0 && offsetIndex < currList.length - 1) {
4137
+ prevDragCol = currList[offsetIndex]
4138
+ }
4139
+ if (targetFieldOrColumn > 0) {
4140
+ defPos = 'right'
4141
+ }
4142
+ }
4143
+ } else {
4144
+ prevDragCol = handleFieldOrColumn($xeTable, targetFieldOrColumn)
4145
+ const targetColRest = prevDragCol ? fullColumnIdData[prevDragCol.id] : null
4146
+ if (colRest && targetColRest) {
4147
+ if (targetColRest._index > colRest._index) {
4148
+ defPos = 'right'
4149
+ }
4150
+ }
4151
+ }
4152
+ return $xeTable.handleColDragSwapEvent(null, true, dragCol, prevDragCol, dragPos || defPos, dragToChild === true)
4153
+ },
4154
+ /**
4155
+ * 移动行到指定行的位置
4156
+ * @param rowidOrRow
4157
+ * @param targetRowidOrRow
4158
+ * @param options
4159
+ */
4160
+ moveRowTo (rowidOrRow, targetRowidOrRow, options) {
4161
+ const { treeConfig } = props
4162
+ const { fullAllDataRowIdData, afterFullData } = internalData
4163
+ const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options)
4164
+ const treeOpts = computeTreeOpts.value
4165
+ const dragRow = handleRowidOrRow($xeTable, rowidOrRow)
4166
+ let prevDragRow: any = null
4167
+ let defPos: 'top' | 'bottom' = 'top'
4168
+ const rowRest = dragRow ? fullAllDataRowIdData[getRowid($xeTable, dragRow)] : null
4169
+ if (XEUtils.isNumber(targetRowidOrRow)) {
4170
+ if (rowRest && targetRowidOrRow) {
4171
+ let currList = afterFullData
4172
+ let offsetIndex = rowRest._index + targetRowidOrRow
4173
+ if (treeConfig) {
4174
+ currList = rowRest.items
4175
+ if (treeOpts.transform) {
4176
+ offsetIndex = rowRest.treeIndex + targetRowidOrRow
4177
+ if (isCrossDrag) {
4178
+ currList = afterFullData
4179
+ offsetIndex = rowRest._index + targetRowidOrRow
4180
+ }
4181
+ }
4182
+ }
4183
+ if (offsetIndex >= 0 && offsetIndex <= currList.length - 1) {
4184
+ prevDragRow = currList[offsetIndex]
4185
+ }
4186
+ if (targetRowidOrRow > 0) {
4187
+ defPos = 'bottom'
4188
+ }
4189
+ }
4190
+ } else {
4191
+ prevDragRow = handleRowidOrRow($xeTable, targetRowidOrRow)
4192
+ const targetRowRest = prevDragRow ? fullAllDataRowIdData[getRowid($xeTable, prevDragRow)] : null
4193
+ if (rowRest && targetRowRest) {
4194
+ if (targetRowRest._index > rowRest._index) {
4195
+ defPos = 'bottom'
4196
+ }
4197
+ }
4198
+ }
4199
+ return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true)
4200
+ },
4110
4201
  /**
4111
4202
  * 获取表格的全量列
4112
4203
  */
@@ -8133,6 +8224,9 @@ export default defineComponent({
8133
8224
  const { afterFullData, tableFullData } = internalData
8134
8225
  const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null)
8135
8226
  const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
8227
+ const errRest = {
8228
+ status: false
8229
+ }
8136
8230
  if (prevDragRow && dragRow) {
8137
8231
  // 判断是否有拖动
8138
8232
  if (prevDragRow !== dragRow) {
@@ -8147,7 +8241,7 @@ export default defineComponent({
8147
8241
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild
8148
8242
  return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then((status) => {
8149
8243
  if (!status) {
8150
- return
8244
+ return errRest
8151
8245
  }
8152
8246
 
8153
8247
  let oafIndex = -1
@@ -8178,11 +8272,11 @@ export default defineComponent({
8178
8272
  if (isPeerDrag && !isCrossDrag) {
8179
8273
  if (oldRest.row[parentField] !== newRest.row[parentField]) {
8180
8274
  // 非同级
8181
- return
8275
+ return errRest
8182
8276
  }
8183
8277
  } else {
8184
8278
  if (!isCrossDrag) {
8185
- return
8279
+ return errRest
8186
8280
  }
8187
8281
  if (oldAllMaps[newRowid]) {
8188
8282
  isSelfToChildStatus = true
@@ -8193,7 +8287,7 @@ export default defineComponent({
8193
8287
  content: getI18n('vxe.error.treeDragChild')
8194
8288
  })
8195
8289
  }
8196
- return
8290
+ return errRest
8197
8291
  }
8198
8292
  }
8199
8293
  }
@@ -8201,13 +8295,13 @@ export default defineComponent({
8201
8295
  // 子到根
8202
8296
 
8203
8297
  if (!isCrossDrag) {
8204
- return
8298
+ return errRest
8205
8299
  }
8206
8300
  } else if (newLevel) {
8207
8301
  // 根到子
8208
8302
 
8209
8303
  if (!isCrossDrag) {
8210
- return
8304
+ return errRest
8211
8305
  }
8212
8306
  if (oldAllMaps[newRowid]) {
8213
8307
  isSelfToChildStatus = true
@@ -8218,7 +8312,7 @@ export default defineComponent({
8218
8312
  content: getI18n('vxe.error.treeDragChild')
8219
8313
  })
8220
8314
  }
8221
- return
8315
+ return errRest
8222
8316
  }
8223
8317
  }
8224
8318
  } else {
@@ -8282,28 +8376,36 @@ export default defineComponent({
8282
8376
  if (reactData.scrollYLoad) {
8283
8377
  $xeTable.updateScrollYSpace()
8284
8378
  }
8285
- nextTick().then(() => {
8379
+
8380
+ if (evnt) {
8381
+ dispatchEvent('row-dragend', {
8382
+ oldRow: dragRow,
8383
+ newRow: prevDragRow,
8384
+ dragRow,
8385
+ dragPos: prevDragPos as any,
8386
+ dragToChild: isDragToChildFlag,
8387
+ offsetIndex: dragOffsetIndex,
8388
+ _index: {
8389
+ newIndex: nafIndex,
8390
+ oldIndex: oafIndex
8391
+ }
8392
+ }, evnt)
8393
+ }
8394
+
8395
+ return nextTick().then(() => {
8286
8396
  $xeTable.updateCellAreas()
8287
8397
  $xeTable.recalculate()
8288
- })
8289
-
8290
- dispatchEvent('row-dragend', {
8291
- oldRow: dragRow,
8292
- newRow: prevDragRow,
8293
- dragRow,
8294
- dragPos: prevDragPos as any,
8295
- dragToChild: isDragToChildFlag,
8296
- offsetIndex: dragOffsetIndex,
8297
- _index: {
8298
- newIndex: nafIndex,
8299
- oldIndex: oafIndex
8398
+ }).then(() => {
8399
+ return {
8400
+ status: true
8300
8401
  }
8301
- }, evnt)
8402
+ })
8302
8403
  }).catch(() => {
8404
+ return errRest
8303
8405
  })
8304
8406
  }
8305
8407
  }
8306
- return Promise.resolve()
8408
+ return Promise.resolve(errRest)
8307
8409
  },
8308
8410
  handleRowDragDragendEvent (evnt) {
8309
8411
  const { treeConfig } = props
@@ -8428,6 +8530,9 @@ export default defineComponent({
8428
8530
  const { isPeerDrag, isCrossDrag, isSelfToChildDrag, isToChildDrag, dragEndMethod, dragToChildMethod } = columnDragOpts
8429
8531
  const { collectColumn } = internalData
8430
8532
  const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0
8533
+ const errRest = {
8534
+ status: false
8535
+ }
8431
8536
  if (prevDragCol && dragCol) {
8432
8537
  // 判断是否有拖动
8433
8538
  if (prevDragCol !== dragCol) {
@@ -8444,7 +8549,7 @@ export default defineComponent({
8444
8549
  const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild
8445
8550
  return Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
8446
8551
  if (!status) {
8447
- return
8552
+ return errRest
8448
8553
  }
8449
8554
 
8450
8555
  let oafIndex = -1
@@ -8463,11 +8568,11 @@ export default defineComponent({
8463
8568
  if (isPeerDrag && !isCrossDrag) {
8464
8569
  if (dragColumn.parentId !== newColumn.parentId) {
8465
8570
  // 非同级
8466
- return
8571
+ return errRest
8467
8572
  }
8468
8573
  } else {
8469
8574
  if (!isCrossDrag) {
8470
- return
8575
+ return errRest
8471
8576
  }
8472
8577
 
8473
8578
  if (oldAllMaps[newColumn.id]) {
@@ -8479,7 +8584,7 @@ export default defineComponent({
8479
8584
  content: getI18n('vxe.error.treeDragChild')
8480
8585
  })
8481
8586
  }
8482
- return
8587
+ return errRest
8483
8588
  }
8484
8589
  }
8485
8590
  }
@@ -8487,13 +8592,13 @@ export default defineComponent({
8487
8592
  // 子到根
8488
8593
 
8489
8594
  if (!isCrossDrag) {
8490
- return
8595
+ return errRest
8491
8596
  }
8492
8597
  } else if (newColumn.parentId) {
8493
8598
  // 根到子
8494
8599
 
8495
8600
  if (!isCrossDrag) {
8496
- return
8601
+ return errRest
8497
8602
  }
8498
8603
  if (oldAllMaps[newColumn.id]) {
8499
8604
  isSelfToChildStatus = true
@@ -8504,7 +8609,7 @@ export default defineComponent({
8504
8609
  content: getI18n('vxe.error.treeDragChild')
8505
8610
  })
8506
8611
  }
8507
- return
8612
+ return errRest
8508
8613
  }
8509
8614
  }
8510
8615
  } else {
@@ -8568,27 +8673,34 @@ export default defineComponent({
8568
8673
  }
8569
8674
  }
8570
8675
 
8571
- dispatchEvent('column-dragend', {
8572
- oldColumn: dragColumn,
8573
- newColumn,
8574
- dragColumn,
8575
- dragPos: prevDragPos,
8576
- dragToChild: isDragToChildFlag,
8577
- offsetIndex: dragOffsetIndex,
8578
- _index: {
8579
- newIndex: nafIndex,
8580
- oldIndex: oafIndex
8581
- }
8582
- }, evnt)
8676
+ if (evnt) {
8677
+ dispatchEvent('column-dragend', {
8678
+ oldColumn: dragColumn,
8679
+ newColumn,
8680
+ dragColumn,
8681
+ dragPos: prevDragPos,
8682
+ dragToChild: isDragToChildFlag,
8683
+ offsetIndex: dragOffsetIndex,
8684
+ _index: {
8685
+ newIndex: nafIndex,
8686
+ oldIndex: oafIndex
8687
+ }
8688
+ }, evnt)
8689
+ }
8583
8690
 
8584
8691
  if (isSyncColumn) {
8585
8692
  $xeTable.handleColDragSwapColumn()
8586
8693
  }
8694
+
8695
+ return {
8696
+ status: true
8697
+ }
8587
8698
  }).catch(() => {
8699
+ return errRest
8588
8700
  })
8589
8701
  }
8590
8702
  }
8591
- return Promise.resolve()
8703
+ return Promise.resolve(errRest)
8592
8704
  },
8593
8705
  handleHeaderCellDragDragendEvent (evnt) {
8594
8706
  const { dragCol } = reactData
@@ -101,15 +101,19 @@ export function getRowUniqueId () {
101
101
  export function getRowkey ($xeTable: VxeTableConstructor) {
102
102
  const { props } = $xeTable
103
103
  const { computeRowOpts } = $xeTable.getComputeMaps()
104
- const { rowId } = props
105
104
  const rowOpts = computeRowOpts.value
106
- return rowId || rowOpts.keyField || '_X_ROW_KEY'
105
+ return `${props.rowId || rowOpts.keyField || '_X_ROW_KEY'}`
107
106
  }
108
107
 
109
108
  // 行主键 value
110
109
  export function getRowid ($xeTable: VxeTableConstructor, row: any) {
111
110
  const rowid = XEUtils.get(row, getRowkey($xeTable))
112
- return XEUtils.eqNull(rowid) ? '' : encodeURIComponent(rowid)
111
+ return encodeRowid(rowid)
112
+ }
113
+
114
+ // 编码行主键
115
+ export function encodeRowid (rowVal: string) {
116
+ return XEUtils.eqNull(rowVal) ? '' : encodeURIComponent(rowVal)
113
117
  }
114
118
 
115
119
  export interface XEColumnInstance {
@@ -123,6 +127,14 @@ export const handleFieldOrColumn = ($xeTable: VxeTableConstructor, fieldOrColumn
123
127
  return null
124
128
  }
125
129
 
130
+ export const handleRowidOrRow = ($xeTable: VxeTableConstructor, rowidOrRow: any) => {
131
+ if (rowidOrRow) {
132
+ const rowid = XEUtils.isString(rowidOrRow) || XEUtils.isNumber(rowidOrRow) ? rowidOrRow : getRowid($xeTable, rowidOrRow)
133
+ return $xeTable.getRowById(rowid)
134
+ }
135
+ return null
136
+ }
137
+
126
138
  function getPaddingLeftRightSize (elem: HTMLElement | null) {
127
139
  if (elem) {
128
140
  const computedStyle = getComputedStyle(elem)