UNPKG

@opensig/opendesign

Version:

<p align="center"><img src="../docs/public/opendesign-logo-light.png"/></p> <h1 align="center">opendesign</h1> <p align="center">一个 Vue 3 组件库</p> <p align="center"><b>皮肤可定制,使用 TypeScript</b></p>

120 lines (119 loc) 3.29 kB
"use strict"; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); const is = require("../_utils/is.js"); const DFS = (options, parentNode, depth) => { for (let i = 0, len = options.length; i < len; i++) { const item = options[i]; let node = { value: item.value, label: item.label, parent: parentNode, depth: depth + 1, children: [], isLeaf: true }; parentNode.children.push(node); if (item.children && item.children.length) { node.isLeaf = false; DFS(item.children, node, depth + 1); } } }; class CascaderTree { constructor() { __publicField(this, "root"); this.root = { value: NaN, label: "", depth: 0, parent: null, children: [], isLeaf: true }; } updateTree(options) { this.root = { value: NaN, label: "", depth: 0, parent: null, children: [], isLeaf: true }; DFS(options, this.root, 0); } getNode(node, val) { if (node.value === val) { return node; } const children = node.children; for (let i = 0, len = children.length; i < len; i++) { const rlt = this.getNode(children[i], val); if (rlt) { return rlt; } } } getChild(node, val) { const children = node.children; return children.find((item) => item.value === val); } getPanelInfo(val) { let rlt = []; if (is.isUndefined(val)) { return rlt; } if (!is.isArray(val)) { let node = this.getNode(this.root, val); if (is.isUndefined(node) || !node.isLeaf) { const columnInfo = this.getNextColumnInfo(this.root); if (!is.isUndefined(columnInfo)) { rlt = [columnInfo]; } } else { while (node.parent) { const columnInfo = this.getNextColumnInfo(node.parent, node.value); if (!is.isUndefined(columnInfo)) { rlt.unshift(columnInfo); } node = node.parent; } } } else { let parent = this.root; for (let i = 0, len = val.length; i < len; i++) { const child = this.getChild(parent, val[i]); if (is.isUndefined(child) || !child.isLeaf && child.depth === len) { const columnInfo = this.getNextColumnInfo(this.root); if (!is.isUndefined(columnInfo)) { rlt = [columnInfo]; } break; } else { const columnInfo = this.getNextColumnInfo(parent, val[i]); rlt.push(columnInfo); parent = child; } } } return rlt; } getNextColumnInfo(node, activeVal) { return node.children.map((item) => { const rlt = { value: item.value, label: item.label, depth: item.depth, isActive: false, isLeaf: item.children && item.children.length ? false : true }; if (!is.isUndefined(activeVal)) { rlt.isActive = item.value === activeVal; } return rlt; }); } } module.exports = CascaderTree;