优化渲染
This commit is contained in:
@@ -442,11 +442,8 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
// 如果是树形表格
|
// 如果是树形表格
|
||||||
if (treeConfig && !scrollYLoad && !transform) {
|
if (isExpandTree) {
|
||||||
const rowChildren = row[childrenField]
|
rows.push(...renderRows(fixedType, rowChildren, tableColumn))
|
||||||
if (rowChildren && rowChildren.length && treeExpandedMaps[rowid]) {
|
|
||||||
rows.push(...renderRows(fixedType, rowChildren, tableColumn))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return rows
|
return rows
|
||||||
|
|||||||
@@ -446,9 +446,9 @@ export const Cell = {
|
|||||||
let isChecked = false
|
let isChecked = false
|
||||||
const isVisible = !visibleMethod || visibleMethod({ row })
|
const isVisible = !visibleMethod || visibleMethod({ row })
|
||||||
let isDisabled = !!checkMethod
|
let isDisabled = !!checkMethod
|
||||||
const rowid = getRowid($table, row)
|
|
||||||
let ons
|
let ons
|
||||||
if (!isHidden) {
|
if (!isHidden) {
|
||||||
|
const rowid = getRowid($table, row)
|
||||||
isChecked = !!selectCheckboxMaps[rowid]
|
isChecked = !!selectCheckboxMaps[rowid]
|
||||||
ons = {
|
ons = {
|
||||||
onClick (evnt: MouseEvent) {
|
onClick (evnt: MouseEvent) {
|
||||||
@@ -516,6 +516,7 @@ export const Cell = {
|
|||||||
let isDisabled = !!checkMethod
|
let isDisabled = !!checkMethod
|
||||||
let ons
|
let ons
|
||||||
if (!isHidden) {
|
if (!isHidden) {
|
||||||
|
const rowid = getRowid($table, row)
|
||||||
isChecked = XEUtils.get(row, checkField as string)
|
isChecked = XEUtils.get(row, checkField as string)
|
||||||
ons = {
|
ons = {
|
||||||
onClick (evnt: MouseEvent) {
|
onClick (evnt: MouseEvent) {
|
||||||
@@ -529,7 +530,7 @@ export const Cell = {
|
|||||||
isDisabled = !checkMethod({ row })
|
isDisabled = !checkMethod({ row })
|
||||||
}
|
}
|
||||||
if (treeConfig) {
|
if (treeConfig) {
|
||||||
isIndeterminate = !!treeIndeterminateMaps[getRowid($table, row)]
|
isIndeterminate = !!treeIndeterminateMaps[rowid]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const checkboxParams = { ...params, checked: isChecked, disabled: isDisabled, visible: isVisible, indeterminate: isIndeterminate }
|
const checkboxParams = { ...params, checked: isChecked, disabled: isDisabled, visible: isVisible, indeterminate: isIndeterminate }
|
||||||
|
|||||||
@@ -2048,16 +2048,16 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleAsyncTreeExpandChilds = (row: any): Promise<void> => {
|
const handleAsyncTreeExpandChilds = (row: any): Promise<void> => {
|
||||||
const { treeExpandedMaps, treeExpandLazyLoadedMaps } = reactData
|
|
||||||
const { fullAllDataRowIdData } = internalData
|
|
||||||
const treeOpts = computeTreeOpts.value
|
const treeOpts = computeTreeOpts.value
|
||||||
const checkboxOpts = computeCheckboxOpts.value
|
const checkboxOpts = computeCheckboxOpts.value
|
||||||
const { transform, loadMethod } = treeOpts
|
const { transform, loadMethod } = treeOpts
|
||||||
const { checkStrictly } = checkboxOpts
|
const { checkStrictly } = checkboxOpts
|
||||||
const rowid = getRowid($xetable, row)
|
|
||||||
const rest = fullAllDataRowIdData[rowid]
|
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
if (loadMethod) {
|
if (loadMethod) {
|
||||||
|
const { treeExpandLazyLoadedMaps } = reactData
|
||||||
|
const { fullAllDataRowIdData } = internalData
|
||||||
|
const rowid = getRowid($xetable, row)
|
||||||
|
const rest = fullAllDataRowIdData[rowid]
|
||||||
treeExpandLazyLoadedMaps[rowid] = row
|
treeExpandLazyLoadedMaps[rowid] = row
|
||||||
loadMethod({ $table: $xetable, row }).then((childRecords: any) => {
|
loadMethod({ $table: $xetable, row }).then((childRecords: any) => {
|
||||||
rest.treeLoaded = true
|
rest.treeLoaded = true
|
||||||
@@ -2069,6 +2069,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
if (childRecords) {
|
if (childRecords) {
|
||||||
return tableMethods.loadTreeChildren(row, childRecords).then(childRows => {
|
return tableMethods.loadTreeChildren(row, childRecords).then(childRows => {
|
||||||
|
const { treeExpandedMaps } = reactData
|
||||||
if (childRows.length && !treeExpandedMaps[rowid]) {
|
if (childRows.length && !treeExpandedMaps[rowid]) {
|
||||||
treeExpandedMaps[rowid] = row
|
treeExpandedMaps[rowid] = row
|
||||||
}
|
}
|
||||||
@@ -2084,6 +2085,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
|
const { treeExpandLazyLoadedMaps } = reactData
|
||||||
rest.treeLoaded = false
|
rest.treeLoaded = false
|
||||||
if (treeExpandLazyLoadedMaps[rowid]) {
|
if (treeExpandLazyLoadedMaps[rowid]) {
|
||||||
delete treeExpandLazyLoadedMaps[rowid]
|
delete treeExpandLazyLoadedMaps[rowid]
|
||||||
@@ -2111,21 +2113,23 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleAsyncRowExpand = (row: any): Promise<void> => {
|
const handleAsyncRowExpand = (row: any): Promise<void> => {
|
||||||
const { fullAllDataRowIdData } = internalData
|
|
||||||
const { rowExpandLazyLoadedMaps, rowExpandedMaps } = reactData
|
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
const expandOpts = computeExpandOpts.value
|
const expandOpts = computeExpandOpts.value
|
||||||
const { loadMethod } = expandOpts
|
const { loadMethod } = expandOpts
|
||||||
if (loadMethod) {
|
if (loadMethod) {
|
||||||
|
const { fullAllDataRowIdData } = internalData
|
||||||
|
const { rowExpandLazyLoadedMaps } = reactData
|
||||||
const rowid = getRowid($xetable, row)
|
const rowid = getRowid($xetable, row)
|
||||||
const rest = fullAllDataRowIdData[rowid]
|
const rest = fullAllDataRowIdData[rowid]
|
||||||
rowExpandLazyLoadedMaps[rowid] = row
|
rowExpandLazyLoadedMaps[rowid] = row
|
||||||
loadMethod({ $table: $xetable, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) }).then(() => {
|
loadMethod({ $table: $xetable, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) }).then(() => {
|
||||||
|
const { rowExpandedMaps } = reactData
|
||||||
rest.expandLoaded = true
|
rest.expandLoaded = true
|
||||||
rowExpandedMaps[rowid] = row
|
rowExpandedMaps[rowid] = row
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
rest.expandLoaded = false
|
rest.expandLoaded = false
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
|
const { rowExpandLazyLoadedMaps } = reactData
|
||||||
if (rowExpandLazyLoadedMaps[rowid]) {
|
if (rowExpandLazyLoadedMaps[rowid]) {
|
||||||
delete rowExpandLazyLoadedMaps[rowid]
|
delete rowExpandLazyLoadedMaps[rowid]
|
||||||
}
|
}
|
||||||
@@ -2547,6 +2551,7 @@ export default defineComponent({
|
|||||||
*/
|
*/
|
||||||
const handleBaseTreeExpand = (rows: any[], expanded: boolean) => {
|
const handleBaseTreeExpand = (rows: any[], expanded: boolean) => {
|
||||||
const { treeExpandedMaps, treeExpandLazyLoadedMaps, treeNodeColumn } = reactData
|
const { treeExpandedMaps, treeExpandLazyLoadedMaps, treeNodeColumn } = reactData
|
||||||
|
const treeTempExpandedMaps = { ...treeExpandedMaps }
|
||||||
const { fullAllDataRowIdData, tableFullData } = internalData
|
const { fullAllDataRowIdData, tableFullData } = internalData
|
||||||
const treeOpts = computeTreeOpts.value
|
const treeOpts = computeTreeOpts.value
|
||||||
const { reserve, lazy, accordion, toggleMethod } = treeOpts
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts
|
||||||
@@ -2563,8 +2568,8 @@ export default defineComponent({
|
|||||||
if (matchObj) {
|
if (matchObj) {
|
||||||
matchObj.items.forEach(item => {
|
matchObj.items.forEach(item => {
|
||||||
const rowid = getRowid($xetable, item)
|
const rowid = getRowid($xetable, item)
|
||||||
if (treeExpandedMaps[rowid]) {
|
if (treeTempExpandedMaps[rowid]) {
|
||||||
delete treeExpandedMaps[rowid]
|
delete treeTempExpandedMaps[rowid]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -2572,7 +2577,7 @@ export default defineComponent({
|
|||||||
if (expanded) {
|
if (expanded) {
|
||||||
validRows.forEach((row: any) => {
|
validRows.forEach((row: any) => {
|
||||||
const rowid = getRowid($xetable, row)
|
const rowid = getRowid($xetable, row)
|
||||||
if (!treeExpandedMaps[rowid]) {
|
if (!treeTempExpandedMaps[rowid]) {
|
||||||
const rest = fullAllDataRowIdData[rowid]
|
const rest = fullAllDataRowIdData[rowid]
|
||||||
const isLoad = lazy && row[hasChildField] && !rest.treeLoaded && !treeExpandLazyLoadedMaps[rowid]
|
const isLoad = lazy && row[hasChildField] && !rest.treeLoaded && !treeExpandLazyLoadedMaps[rowid]
|
||||||
// 是否使用懒加载
|
// 是否使用懒加载
|
||||||
@@ -2580,7 +2585,7 @@ export default defineComponent({
|
|||||||
result.push(handleAsyncTreeExpandChilds(row))
|
result.push(handleAsyncTreeExpandChilds(row))
|
||||||
} else {
|
} else {
|
||||||
if (row[childrenField] && row[childrenField].length) {
|
if (row[childrenField] && row[childrenField].length) {
|
||||||
treeExpandedMaps[rowid] = row
|
treeTempExpandedMaps[rowid] = row
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2588,14 +2593,15 @@ export default defineComponent({
|
|||||||
} else {
|
} else {
|
||||||
validRows.forEach(item => {
|
validRows.forEach(item => {
|
||||||
const rowid = getRowid($xetable, item)
|
const rowid = getRowid($xetable, item)
|
||||||
if (treeExpandedMaps[rowid]) {
|
if (treeTempExpandedMaps[rowid]) {
|
||||||
delete treeExpandedMaps[rowid]
|
delete treeTempExpandedMaps[rowid]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (reserve) {
|
if (reserve) {
|
||||||
validRows.forEach((row: any) => handleTreeExpandReserve(row, expanded))
|
validRows.forEach((row: any) => handleTreeExpandReserve(row, expanded))
|
||||||
}
|
}
|
||||||
|
reactData.treeExpandedMaps = treeTempExpandedMaps
|
||||||
return Promise.all(result).then(() => {
|
return Promise.all(result).then(() => {
|
||||||
return tableMethods.recalculate()
|
return tableMethods.recalculate()
|
||||||
})
|
})
|
||||||
@@ -3440,7 +3446,7 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
isIndeterminateByCheckboxRow (row) {
|
isIndeterminateByCheckboxRow (row) {
|
||||||
const { treeIndeterminateMaps } = reactData
|
const { treeIndeterminateMaps } = reactData
|
||||||
return treeIndeterminateMaps[getRowid($xetable, row)] && !tableMethods.isCheckedByCheckboxRow(row)
|
return !!treeIndeterminateMaps[getRowid($xetable, row)] && !tableMethods.isCheckedByCheckboxRow(row)
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* 多选,切换某一行的选中状态
|
* 多选,切换某一行的选中状态
|
||||||
@@ -3868,8 +3874,9 @@ export default defineComponent({
|
|||||||
* @param {Boolean} expanded 是否展开
|
* @param {Boolean} expanded 是否展开
|
||||||
*/
|
*/
|
||||||
setRowExpand (rows, expanded) {
|
setRowExpand (rows, expanded) {
|
||||||
let { rowExpandedMaps, rowExpandLazyLoadedMaps, expandColumn: column } = reactData
|
const { rowExpandedMaps, rowExpandLazyLoadedMaps, expandColumn: column } = reactData
|
||||||
const { fullAllDataRowIdData } = internalData
|
const { fullAllDataRowIdData } = internalData
|
||||||
|
let rExpandedMaps = { ...rowExpandedMaps }
|
||||||
const expandOpts = computeExpandOpts.value
|
const expandOpts = computeExpandOpts.value
|
||||||
const { reserve, lazy, accordion, toggleMethod } = expandOpts
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts
|
||||||
const lazyRests: any[] = []
|
const lazyRests: any[] = []
|
||||||
@@ -3881,28 +3888,28 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
if (accordion) {
|
if (accordion) {
|
||||||
// 只能同时展开一个
|
// 只能同时展开一个
|
||||||
rowExpandedMaps = {}
|
rExpandedMaps = {}
|
||||||
rows = rows.slice(rows.length - 1, rows.length)
|
rows = rows.slice(rows.length - 1, rows.length)
|
||||||
}
|
}
|
||||||
const validRows: any[] = toggleMethod ? rows.filter((row: any) => toggleMethod({ $table: $xetable, expanded, column, columnIndex, $columnIndex, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) })) : rows
|
const validRows: any[] = toggleMethod ? rows.filter((row: any) => toggleMethod({ $table: $xetable, expanded, column, columnIndex, $columnIndex, row, rowIndex: tableMethods.getRowIndex(row), $rowIndex: tableMethods.getVMRowIndex(row) })) : rows
|
||||||
if (expanded) {
|
if (expanded) {
|
||||||
validRows.forEach((row: any) => {
|
validRows.forEach((row: any) => {
|
||||||
const rowid = getRowid($xetable, row)
|
const rowid = getRowid($xetable, row)
|
||||||
if (!rowExpandedMaps[rowid]) {
|
if (!rExpandedMaps[rowid]) {
|
||||||
const rest = fullAllDataRowIdData[rowid]
|
const rest = fullAllDataRowIdData[rowid]
|
||||||
const isLoad = lazy && !rest.expandLoaded && !rowExpandLazyLoadedMaps[rowid]
|
const isLoad = lazy && !rest.expandLoaded && !rowExpandLazyLoadedMaps[rowid]
|
||||||
if (isLoad) {
|
if (isLoad) {
|
||||||
lazyRests.push(handleAsyncRowExpand(row))
|
lazyRests.push(handleAsyncRowExpand(row))
|
||||||
} else {
|
} else {
|
||||||
rowExpandedMaps[rowid] = row
|
rExpandedMaps[rowid] = row
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
validRows.forEach(item => {
|
validRows.forEach(item => {
|
||||||
const rowid = getRowid($xetable, item)
|
const rowid = getRowid($xetable, item)
|
||||||
if (rowExpandedMaps[rowid]) {
|
if (rExpandedMaps[rowid]) {
|
||||||
delete rowExpandedMaps[rowid]
|
delete rExpandedMaps[rowid]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -3910,7 +3917,7 @@ export default defineComponent({
|
|||||||
validRows.forEach((row: any) => handleRowExpandReserve(row, expanded))
|
validRows.forEach((row: any) => handleRowExpandReserve(row, expanded))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reactData.rowExpandedMaps = rowExpandedMaps
|
reactData.rowExpandedMaps = rExpandedMaps
|
||||||
return Promise.all(lazyRests).then(() => tableMethods.recalculate())
|
return Promise.all(lazyRests).then(() => tableMethods.recalculate())
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
|||||||
10
types/table.d.ts
vendored
10
types/table.d.ts
vendored
@@ -833,17 +833,17 @@ export interface TableReactData<D = VxeTableDataRow> {
|
|||||||
expandColumn: any
|
expandColumn: any
|
||||||
hasFixedColumn: boolean
|
hasFixedColumn: boolean
|
||||||
// 已展开的行
|
// 已展开的行
|
||||||
rowExpandedMaps: Record<string, D>
|
rowExpandedMaps: Record<string, D | null>
|
||||||
// 懒加载中的展开行
|
// 懒加载中的展开行
|
||||||
rowExpandLazyLoadedMaps: Record<string, D>
|
rowExpandLazyLoadedMaps: Record<string, D | null>
|
||||||
// 树节点列信息
|
// 树节点列信息
|
||||||
treeNodeColumn: any
|
treeNodeColumn: any
|
||||||
// 已展开树节点
|
// 已展开树节点
|
||||||
treeExpandedMaps: Record<string, D>
|
treeExpandedMaps: Record<string, D | null>
|
||||||
// 懒加载中的树节点的集合
|
// 懒加载中的树节点的集合
|
||||||
treeExpandLazyLoadedMaps: Record<string, D>
|
treeExpandLazyLoadedMaps: Record<string, D | null>
|
||||||
// 树节点不确定状态的集合
|
// 树节点不确定状态的集合
|
||||||
treeIndeterminateMaps: Record<string, D>
|
treeIndeterminateMaps: Record<string, D | null>
|
||||||
// 合并单元格的对象集
|
// 合并单元格的对象集
|
||||||
mergeList: VxeTableDefines.MergeItem<D>[]
|
mergeList: VxeTableDefines.MergeItem<D>[]
|
||||||
// 合并表尾数据的对象集
|
// 合并表尾数据的对象集
|
||||||
|
|||||||
Reference in New Issue
Block a user