UNPKG

vue-ant-patterns

Version:

vue-ant-patterns

259 lines (231 loc) 7.25 kB
import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray'; /* * @Author: w.pengfei * @Date: 2020-09-06 12:03:59 * @LastEditTime: 2020-09-11 14:08:56 * @Description: '' * @LastEditors: w.pengfei */ import extend from 'extend'; import { listToTree, treeToList, isEmptyObj, relationHandler, relationSetHandler } from '../../es/_utils'; export default { name: 'tree-action', methods: { /** * 只能在原有数据基础上替换 * TODO: 后续在改进 * 在排序时会用到 */ setListSource: function setListSource(list) { this.listData = list; }, // setTreeSource(source) { // this.listData = treeToList(source); // }, /** * 添加节点 * 节点的 parentHid 已经缓存, 则直接把节点 push 进原有的 lisi 中 * 否则通过 getCategoryItemChildren 加载 parentHid 对应的节点子节点数据 */ addDataToTree: function addDataToTree(data) { var _this = this; var rel = this.$props.rel; var vLoadData = this.vLoadData; var loadedCache = this.$options.loadedCache; /** * rel[1] 为取父节点 hid */ var key = relationHandler(rel[1], data); var transData = this.setTreeItemData(data); /** * 已经加载过子节点 */ if (loadedCache[key]) { var isFind = this.listData.find(function (it) { var rKey = relationHandler(rel[0], it); var pKey = relationHandler(rel[0], data); return rKey === pKey; }); /** * 未找到对应的节点 */ if (!isFind) { this.listData.push(transData); } /** * 展开节点的父级 */ this.vOpenKeys = [].concat(_toConsumableArray(new Set([].concat(_toConsumableArray(this.vOpenKeys), [key])))); } else { /** * t 为 treeNode */ var t = this.$refs.swTree.$refs.insRef.$refs.tree.domTreeNodes; /** * 父级节点存在于树中 */ if (t && t[key]) { /** * 父节点在树中, 已经展开, 或者非异步加载直接追加数据 * */ if (this.vOpenKeys.includes(key) || !vLoadData) { /** * TODO: 后续完善 * 这里需要对缓存做处理 */ this.listData.push(transData); this.upNodeLeaf(transData); return; } /** * 否则利用 open 展开, 同时自动加载数据 */ // this.vOpenKeys = [...new Set([...this.vOpenKeys, key])]; this.getCategoryItemChildren(t[key]).then(function (res) { _this.upNodeLeaf(transData); }); } else { /** * 父级节点还不存在树中 * 需要通过传入的这个节点向上查找 */ var _key = relationHandler(rel[0], data); this.searchSelect(_key, data); } } /** * 更新父级 +- */ // this.upNodeLeaf(transData); }, updateItem: function updateItem(nodeData) { var listData = this.listData; var idx = this.getItemIndex(nodeData); if (typeof idx === 'number' && idx !== null) { var nData = extend(true, {}, listData[idx], { data: nodeData }); // 数据需要转换 var transData = this.setTreeItemData(nData); this.listData.splice(idx, 1, transData); } }, deleteNode: function deleteNode(data) { var rel = this.$props.rel; var listData = this.listData; var idx = this.getItemIndex(data); if (typeof idx === 'number') { /** * 删除子节点, 还需要处理下父节点 loadable * loadable 用于判断是否叶子节点, false 为 叶子 */ var node = listData[idx]; var parentNode = listData.find(function (it) { return relationHandler(rel[0], it) === relationHandler(rel[1], node); }); this.listData.splice(idx, 1); this.upNodeLeaf(node); /** * 缓存删除 */ this.deleteCache(parentNode); } this.deleteCache(data); }, upNodeLeaf: function upNodeLeaf(node) { var rel = this.$props.rel; var listData = this.listData; var hid = relationHandler(rel[0], node); var pHid = relationHandler(rel[1], node); var idx = void 0; var parent = listData.find(function (it, i) { if (relationHandler(rel[0], it) === pHid) { idx = i; return true; } }); var chd = listData.map(function (it) { return relationHandler(rel[1], it) === pHid ? it : null; }).filter(function (T) { return T; }); if (parent && chd && chd.length) { parent.data.loadable = true; parent.isLeaf = false; } else { parent.data.loadable = false; parent.isLeaf = true; } if (idx && parent) { this.listData.splice(idx, 1, parent); } }, // updateParentProperty(node, property, value) { // /** // * 找到要处理的节点 // */ // // let node = this.listData[idx]; // /** // * 找到父级 // */ // let parentNode = this.listData.find(it => { // return relationHandler(rel[0], it) === relationHandler(rel[1], node); // }); // if (parentNode) { // const chd = this.listData.map(it => { // return relationHandler(rel[0], it) === relationHandler(rel[1], node); // }); // /** // * 找到父级下的所有子级 // */ // if (!chd || !chd.length) { // /** // * 没子级了, 父级设为 叶子 // */ // parentNode.data[property] = value; // } // this.updateItem(parentNode); // } // }, deleteCache: function deleteCache(data) { var rel = this.$props.rel; var _$options = this.$options, loadedCache = _$options.loadedCache, noResponseData = _$options.noResponseData; var key = typeof data === 'string' ? data : relationHandler(rel[0], data); delete noResponseData[key]; delete loadedCache[key]; this.$options.noResponseData = noResponseData; this.$options.loadedCache = loadedCache; }, addCache: function addCache() {}, /** * 获取匹配节点的索引, 多数用于替换 删除时 */ getItemIndex: function getItemIndex(data) { var rel = this.$props.rel; var listData = this.listData; var idx = void 0; var id = data; var item = void 0; if (typeof data !== 'string') { id = relationHandler(rel[0], data); } item = listData.find(function (it, i) { if (relationHandler(rel[0], it) === id) { idx = i; return true; } }); if (item && idx !== undefined) { return idx; } return null; }, /** * 不知道外部用没用到 */ addItemData: function addItemData(data) { this.listData.push(data); } } };