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.
- package/README.md +1 -1
- package/README.zh-TW.md +0 -1
- package/es/edit/src/hook.js +17 -26
- package/es/filter/src/hook.js +1 -1
- package/es/select/src/select.js +1 -1
- package/es/table/src/body.js +9 -3
- package/es/table/src/table.js +125 -54
- package/es/table/src/util.js +1 -1
- package/es/v-x-e-table/src/conf.js +2 -1
- package/lib/edit/src/hook.js +16 -29
- package/lib/edit/src/hook.min.js +1 -1
- package/lib/filter/src/hook.js +1 -1
- package/lib/filter/src/hook.min.js +1 -1
- package/lib/index.umd.js +276 -119
- package/lib/index.umd.min.js +1 -1
- package/lib/select/src/select.js +1 -1
- package/lib/select/src/select.min.js +1 -1
- package/lib/table/src/body.js +12 -4
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/table.js +155 -70
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +1 -1
- package/lib/table/src/util.min.js +1 -1
- package/lib/v-x-e-table/src/conf.js +2 -1
- package/lib/v-x-e-table/src/conf.min.js +1 -1
- package/package.json +4 -4
- package/packages/edit/src/hook.ts +17 -26
- package/packages/export/src/hook.ts +5 -8
- package/packages/filter/src/hook.ts +1 -1
- package/packages/select/src/select.ts +1 -1
- package/packages/table/src/body.ts +9 -3
- package/packages/table/src/table.ts +138 -69
- package/packages/table/src/util.ts +1 -1
- package/packages/v-x-e-table/src/conf.ts +2 -1
- package/packages/validator/src/hook.ts +1 -1
- package/types/column.d.ts +1 -0
- package/types/table.d.ts +7 -3
|
@@ -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:
|
|
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 {
|
|
1143
|
+
const { afterTreeFullData } = internalData
|
|
1142
1144
|
const treeOpts = computeTreeOpts.value
|
|
1143
1145
|
if (treeConfig) {
|
|
1144
|
-
XEUtils.eachTree(
|
|
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 {
|
|
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 =
|
|
1197
|
+
let tableData: any[] = []
|
|
1198
|
+
let tableTree: any[] = []
|
|
1199
|
+
|
|
1200
|
+
// 处理列
|
|
1190
1201
|
if (!allRemoteFilter || !allRemoteSort) {
|
|
1191
|
-
const filterColumns:
|
|
1192
|
-
|
|
1193
|
-
|
|
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:
|
|
1198
|
-
filters.forEach((item
|
|
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
|
-
|
|
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
|
|
1240
|
+
const defaultFilterMethod = compConf ? compConf.defaultFilterMethod : null
|
|
1222
1241
|
const cellValue = getCellValue(row, column)
|
|
1223
1242
|
if (filterMethod) {
|
|
1224
|
-
return itemList.some((item
|
|
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
|
|
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
|
|
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 (
|
|
1241
|
-
|
|
1242
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
|
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, {
|
|
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.
|
|
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
|
|
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:
|
|
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
|
|
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 {
|
|
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(
|
|
3686
|
+
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), treeOpts)
|
|
3637
3687
|
}
|
|
3638
|
-
return
|
|
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
|
|
4454
|
-
const
|
|
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,
|
|
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(
|
|
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
|
|
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
|
|
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 () {
|
|
@@ -51,7 +51,7 @@ const GlobalConfig: VXETableGlobalConfig = {
|
|
|
51
51
|
// storage: false,
|
|
52
52
|
// checkMethod () {}
|
|
53
53
|
// },
|
|
54
|
-
// rowId: '
|
|
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
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
|
-
|
|
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;
|