vxe-table 4.1.9 → 4.1.11

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.
@@ -259,10 +259,12 @@ export default defineComponent({
259
259
  rowExpandedReserveRowMap: {},
260
260
  // 树结构数据,已展开保留的行
261
261
  treeExpandedReserveRowMap: {},
262
- // 完整数据、条件处理后
262
+ // 列表完整数据、条件处理后
263
263
  tableFullData: [],
264
- treeFullData: [],
265
264
  afterFullData: [],
265
+ // 树结构完整数据、条件处理后
266
+ tableFullTreeData: [],
267
+ afterTreeFullData: [],
266
268
  tableSynchData: [],
267
269
  tableSourceData: [],
268
270
  // 收集的列配置(带分组)
@@ -601,7 +603,7 @@ export default defineComponent({
601
603
  return XEUtils.isEqual(val1, val2)
602
604
  }
603
605
 
604
- const getNextSortOrder = (column: any) => {
606
+ const getNextSortOrder = (column: VxeTableDefines.ColumnInfo) => {
605
607
  const sortOpts = computeSortOpts.value
606
608
  const { orders } = sortOpts
607
609
  const currOrder = column.order || null
@@ -1138,24 +1140,26 @@ export default defineComponent({
1138
1140
  const updateAfterDataIndex = () => {
1139
1141
  const { treeConfig } = props
1140
1142
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData
1141
- const { treeFullData } = internalData
1143
+ const { afterTreeFullData } = internalData
1142
1144
  const treeOpts = computeTreeOpts.value
1143
1145
  if (treeConfig) {
1144
- XEUtils.eachTree(treeFullData, (row, index, items, path) => {
1146
+ XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
1145
1147
  const rowid = getRowid($xetable, row)
1146
1148
  const allrest = fullAllDataRowIdData[rowid]
1147
1149
  const fullrest = fullDataRowIdData[rowid]
1148
1150
  const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('')
1149
1151
  if (allrest) {
1150
1152
  allrest.seq = seq
1153
+ allrest._index = index
1151
1154
  }
1152
1155
  if (fullrest) {
1153
1156
  fullrest.seq = seq
1157
+ fullrest._index = index
1154
1158
  } else {
1155
1159
  fullAllDataRowIdData[rowid] = { row, rowid, seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 }
1156
1160
  fullDataRowIdData[rowid] = { row, rowid, seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 }
1157
1161
  }
1158
- }, treeOpts)
1162
+ }, { children: treeOpts.mapChildren })
1159
1163
  } else {
1160
1164
  afterFullData.forEach((row, index) => {
1161
1165
  const rowid = getRowid($xetable, row)
@@ -1164,6 +1168,7 @@ export default defineComponent({
1164
1168
  const seq = index + 1
1165
1169
  if (allrest) {
1166
1170
  allrest.seq = seq
1171
+ allrest._index = index
1167
1172
  }
1168
1173
  if (fullrest) {
1169
1174
  fullrest.seq = seq
@@ -1181,23 +1186,37 @@ export default defineComponent({
1181
1186
  * 如果存在筛选条件,继续处理
1182
1187
  */
1183
1188
  const updateAfterFullData = () => {
1184
- const { tableFullColumn, tableFullData } = internalData
1189
+ const { treeConfig } = props
1190
+ const { tableFullColumn, tableFullData, tableFullTreeData } = internalData
1185
1191
  const filterOpts = computeFilterOpts.value
1186
1192
  const sortOpts = computeSortOpts.value
1193
+ const treeOpts = computeTreeOpts.value
1194
+ const { transform } = treeOpts
1187
1195
  const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts
1188
1196
  const { remote: allRemoteSort, sortMethod: allSortMethod } = sortOpts
1189
- let tableData = tableFullData.slice(0)
1197
+ let tableData: any[] = []
1198
+ let tableTree: any[] = []
1199
+
1200
+ // 处理列
1190
1201
  if (!allRemoteFilter || !allRemoteSort) {
1191
- const filterColumns: any[] = []
1192
- const orderColumns: any[] = []
1193
- tableFullColumn.forEach((column: any) => {
1202
+ const filterColumns: {
1203
+ column: VxeTableDefines.ColumnInfo
1204
+ valueList: any[]
1205
+ itemList: VxeTableDefines.FilterOption[]
1206
+ }[] = []
1207
+ const orderColumns: {
1208
+ column: VxeTableDefines.ColumnInfo
1209
+ property: string
1210
+ order: VxeTablePropTypes.SortOrder
1211
+ }[] = []
1212
+ tableFullColumn.forEach((column) => {
1194
1213
  const { sortable, order, filters } = column
1195
1214
  if (!allRemoteFilter && filters && filters.length) {
1196
1215
  const valueList: any[] = []
1197
- const itemList: any[] = []
1198
- filters.forEach((item: any) => {
1216
+ const itemList: VxeTableDefines.FilterOption[] = []
1217
+ filters.forEach((item) => {
1199
1218
  if (item.checked) {
1200
- itemList.push(item)
1219
+ itemList.push(item as VxeTableDefines.FilterOption)
1201
1220
  valueList.push(item.value)
1202
1221
  }
1203
1222
  })
@@ -1213,41 +1232,70 @@ export default defineComponent({
1213
1232
  // 处理筛选
1214
1233
  // 支持单列、多列、组合筛选
1215
1234
  if (!allRemoteFilter && filterColumns.length) {
1216
- tableData = tableData.filter((row: any) => {
1235
+ const handleFilter = (row: any) => {
1217
1236
  return filterColumns.every(({ column, valueList, itemList }) => {
1218
1237
  const { filterMethod, filterRender } = column
1219
1238
  const compConf = filterRender ? VXETable.renderer.get(filterRender.name) : null
1220
1239
  const compFilterMethod = compConf ? compConf.filterMethod : null
1221
- const defaultFilterMethod: any = compConf ? (compConf as any).defaultFilterMethod : null
1240
+ const defaultFilterMethod = compConf ? compConf.defaultFilterMethod : null
1222
1241
  const cellValue = getCellValue(row, column)
1223
1242
  if (filterMethod) {
1224
- return itemList.some((item: any) => filterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xetable }))
1243
+ return itemList.some((item) => filterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xetable }))
1225
1244
  } else if (compFilterMethod) {
1226
- return itemList.some((item: any) => compFilterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xetable }))
1245
+ return itemList.some((item) => compFilterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xetable }))
1227
1246
  } else if (allFilterMethod) {
1228
1247
  return allFilterMethod({ options: itemList, values: valueList, cellValue, row, column })
1229
1248
  } else if (defaultFilterMethod) {
1230
- return itemList.some((item: any) => defaultFilterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xetable }))
1249
+ return itemList.some((item) => defaultFilterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xetable }))
1231
1250
  }
1232
1251
  return valueList.indexOf(XEUtils.get(row, column.property)) > -1
1233
1252
  })
1234
- })
1253
+ }
1254
+ if (treeConfig && transform) {
1255
+ // 筛选虚拟树
1256
+ tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, { ...treeOpts, original: true })
1257
+ tableData = tableTree
1258
+ } else {
1259
+ tableData = treeConfig ? tableFullTreeData.filter(handleFilter) : tableFullData.filter(handleFilter)
1260
+ tableTree = tableData
1261
+ }
1262
+ } else {
1263
+ if (treeConfig && transform) {
1264
+ // 还原虚拟树
1265
+ tableTree = XEUtils.searchTree(tableFullTreeData, () => true, { ...treeOpts, original: true })
1266
+ tableData = tableTree
1267
+ } else {
1268
+ tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0)
1269
+ tableTree = tableData
1270
+ }
1235
1271
  }
1236
1272
 
1237
- // 处理排序
1273
+ // 处理排序(不能用于树形结构)
1238
1274
  // 支持单列、多列、组合排序
1239
1275
  if (!allRemoteSort && orderColumns.length) {
1240
- if (allSortMethod) {
1241
- const sortRests = allSortMethod({ data: tableData, sortList: orderColumns, $table: $xetable })
1242
- tableData = XEUtils.isArray(sortRests) ? sortRests : tableData
1276
+ if (treeConfig && transform) {
1277
+ // 虚拟树和列表一样,只能排序根级节点
1278
+ if (allSortMethod) {
1279
+ const sortRests = allSortMethod({ data: tableTree, sortList: orderColumns, $table: $xetable })
1280
+ tableTree = XEUtils.isArray(sortRests) ? sortRests : tableTree
1281
+ } else {
1282
+ tableTree = XEUtils.orderBy(tableTree, orderColumns.map(({ column, order }) => [getOrderField(column), order]))
1283
+ }
1284
+ tableData = tableTree
1243
1285
  } else {
1244
- tableData = XEUtils.orderBy(tableData, orderColumns.map(({ column, order }) => [getOrderField(column), order]))
1286
+ if (allSortMethod) {
1287
+ const sortRests = allSortMethod({ data: tableData, sortList: orderColumns, $table: $xetable })
1288
+ tableData = XEUtils.isArray(sortRests) ? sortRests : tableData
1289
+ } else {
1290
+ tableData = XEUtils.orderBy(tableData, orderColumns.map(({ column, order }) => [getOrderField(column), order]))
1291
+ }
1292
+ tableTree = tableData
1245
1293
  }
1246
1294
  }
1247
1295
  }
1248
1296
  internalData.afterFullData = tableData
1297
+ internalData.afterTreeFullData = tableTree
1249
1298
  updateAfterDataIndex()
1250
- return tableData
1251
1299
  }
1252
1300
 
1253
1301
  const updateStyle = () => {
@@ -1273,7 +1321,7 @@ export default defineComponent({
1273
1321
  const fixedType = index > 0 ? name : ''
1274
1322
  const layoutList = ['header', 'body', 'footer']
1275
1323
  const isFixedLeft = fixedType === 'left'
1276
- let fixedColumn: any[] = []
1324
+ let fixedColumn: VxeTableDefines.ColumnInfo[] = []
1277
1325
  let fixedWrapperElem: HTMLDivElement
1278
1326
  if (fixedType) {
1279
1327
  fixedColumn = isFixedLeft ? columnStore.leftList : columnStore.rightList
@@ -1333,12 +1381,12 @@ export default defineComponent({
1333
1381
  let childWidth = 0
1334
1382
  let countChild = 0
1335
1383
  if (hasEllipsis) {
1336
- XEUtils.eachTree(column.children, (item: any) => {
1384
+ XEUtils.eachTree(column.children, (item) => {
1337
1385
  if (!item.children || !column.children.length) {
1338
1386
  countChild++
1339
1387
  }
1340
1388
  childWidth += item.renderWidth
1341
- })
1389
+ }, { children: 'children' })
1342
1390
  }
1343
1391
  thElem.style.width = hasEllipsis ? `${childWidth - countChild - (border ? 2 : 0)}px` : ''
1344
1392
  }
@@ -1364,7 +1412,7 @@ export default defineComponent({
1364
1412
  wrapperElem.style.top = `${headerHeight}px`
1365
1413
  }
1366
1414
  fixedWrapperElem.style.height = `${(customHeight > 0 ? customHeight - headerHeight - footerHeight : tableHeight) + headerHeight + footerHeight - scrollbarHeight * (showFooter ? 2 : 1)}px`
1367
- fixedWrapperElem.style.width = `${fixedColumn.reduce((previous: any, column: any) => previous + column.renderWidth, isFixedLeft ? 0 : scrollbarWidth)}px`
1415
+ fixedWrapperElem.style.width = `${fixedColumn.reduce((previous, column) => previous + column.renderWidth, isFixedLeft ? 0 : scrollbarWidth)}px`
1368
1416
  }
1369
1417
 
1370
1418
  let tWidth = tableWidth
@@ -1703,7 +1751,7 @@ export default defineComponent({
1703
1751
  const { fullAllDataRowIdData } = internalData
1704
1752
  const treeOpts = computeTreeOpts.value
1705
1753
  const checkboxOpts = computeCheckboxOpts.value
1706
- const { loadMethod } = treeOpts
1754
+ const { transform, loadMethod } = treeOpts
1707
1755
  const { checkStrictly } = checkboxOpts
1708
1756
  const rest = fullAllDataRowIdData[getRowid($xetable, row)]
1709
1757
  return new Promise(resolve => {
@@ -1724,9 +1772,17 @@ export default defineComponent({
1724
1772
  if (!checkStrictly && tableMethods.isCheckedByCheckboxRow(row)) {
1725
1773
  tableMethods.setCheckboxRow(childRows, true)
1726
1774
  }
1775
+ nextTick().then(() => {
1776
+ if (transform) {
1777
+ return tablePrivateMethods.handleTableData()
1778
+ }
1779
+ }).then(() => {
1780
+ return tableMethods.recalculate()
1781
+ }).then(() => resolve())
1727
1782
  })
1783
+ } else {
1784
+ nextTick().then(() => tableMethods.recalculate()).then(() => resolve())
1728
1785
  }
1729
- resolve(nextTick().then(() => tableMethods.recalculate()))
1730
1786
  })
1731
1787
  } else {
1732
1788
  resolve()
@@ -1854,13 +1910,24 @@ export default defineComponent({
1854
1910
  if (!treeOpts.children) {
1855
1911
  errLog('vxe.error.reqProp', ['tree-config.children'])
1856
1912
  }
1913
+ if (!treeOpts.mapChildren) {
1914
+ errLog('vxe.error.reqProp', ['tree-config.mapChildren'])
1915
+ }
1916
+ if (treeOpts.children === treeOpts.mapChildren) {
1917
+ errLog('vxe.error.errConflicts', ['tree-config.children', 'tree-config.mapChildren'])
1918
+ }
1857
1919
  fullData.forEach(row => {
1858
1920
  if (row[treeOpts.children] && row[treeOpts.children].length) {
1859
1921
  warnLog('vxe.error.errConflicts', ['tree-config.transform', `row.${treeOpts.children}`])
1860
1922
  }
1861
1923
  })
1862
1924
  }
1863
- treeData = XEUtils.toArrayTree(fullData, { key: treeOpts.rowField, parentKey: treeOpts.parentField, children: treeOpts.children })
1925
+ treeData = XEUtils.toArrayTree(fullData, {
1926
+ key: treeOpts.rowField,
1927
+ parentKey: treeOpts.parentField,
1928
+ children: treeOpts.children,
1929
+ mapChildren: treeOpts.mapChildren
1930
+ })
1864
1931
  fullData = treeData.slice(0)
1865
1932
  } else {
1866
1933
  treeData = fullData.slice(0)
@@ -1876,7 +1943,7 @@ export default defineComponent({
1876
1943
  reactData.scrollYLoad = sYLoad
1877
1944
  // 全量数据
1878
1945
  internalData.tableFullData = fullData
1879
- internalData.treeFullData = treeData
1946
+ internalData.tableFullTreeData = treeData
1880
1947
  // 缓存数据
1881
1948
  tablePrivateMethods.cacheRowMap(true)
1882
1949
  // 原始数据
@@ -2149,26 +2216,6 @@ export default defineComponent({
2149
2216
  return scrollYLoad
2150
2217
  }
2151
2218
 
2152
- const updateVirtualTreeData = () => {
2153
- const { scrollYLoad: oldScrollYLoad, treeExpandeds } = reactData
2154
- const { treeFullData } = internalData
2155
- const treeOpts = computeTreeOpts.value
2156
- const fullData: any[] = []
2157
- const expandMaps: Map<any, number> = new Map()
2158
- XEUtils.eachTree(treeFullData, (row, index, items, path, parent) => {
2159
- if (!parent || (expandMaps.has(parent) && $xetable.findRowIndexOf(treeExpandeds, parent) > -1)) {
2160
- expandMaps.set(row, 1)
2161
- fullData.push(row)
2162
- }
2163
- }, treeOpts)
2164
- const scrollYLoad = updateScrollYStatus(fullData)
2165
- internalData.tableFullData = scrollYLoad ? fullData : treeFullData
2166
- if (scrollYLoad || oldScrollYLoad !== scrollYLoad) {
2167
- return tablePrivateMethods.handleTableData(true).then(() => tableMethods.recalculate())
2168
- }
2169
- return nextTick()
2170
- }
2171
-
2172
2219
  /**
2173
2220
  * 展开与收起树节点
2174
2221
  * @param rows
@@ -2226,7 +2273,7 @@ export default defineComponent({
2226
2273
  */
2227
2274
  const handleVirtualTreeExpand = (rows: any[], expanded: boolean) => {
2228
2275
  return handleBaseTreeExpand(rows, expanded).then(() => {
2229
- return updateVirtualTreeData()
2276
+ return tablePrivateMethods.handleTableData()
2230
2277
  }).then(() => {
2231
2278
  return tableMethods.recalculate()
2232
2279
  })
@@ -2301,7 +2348,7 @@ export default defineComponent({
2301
2348
  return clearTableAllStatus($xetable)
2302
2349
  },
2303
2350
  /**
2304
- * 同步 data 数据
2351
+ * 同步 data 数据(即将废弃)
2305
2352
  * 如果用了该方法,那么组件将不再记录增删改的状态,只能自行实现对应逻辑
2306
2353
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
2307
2354
  */
@@ -2396,7 +2443,7 @@ export default defineComponent({
2396
2443
  const { keepSource } = props
2397
2444
  const { tableSourceData, fullDataRowIdData, fullAllDataRowIdData } = internalData
2398
2445
  const treeOpts = computeTreeOpts.value
2399
- const { children } = treeOpts
2446
+ const { transform, children, mapChildren } = treeOpts
2400
2447
  const parentRest = fullAllDataRowIdData[getRowid($xetable, row)]
2401
2448
  const parentLevel = parentRest ? parentRest.level : 0
2402
2449
  return tableMethods.createData(childRecords).then((rows) => {
@@ -2414,6 +2461,9 @@ export default defineComponent({
2414
2461
  fullAllDataRowIdData[rowid] = rest
2415
2462
  }, treeOpts)
2416
2463
  row[children] = rows
2464
+ if (transform) {
2465
+ row[mapChildren] = rows
2466
+ }
2417
2467
  return rows
2418
2468
  })
2419
2469
  },
@@ -3338,7 +3388,7 @@ export default defineComponent({
3338
3388
  return tableMethods.getSortColumns().length > 0
3339
3389
  },
3340
3390
  getSortColumns () {
3341
- const sortList: any[] = []
3391
+ const sortList: VxeTableDefines.SortCheckedParams[] = []
3342
3392
  const { tableFullColumn } = internalData
3343
3393
  tableFullColumn.forEach((column) => {
3344
3394
  const { order } = column
@@ -3551,7 +3601,7 @@ export default defineComponent({
3551
3601
  return handleAsyncTreeExpandChilds(row)
3552
3602
  }).then(() => {
3553
3603
  if (transform) {
3554
- return updateVirtualTreeData()
3604
+ return tablePrivateMethods.handleTableData()
3555
3605
  }
3556
3606
  }).then(() => {
3557
3607
  return tableMethods.recalculate()
@@ -3627,15 +3677,15 @@ export default defineComponent({
3627
3677
  */
3628
3678
  clearTreeExpand () {
3629
3679
  const { treeExpandeds } = reactData
3630
- const { treeFullData } = internalData
3680
+ const { tableFullTreeData } = internalData
3631
3681
  const treeOpts = computeTreeOpts.value
3632
3682
  const { reserve } = treeOpts
3633
3683
  const isExists = treeExpandeds.length
3634
3684
  reactData.treeExpandeds = []
3635
3685
  if (reserve) {
3636
- XEUtils.eachTree(treeFullData, row => handleTreeExpandReserve(row, false), treeOpts)
3686
+ XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), treeOpts)
3637
3687
  }
3638
- return updateVirtualTreeData().then(() => {
3688
+ return tablePrivateMethods.handleTableData().then(() => {
3639
3689
  if (isExists) {
3640
3690
  tableMethods.recalculate()
3641
3691
  }
@@ -4448,10 +4498,29 @@ export default defineComponent({
4448
4498
  return record
4449
4499
  },
4450
4500
  handleTableData (force?: boolean) {
4501
+ const { treeConfig } = props
4451
4502
  const { scrollYLoad } = reactData
4452
4503
  const { scrollYStore, fullDataRowIdData } = internalData
4453
- const fullData = force ? updateAfterFullData() : internalData.afterFullData
4454
- const tableData = scrollYLoad ? fullData.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullData.slice(0)
4504
+ const { treeExpandeds } = reactData
4505
+ const treeOpts = computeTreeOpts.value
4506
+ let fullList: any[] = []
4507
+ // 是否进行数据处理
4508
+ if (force) {
4509
+ updateAfterFullData()
4510
+ }
4511
+ // 如果为虚拟树,将树结构拍平
4512
+ if (treeConfig && treeOpts.transform) {
4513
+ const expandMaps: Map<any, number> = new Map()
4514
+ XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parent) => {
4515
+ if (!parent || (expandMaps.has(parent) && $xetable.findRowIndexOf(treeExpandeds, parent) > -1)) {
4516
+ expandMaps.set(row, 1)
4517
+ fullList.push(row)
4518
+ }
4519
+ }, { children: treeOpts.mapChildren })
4520
+ } else {
4521
+ fullList = internalData.afterFullData
4522
+ }
4523
+ const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0)
4455
4524
  tableData.forEach((row, $index) => {
4456
4525
  const rowid = getRowid($xetable, row)
4457
4526
  const rest = fullDataRowIdData[rowid]
@@ -4469,7 +4538,7 @@ export default defineComponent({
4469
4538
  cacheRowMap (isSource) {
4470
4539
  const { treeConfig } = props
4471
4540
  const treeOpts = computeTreeOpts.value
4472
- let { fullDataRowIdData, fullAllDataRowIdData, tableFullData, treeFullData } = internalData
4541
+ let { fullDataRowIdData, fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData
4473
4542
  const rowkey = getRowkey($xetable)
4474
4543
  const isLazy = treeConfig && treeOpts.lazy
4475
4544
  const handleCache = (row: any, index: any, items: any, path?: any[], parent?: any, nodes?: any[]) => {
@@ -4494,7 +4563,7 @@ export default defineComponent({
4494
4563
  }
4495
4564
  fullAllDataRowIdData = internalData.fullAllDataRowIdData = {}
4496
4565
  if (treeConfig) {
4497
- XEUtils.eachTree(treeFullData, handleCache, treeOpts)
4566
+ XEUtils.eachTree(tableFullTreeData, handleCache, treeOpts)
4498
4567
  } else {
4499
4568
  tableFullData.forEach(handleCache)
4500
4569
  }
@@ -4794,7 +4863,7 @@ export default defineComponent({
4794
4863
  const editOpts = computeEditOpts.value
4795
4864
  const { actived } = editStore
4796
4865
  const { row, column } = params
4797
- const cell = evnt.currentTarget as HTMLTableDataCellElement
4866
+ const cell = evnt.currentTarget as HTMLTableCellElement
4798
4867
  handleTargetEnterEvent()
4799
4868
  if (isEnableConf(editConfig)) {
4800
4869
  if ((editOpts.mode === 'row' && actived.row === row) || (actived.row === row && actived.column === column)) {
@@ -4821,7 +4890,7 @@ export default defineComponent({
4821
4890
  triggerFooterTooltipEvent (evnt, params) {
4822
4891
  const { column } = params
4823
4892
  const { tooltipStore } = internalData
4824
- const cell = evnt.currentTarget as HTMLTableDataCellElement
4893
+ const cell = evnt.currentTarget as HTMLTableCellElement
4825
4894
  handleTargetEnterEvent()
4826
4895
  if (tooltipStore.column !== column || !tooltipStore.visible) {
4827
4896
  handleTooltip(evnt, cell, cell.querySelector('.vxe-cell--item') || cell.children[0], null, params)
@@ -5208,7 +5277,6 @@ export default defineComponent({
5208
5277
  tablePrivateMethods.handleTableData()
5209
5278
  tablePrivateMethods.updateScrollYSpace()
5210
5279
  },
5211
- updateVirtualTreeData,
5212
5280
  /**
5213
5281
  * 处理固定列的显示状态
5214
5282
  */
@@ -5346,6 +5414,7 @@ export default defineComponent({
5346
5414
  }
5347
5415
  }
5348
5416
 
5417
+ // 检测对应模块是否安装
5349
5418
  if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
5350
5419
  'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(name => {
5351
5420
  ($xetable as any)[name] = function () {
@@ -45,7 +45,7 @@ export function getRowUniqueId () {
45
45
  export function getRowkey ($xetable: VxeTableConstructor) {
46
46
  const { props } = $xetable
47
47
  const { rowId } = props
48
- return rowId || '_XID'
48
+ return rowId || '_X_ID'
49
49
  }
50
50
 
51
51
  // 行主键 value
@@ -51,7 +51,7 @@ const GlobalConfig: VXETableGlobalConfig = {
51
51
  // storage: false,
52
52
  // checkMethod () {}
53
53
  // },
54
- // rowId: '_XID', // 行数据的唯一主键字段名
54
+ // rowId: '_X_ID', // 行数据的唯一主键字段名
55
55
  sortConfig: {
56
56
  // remote: false,
57
57
  // trigger: 'default',
@@ -69,6 +69,7 @@ const GlobalConfig: VXETableGlobalConfig = {
69
69
  parentField: 'parentId',
70
70
  children: 'children',
71
71
  hasChild: 'hasChild',
72
+ mapChildren: '_X_CHILD',
72
73
  indent: 20,
73
74
  showIcon: true
74
75
  },
@@ -149,7 +149,7 @@ const validatorHook: VxeGlobalHooksHandles.HookOptions = {
149
149
  const ruleProps = Object.keys(validRest)
150
150
  return nextTick().then(() => {
151
151
  if (ruleProps.length) {
152
- return validRest[ruleProps[0]][0]
152
+ return Promise.reject(validRest[ruleProps[0]][0])
153
153
  }
154
154
  if (cb) {
155
155
  cb()
package/types/column.d.ts CHANGED
@@ -54,6 +54,7 @@ export namespace VxeColumnPropTypes {
54
54
  export type FilterMultiple = boolean;
55
55
 
56
56
  interface FilterMethodParams {
57
+ $table: VxeTableConstructor,
57
58
  value: any;
58
59
  option: VxeTableDefines.FilterOption;
59
60
  cellValue: any;
package/types/table.d.ts CHANGED
@@ -100,6 +100,7 @@ export interface TablePublicMethods {
100
100
  /**
101
101
  * 同步 data 数据;如果用了该方法,那么组件将不再记录增删改的状态,只能自行实现对应逻辑
102
102
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
103
+ * @deprecated
103
104
  */
104
105
  syncData(): Promise<any>;
105
106
  /**
@@ -712,7 +713,6 @@ export interface TablePrivateMethods {
712
713
  updateScrollYSpace(): void;
713
714
  updateScrollXData(): void;
714
715
  updateScrollYData(): void;
715
- updateVirtualTreeData(): Promise<any>;
716
716
  checkScrolling(): void;
717
717
  updateZindex(): void;
718
718
  updateCellAreas(): void;
@@ -957,12 +957,14 @@ export interface TableInternalData {
957
957
  rowExpandedReserveRowMap: any;
958
958
  // 树结构数据,已展开保留的行
959
959
  treeExpandedReserveRowMap: any;
960
- // 完整数据、条件处理后
960
+ // 列表完整数据、条件处理后
961
961
  tableFullData: any[];
962
962
  afterFullData: any[];
963
963
  tableSynchData: any[];
964
964
  tableSourceData: any[];
965
- treeFullData: any[];
965
+ // 树的全量数据、条件处理后
966
+ tableFullTreeData: any[];
967
+ afterTreeFullData: any[];
966
968
  // 收集的列配置(带分组)
967
969
  collectColumn: VxeTableDefines.ColumnInfo[],
968
970
  // 完整所有列(不带分组)
@@ -1436,6 +1438,7 @@ export namespace VxeTablePropTypes {
1436
1438
  rowField?: string;
1437
1439
  parentField?: string;
1438
1440
  children?: string;
1441
+ mapChildren?: string;
1439
1442
  indent?: number;
1440
1443
  line?: boolean;
1441
1444
  expandAll?: boolean;
@@ -1468,6 +1471,7 @@ export namespace VxeTablePropTypes {
1468
1471
  children: string;
1469
1472
  indent: number;
1470
1473
  hasChild: string;
1474
+ mapChildren: string;
1471
1475
  iconOpen: string;
1472
1476
  iconClose: string;
1473
1477
  iconLoaded: string;