UNPKG

@bj-ui/bj-authorization

Version:

星云系统登录通用模块

106 lines (103 loc) 2.66 kB
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; } }