@bj-ui/bj-authorization
Version:
星云系统登录通用模块
106 lines (103 loc) • 2.66 kB
JavaScript
import _ from "lodash";
/**
*
* @description 根据key值,查询当前节点数据
* @author 翟磊
* @date 2020-03-06
* @param {string} key - 目标值
* @param {string} keyName - key名称
* @param {[tree]} data - 树形数据
* @return {string | number} 函数返回值:父节点
*
* */
export function getNodeByKey(key, keyName, data) {
let node;
try {
getData(data);
function getData(data) {
data.forEach((v, i) => {
if (key == v[keyName]) {
node = v;
throw v;
}
if (v.childs && Array.isArray(v.childs)) {
getData(v.childs);
}
});
}
} catch (e) {
return e;
} finally {
!node && console.warn("查无此节点,请检查key值是否正确");
}
}
/**
*
* @description 扁平化tree数据
* @author 翟磊
* @date 2020-03-06
* @param {string} keyName - key名称
* @param {[tree]} data - 树形数据
* @return {[string]} 函数返回值:[一维集合]
*
* */
export function flatTreeData(data) {
let keys = [];
try {
getKey(data);
function getKey(data) {
data.length > 0 &&
data.forEach((v) => {
keys.push(v);
if (v.childs && Array.isArray(v.childs)) {
getKey(v.childs);
}
});
}
throw keys;
} catch (keys) {
return keys;
}
}
/**
*
* @description 根据树中某一节点的key获取该节点所在路径中所有节点结合(最顶层父节点 ==> 当前节点)
* @author 翟磊
* @date 2020-03-06
* @param {string} key - 目标值
* @param {string} keyName - key名称
* @param {[tree]} data - 树形数据
* @return {[json]} 函数返回值:[节点集合]
*
* */
export function getPathByKey(key, keyName, data, hasChild = false) {
let tempPathKeys = [];
try {
function getNodePath(node) {
tempPathKeys.push(node);
if (node[keyName] === key) {
if (hasChild === true && node.childs && Array.isArray(node.childs)) {
let cAllKeys = flatTreeData(node.childs);
tempPathKeys = [...tempPathKeys, ...cAllKeys];
} else {
tempPathKeys = tempPathKeys;
}
throw tempPathKeys;
}
if (node.childs && node.childs.length > 0) {
for (var i = 0; i < node.childs.length; i++) {
getNodePath(node.childs[i]);
}
tempPathKeys.pop();
} else {
tempPathKeys.pop();
}
}
for (let i = 0; i < data.length; i++) {
getNodePath(data[i]);
}
throw [];
} catch (e) {
return e;
}
}