fix(comp-tree): support comp-tree-foreach stop,add insertNodesByKey (#818)
Co-authored-by: git <lixiaokang215@163.com>
This commit is contained in:
parent
480cfb914e
commit
d97aa92741
|
|
@ -31,6 +31,7 @@ export interface TreeActionType {
|
||||||
getCheckedKeys: () => CheckKeys;
|
getCheckedKeys: () => CheckKeys;
|
||||||
filterByLevel: (level: number) => void;
|
filterByLevel: (level: number) => void;
|
||||||
insertNodeByKey: (opt: InsertNodeParams) => void;
|
insertNodeByKey: (opt: InsertNodeParams) => void;
|
||||||
|
insertNodesByKey: (opt: InsertNodeParams) => void;
|
||||||
deleteNodeByKey: (key: string) => void;
|
deleteNodeByKey: (key: string) => void;
|
||||||
updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void;
|
updateNodeByKey: (key: string, node: Omit<TreeDataItem, 'key'>) => void;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,11 +87,39 @@ export function useTree(
|
||||||
if (treeItem[keyField] === parentKey) {
|
if (treeItem[keyField] === parentKey) {
|
||||||
treeItem[childrenField] = treeItem[childrenField] || [];
|
treeItem[childrenField] = treeItem[childrenField] || [];
|
||||||
treeItem[childrenField][push](node);
|
treeItem[childrenField][push](node);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
treeDataRef.value = treeData;
|
treeDataRef.value = treeData;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 批量添加节点
|
||||||
|
*/
|
||||||
|
function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) {
|
||||||
|
const treeData: any = cloneDeep(unref(treeDataRef));
|
||||||
|
if (!list || list.length < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!parentKey) {
|
||||||
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
treeData[push](list[i]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const { key: keyField, children: childrenField } = unref(getReplaceFields);
|
||||||
|
if (!childrenField || !keyField) return;
|
||||||
|
|
||||||
|
forEach(treeData, (treeItem) => {
|
||||||
|
if (treeItem[keyField] === parentKey) {
|
||||||
|
treeItem[childrenField] = treeItem[childrenField] || [];
|
||||||
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
treeItem[childrenField][push](list[i]);
|
||||||
|
}
|
||||||
|
treeDataRef.value = treeData;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
// Delete node
|
// Delete node
|
||||||
function deleteNodeByKey(key: string, list?: TreeDataItem[]) {
|
function deleteNodeByKey(key: string, list?: TreeDataItem[]) {
|
||||||
if (!key) return;
|
if (!key) return;
|
||||||
|
|
@ -111,5 +139,12 @@ export function useTree(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { deleteNodeByKey, insertNodeByKey, filterByLevel, updateNodeByKey, getAllKeys };
|
return {
|
||||||
|
deleteNodeByKey,
|
||||||
|
insertNodeByKey,
|
||||||
|
insertNodesByKey,
|
||||||
|
filterByLevel,
|
||||||
|
updateNodeByKey,
|
||||||
|
getAllKeys,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,10 @@ export function forEach<T = any>(
|
||||||
const list: any[] = [...tree];
|
const list: any[] = [...tree];
|
||||||
const { children } = config;
|
const { children } = config;
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
func(list[i]);
|
//func 返回true就终止遍历,避免大量节点场景下无意义循环,引起浏览器卡顿
|
||||||
|
if (func(list[i])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]);
|
children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue