UNPKG

vue-ant-patterns

Version:

vue-ant-patterns

272 lines (232 loc) 7.65 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.listToTreeDefault = exports.relationGetKeyName = exports.relationSetHandler = exports.relationHandler = exports.treeToList = exports.listToTree = exports.listToLevel2Tree = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _extend = require('extend'); var _extend2 = _interopRequireDefault(_extend); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var listToTreeDefaultOps = { // 关系 rel: ['id', 'parentId'], // 根条件 parent: function parent(item, ops) { var _ops$rel = (0, _slicedToArray3['default'])(ops.rel, 2), id = _ops$rel[0], parId = _ops$rel[1]; return relationHandler(parId, item) === null || relationHandler(parId, item) === 'null' || relationHandler(parId, item) === '-1'; }, // 子级条件 children: function children(item, parent, ops) { var _ops$rel2 = (0, _slicedToArray3['default'])(ops.rel, 2), id = _ops$rel2[0], parId = _ops$rel2[1]; return relationHandler(parId, item) === relationHandler(id, parent); } }; /* listToTree 用例 const menuList = listToTree(list, {}, { rel: ['id', 'parentId'], parent (item) { return item.parentId === null }, children (item, parent) { return item.parentId === parent.id; } }); console.log(JSON.stringify(menuList)); */ /** * 获取最后一个 key name */ function relationGetKeyName(property) { var l = property.length; if (Array.isArray(property) && l === 1) { return relationGetKeyName(property[0]); } if (Array.isArray(property) && l >= 1) { return relationGetKeyName(property[l - 1]); } return property; } /** * 获取某一属性值 * @param {String || Array } property 字符串, 数组, 多维数组, 多维数组为 keyPath * @param {Object} source */ function relationHandler(property, source) { if (!source) return null; if (Array.isArray(property) && property.length === 1) { return relationHandler(property[0], source); } if (Array.isArray(property) && property.length > 1) { var o = null; return property.reduce(function (o, it) { // if (o) { // return o[it]; // } else { // console.log(it, source); // return source[it]; // } o = o ? o[it] : source[it]; return o; }, o); } else { return source[property]; } } /** * 设置属性值 * @param {*} property 字符串, 数组, 多维数组 * @param {*} value * @param {*} source */ function relationSetHandler(property, value, source) { if (!property || value === undefined || !source) { return source; } if (Array.isArray(property)) { var tmp = (0, _extends3['default'])({}, source); property.reduce(function (o, k) { if (o[k] === undefined) { o[k] = {}; } if (k === property[property.length - 1]) { o[k] = value; } return o[k]; }, tmp); return tmp; } else { source[property] = value; } return source; } /** * list 转 tree 支持多根节点, 支传入匹配条件 * @param {*} list * @param {*} target * @param {*} ops */ function listToTree() { var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var ops = arguments[2]; if (ops === undefined) { return listToTreeDefault(list); } ops = ops || {}; var cloneList = (0, _extend2['default'])(true, [], list); var cloneOps = (0, _extend2['default'])(true, listToTreeDefaultOps, ops); var rel = cloneOps.rel, parent = cloneOps.parent, sC = cloneOps.children; var _rel = (0, _slicedToArray3['default'])(rel, 2), opsId = _rel[0], opsParentId = _rel[1]; var toTree = function toTree() { var vList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var vTarget = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _ref = vTarget || {}, children = _ref.children; return vList.reduce(function (m, it) { /** * 通过 id parentId 关系, 判断是否有子节点 */ var isChildren = cloneList.filter(function (t) { // 两个节点都是根 if (parent(t, cloneOps) && parent(it, cloneOps)) return false; return relationHandler(opsParentId, t) === relationHandler(opsId, it); }); if (isChildren && isChildren.length) { it.children = []; toTree(isChildren, it); } // 是否根 if (parent(it, cloneOps)) { m.push(it); } else { if (sC(it, vTarget, cloneOps) && vTarget) { m.push(it); } } return m; }, children || []); }; return toTree(cloneList, target); } function listToLevel2Tree() { var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var ops = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : listToTreeDefaultOps; var cloneList = (0, _extend2['default'])(true, [], list); var cloneOps = (0, _extend2['default'])(true, {}, listToTreeDefaultOps, ops); var rel = cloneOps.rel, parent = cloneOps.parent, children = cloneOps.children; var _rel2 = (0, _slicedToArray3['default'])(rel, 2), id = _rel2[0], parentId = _rel2[1]; return cloneList.reduce(function (m, it, idx, raw) { var nIt = (0, _extends3['default'])({}, it); if (raw.find(function (subIt) { return relationHandler(parentId, subIt) === relationHandler(id, nIt); }) && parent(nIt, cloneOps)) { nIt.children = []; nIt.children = raw.map(function (item) { if (relationHandler(parentId, item) === relationHandler(id, it)) { return item; } }).filter(function (T) { return T; }); } else { nIt.children = null; } if (parent(nIt, cloneOps)) { m.push(nIt); } return m; }, []); } function treeToList() { var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var cloneList = (0, _extend2['default'])(true, [], list); cloneList.map(function (it) { target.push(it); if (it.children) { treeToList(it.children, target); } }); return target; } var listToTreeDefault = function listToTreeDefault(list) { var treeMenu = []; function toTree(list) { var tree = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var parentId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '-1'; list.map(function (item) { if (item.parentId === parentId) { var child = (0, _extends3['default'])({}, item, { children: [] }); toTree(list, child.children, item.id); if (child.children.length <= 0) { delete child.children; } tree.push(child); } }); } toTree(list, treeMenu); return treeMenu; }; exports.listToLevel2Tree = listToLevel2Tree; exports.listToTree = listToTree; exports.treeToList = treeToList; exports.relationHandler = relationHandler; exports.relationSetHandler = relationSetHandler; exports.relationGetKeyName = relationGetKeyName; exports.listToTreeDefault = listToTreeDefault; exports['default'] = listToTree;