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>

121 lines (120 loc) 3.28 kB
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); import { isUndefined, isArray } from "../_utils/is.mjs"; 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 (isUndefined(val)) { return rlt; } if (!isArray(val)) { let node = this.getNode(this.root, val); if (isUndefined(node) || !node.isLeaf) { const columnInfo = this.getNextColumnInfo(this.root); if (!isUndefined(columnInfo)) { rlt = [columnInfo]; } } else { while (node.parent) { const columnInfo = this.getNextColumnInfo(node.parent, node.value); if (!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 (isUndefined(child) || !child.isLeaf && child.depth === len) { const columnInfo = this.getNextColumnInfo(this.root); if (!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 (!isUndefined(activeVal)) { rlt.isActive = item.value === activeVal; } return rlt; }); } } export { CascaderTree as default };