|
|
|
@ -1,5 +1,7 @@ |
|
|
|
//树对象相关操作 目前只支持单主键操作
|
|
|
|
|
|
|
|
const { deepCopy } = require("./proFunc"); |
|
|
|
|
|
|
|
//将list数据,生成tree
|
|
|
|
// dataSource:列表数据资源
|
|
|
|
// childNodeName:子节点名称
|
|
|
|
@ -32,32 +34,32 @@ function madeTree(dataSource, childNodeName, pidName, idName, pidVal) { |
|
|
|
} |
|
|
|
}) |
|
|
|
return trees; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//通过ID值,找出所有父节点值
|
|
|
|
function getTreePids(tree, childNodeName, pidName, idName, idVal) { |
|
|
|
let pids = [],treeNode = null; |
|
|
|
//通过ID值,找出所有父节点值
|
|
|
|
function getTreePids(tree, childNodeName, pidName, idName, idVal) { |
|
|
|
let pids = [], treeNode = null; |
|
|
|
if (!tree || tree.length < 1) return []; |
|
|
|
if (!idVal) return []; |
|
|
|
let lchildNodeName = childNodeName || 'children'; |
|
|
|
let lpidName = pidName || 'pid'; |
|
|
|
let lidName = idName || 'id'; |
|
|
|
|
|
|
|
treeNode = getTreeNode(tree,lchildNodeName,lidName, idVal); |
|
|
|
treeNode = getTreeNode(tree, lchildNodeName, lidName, idVal); |
|
|
|
//console.log('treeNode',treeNode);
|
|
|
|
if(treeNode){ |
|
|
|
if (treeNode) { |
|
|
|
pids.push(treeNode[lpidName]); |
|
|
|
getTreePids(tree, lchildNodeName, lpidName, lidName, treeNode[lpidName]).forEach(e =>{ |
|
|
|
getTreePids(tree, lchildNodeName, lpidName, lidName, treeNode[lpidName]).forEach(e => { |
|
|
|
pids.unshift(e); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
return pids; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//通过node值,找出所有子节点值
|
|
|
|
function getTreeAllChildIdsByNode(treeNode, childNodeName, idName) { |
|
|
|
//通过node值,找出所有子节点值
|
|
|
|
function getTreeAllChildIdsByNode(treeNode, childNodeName, idName) { |
|
|
|
let childIds = []; |
|
|
|
let lchildNodeName = childNodeName || 'children'; |
|
|
|
let lidName = idName || 'id'; |
|
|
|
@ -67,15 +69,15 @@ function madeTree(dataSource, childNodeName, pidName, idName, pidVal) { |
|
|
|
|
|
|
|
treeNode[lchildNodeName].forEach(e => { |
|
|
|
childIds.push(e[lidName]); |
|
|
|
getTreeAllChildIdsByNode(e, lchildNodeName, lidName).forEach(e2 =>{ |
|
|
|
getTreeAllChildIdsByNode(e, lchildNodeName, lidName).forEach(e2 => { |
|
|
|
childIds.push(e2); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return childIds; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//通过ID值,找出所有子节点值
|
|
|
|
function getTreeAllChildIdsById(tree, childNodeName, idName, idVal) { |
|
|
|
//通过ID值,找出所有子节点值
|
|
|
|
function getTreeAllChildIdsById(tree, childNodeName, idName, idVal) { |
|
|
|
let childIds = [], treeNode = null; |
|
|
|
let lchildNodeName = childNodeName || 'children'; |
|
|
|
let lidName = idName || 'id'; |
|
|
|
@ -85,10 +87,10 @@ function madeTree(dataSource, childNodeName, pidName, idName, pidVal) { |
|
|
|
childIds = getTreeAllChildIdsByNode(treeNode, lchildNodeName, lidName); |
|
|
|
|
|
|
|
return childIds; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//获取节点本身
|
|
|
|
function getTreeNode(tree, childNodeName, idName, idVal) { |
|
|
|
//获取节点本身
|
|
|
|
function getTreeNode(tree, childNodeName, idName, idVal) { |
|
|
|
let treeNode = null; |
|
|
|
let lchildNodeName = childNodeName || 'children'; |
|
|
|
let lidName = idName || 'id'; |
|
|
|
@ -107,12 +109,37 @@ function madeTree(dataSource, childNodeName, pidName, idName, pidVal) { |
|
|
|
} |
|
|
|
} |
|
|
|
return treeNode; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 根节点找到,则包含子级点, 子节点找到,则只包含上级节点
|
|
|
|
function filterTreeNode(treeData, childNodeName, keys, vals) { |
|
|
|
let newTree = [] |
|
|
|
let find = false |
|
|
|
if (Array.isArray(treeData) && treeData.length > 0) { |
|
|
|
treeData.forEach(e => { |
|
|
|
find = false |
|
|
|
keys.forEach((key, i) => { |
|
|
|
if (e[key].indexOf(vals[i]) > -1) find = true |
|
|
|
}); |
|
|
|
|
|
|
|
module.exports = { |
|
|
|
madeTree, |
|
|
|
getTreePids, getTreeAllChildIdsByNode,getTreeAllChildIdsById, getTreeNode, |
|
|
|
// 当前级找到
|
|
|
|
if (find) { |
|
|
|
newTree.push(e) |
|
|
|
} else { |
|
|
|
let childTree = filterTreeNode(e[childNodeName], childNodeName, keys, vals) |
|
|
|
if (childTree.length > 0) { |
|
|
|
let temp = deepCopy(e) |
|
|
|
temp[childNodeName] = childTree |
|
|
|
newTree.push(temp) |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
return newTree |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = { |
|
|
|
madeTree, |
|
|
|
getTreePids, getTreeAllChildIdsByNode, getTreeAllChildIdsById, getTreeNode,filterTreeNode, |
|
|
|
} |
|
|
|
|