UNPKG

@mdsfe/mds-ui

Version:

A set of enterprise-class Vue UI components.

454 lines (389 loc) 11.8 kB
'use strict'; exports.__esModule = true; var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _map = require('babel-runtime/core-js/map'); var _map2 = _interopRequireDefault(_map); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _node = require('./node'); var _node2 = _interopRequireDefault(_node); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Tree = function () { function Tree(options) { var _this = this; (0, _classCallCheck3.default)(this, Tree); for (var name in options) { if (options.hasOwnProperty(name)) { this[name] = options[name]; } } if (!this.prop || (0, _typeof3.default)(this.prop) !== 'object') { this.prop = { label: 'label', key: 'key', isLeaf: 'isLeaf', disabled: 'disabled', children: 'children' }; } this.nodesMap = new _map2.default(); this.root = new _node2.default({ data: this.data, tree: this }); // 根据load函数渲染根节点 if (this.load) { this.load(this.root, function (arr) { if (!Array.isArray(arr)) { throw new Error('传入子元素必须是数组'); } arr.forEach(function (item) { _this.root.appendChild(item); }); }); } } Tree.prototype.setData = function setData(newVal) { var dataChange = newVal !== this.root.data; if (dataChange) { this.nodesMap = new _map2.default(); this.root = new _node2.default({ data: newVal, tree: this }); } }; Tree.prototype.handleSelectedChange = function handleSelectedChange(key) { var selectedNode = this.nodesMap.get(key); if (!selectedNode.selected) { this.nodesMap.forEach(function (node, nodeKey) { node.selected = false; if (nodeKey === key) { node.selected = true; } }); this.$tree.$emit('node-selected-change', selectedNode.data, selectedNode, selectedNode.getPath(), selectedNode.getPath(true)); } }; Tree.prototype.handleDefaultCheckedKeys = function handleDefaultCheckedKeys() { var _this2 = this; // 处理defaultCheckedKeys if (this.defaultCheckedKeys) { this.defaultCheckedKeys.forEach(function (item) { _this2.nodesMap.get(item).check = true; }); } }; Tree.prototype.search = function search(value) { var _this3 = this; var recursionChildren = function recursionChildren(node) { var childNodes = node.root ? node.root.childNodes : node.childNodes; childNodes.forEach(function (item) { item.searchWords = null; item.visible = _this3.searchNodeMethod.call(item, value, item.data, item); if (item.visible) { item.searchWords = value; } recursionChildren(item); }); // 子节点有匹配项的情况父节点需要显示 if (!node.visible && childNodes.length) { var hiddenAllChildren = void 0; hiddenAllChildren = !childNodes.some(function (child) { return child.visible; }); if (!node.root) { node.visible = !hiddenAllChildren; } else { node.root.visible = false; } } // 节点显示的情况下展开所有子节点 if (node.visible && !node.isLeaf && !_this3.load && value) { node.changeExpanded(true); } }; recursionChildren(this); }; Tree.prototype.getCheckedNodes = function getCheckedNodes(leafOnly) { var result = []; if (leafOnly) { this.nodesMap.forEach(function (item) { if (item.checked && !item.data.children) { result.push(item.data); } }); } else { this.nodesMap.forEach(function (item) { if (item.checked) { result.push(item.data); } }); } return result; }; Tree.prototype.getCheckedKeys = function getCheckedKeys(leafOnly) { var result = []; if (leafOnly) { this.nodesMap.forEach(function (item) { if (item.checked && !item.data.children) { result.push(item.key); } }); } else { this.nodesMap.forEach(function (item) { if (item.checked) { result.push(item.key); } }); } return result; }; Tree.prototype.setCheckedKeys = function setCheckedKeys(checkArr) { var _this4 = this; if (!Array.isArray(checkArr)) { throw new Error('需要输入一个key数组'); } var exec = function exec() { _this4.nodesMap.forEach(function (item) { item.check = false; }); checkArr.forEach(function (item) { _this4.nodesMap.get(item).check = true; }); }; window.requestAnimationFrame(exec); }; Tree.prototype.setChecked = function setChecked(key, checkState) { var _this5 = this; // 分{key, check}数组和单独传入key两种形式 var is = function is(val, type) { var res = Object.prototype.toString.call(val); return res.includes(type); }; var checkNode = function checkNode(_key, _checkState) { var node = _this5.nodesMap.get(_key); if (!node) { throw new Error('请输入正确的key'); } node.check = _checkState; }; if (is(key, 'String') && is(checkState, 'Boolean')) { checkNode(key, checkState); return; } if (is(key, 'Array') && !checkState) { var exec = function exec() { key.forEach(function (_ref) { var key = _ref.key, check = _ref.check; checkNode(key, check); }); }; window.requestAnimationFrame(exec); } }; Tree.prototype.getHalfCheckedNodes = function getHalfCheckedNodes() { var result = []; this.nodesMap.forEach(function (item) { if (item.indeterminate) { result.push(item.data); } }); return result; }; Tree.prototype.getHalfCheckedKeys = function getHalfCheckedKeys() { var result = []; this.nodesMap.forEach(function (item) { if (item.indeterminate) { result.push(item.data.key); } }); return result; }; Tree.prototype.getCurrentKey = function getCurrentKey() { for (var _iterator = this.nodesMap.values(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { var _ref2; if (_isArray) { if (_i >= _iterator.length) break; _ref2 = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref2 = _i.value; } var item = _ref2; if (item.selected) { return item.data.key; } } return null; }; Tree.prototype.getCurrentNode = function getCurrentNode() { for (var _iterator2 = this.nodesMap.values(), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { var _ref3; if (_isArray2) { if (_i2 >= _iterator2.length) break; _ref3 = _iterator2[_i2++]; } else { _i2 = _iterator2.next(); if (_i2.done) break; _ref3 = _i2.value; } var item = _ref3; if (item.selected) { return item.data; } } return null; }; Tree.prototype.setCurrentKey = function setCurrentKey(key) { if (key) { this.handleSelectedChange(key); } else { this.nodesMap.forEach(function (node) { node.selected = false; }); } }; Tree.prototype.getNode = function getNode(key) { var node = this.nodesMap.get(key); if (node) { return node; } return null; }; Tree.prototype.getCheckNode = function getCheckNode(nodeFlag) { var arr = []; this.nodesMap.forEach(function (item) { if (item.checked) { nodeFlag ? arr.push(item) : arr.push(item.data); } }); return arr; }; Tree.prototype.getCheckNodeKey = function getCheckNodeKey() { var arr = []; this.getCheckNode(true).forEach(function (node) { arr.push(node.key); }); return arr; }; Tree.prototype.getIndeterminateNode = function getIndeterminateNode(nodeFlag) { var arr = []; this.nodesMap.forEach(function (item) { if (item.indeterminate) { nodeFlag ? arr.push(item) : arr.push(item.data); } }); return arr; }; Tree.prototype.getIndeterminateNodeKey = function getIndeterminateNodeKey() { var arr = []; this.getIndeterminateNode(true).forEach(function (node) { arr.push(node.key); }); return arr; }; Tree.prototype.setCheckNode = function setCheckNode(keys) { var bor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var nodesMap = this.nodesMap; if (Array.isArray(keys)) { keys.forEach(function (item) { var node = nodesMap.get(item); if (node) node.check = bor; }); } else { var node = nodesMap.get(keys); if (node) nodesMap.get(keys).check = bor; } }; Tree.prototype.getCheckNodeTree = function getCheckNodeTree() { var _this6 = this; var root = this.root; if (Array.isArray(root.data)) { var newTree = []; root.indeterminateChildNodes.forEach(function (item) { newTree.push(copyNode(item, _this6)); }); return newTree; } else { return copyNode(root, this); } }; Tree.prototype.appendNodes = function appendNodes(key, nodes) { var parent = this.nodesMap.get(key); if (!parent) { return; } if (Array.isArray(nodes)) { if ((typeof nodes === 'undefined' ? 'undefined' : (0, _typeof3.default)(nodes)) === 'object') { nodes.forEach(function (item) { parent.appendChild(item); }); } } else if ((typeof nodes === 'undefined' ? 'undefined' : (0, _typeof3.default)(nodes)) === 'object') { parent.appendChild(nodes); } }; Tree.prototype.deleteNodeByKey = function deleteNodeByKey(keys) { var _this7 = this; if (Array.isArray(keys)) { keys.forEach(function (item) { var node = _this7.nodesMap.get(item); if (node) node.remove(); }); } else { var node = this.nodesMap.get(keys); node.remove(); } }; Tree.prototype.clearCheckNode = function clearCheckNode() { this.nodesMap.forEach(function (item) { item.checked = false; item.indeterminate = false; }); }; return Tree; }(); exports.default = Tree; var copyData = function copyData(data, tree) { var newData = {}; for (var key in data) { if (data.hasOwnProperty(key) && key !== tree.prop.children) { newData[key] = data[key]; } } return newData; }; var copyNode = function copyNode(node, tree) { var newData = copyData(node.data, tree); if (node.isLeaf) { return newData; } newData[tree.prop.children] = []; node.indeterminateChildNodes.forEach(function (item) { newData[tree.prop.children].push(copyNode(item, tree)); }); return newData; }; // const deepCopy = function(o) { // if (o instanceof Array) { // let n = [] // for (let i = 0; i < o.length; ++i) { // n[i] = deepCopy(o[i]) // } // return n // } else if (o instanceof Object) { // let n = {} // for (let i in o) { // n[i] = deepCopy(o[i]) // } // return n // } else { // return o // } // }