UNPKG

sard-uniapp

Version:

sard-uniapp 是一套基于 Uniapp + Vue3 框架开发的兼容多端的 UI 组件库

223 lines (158 loc) 9.97 kB
--- nav: 组件 title: Tree subtitle: 树形 group: 数据展示 version: 1.6+ --- ## 介绍 用于显示层次结构数据,可展开或折叠。 ## 引入 ```ts import Tree from 'sard-uniapp/components/tree/tree.vue' ``` ## 代码演示 ### 基础使用 通过 `data` 属性设置数据,通过 `node-keys` 属性告知如何从传入的数据中获取每个节点的数据。 @code('${DEMO_PATH}/tree/demo/Basic.vue') ### 手风琴 对于同一级的节点,每次只能展开一个。 @code('${DEMO_PATH}/tree/demo/Accordion.vue') ### 可选择的 设置 `selectable` 属性可以显示复选框让用户选择节点,还可以禁用节点的选择。 节点的 `key` 属性是非常重要的(可以自定义 `key` 的键名),必须保证节点的 `key` 在所有节点中的唯一性。 如果没有设置 `key`,则由程序生成一个全局唯一的标识作为 `key`。 @code('${DEMO_PATH}/tree/demo/Selectable.vue') ### 严格选择 在显示复选框的情况下,设置 `check-strictly` 属性来严格遵循父子不互相关联规则。 @code('${DEMO_PATH}/tree/demo/CheckStrictly.vue') ### 默认展开以及默认选中 树节点可以在初始化阶段被设置为展开和选中。 @code('${DEMO_PATH}/tree/demo/DefaultExpandedAndChecked.vue') ### 单一选择 设置 `single-selectable` 属性即可实现单选,选择后会触发 `select` 事件,可使用 `current` 属性设置当前选择的节点。 @code('${DEMO_PATH}/tree/demo/Single.vue') ### 仅选择叶子节点 设置 `leaf-only` 属性让其仅能选择叶子节点。 @code('${DEMO_PATH}/tree/demo/LeafOnly.vue') ### 可拖拽的 设置 `draggable` 属性使节点可拖拽,短按拖拽按钮便可进入拖拽状态; 单击拖拽按钮,还可以设置节点的层级。 @code('${DEMO_PATH}/tree/demo/Draggable.vue') ### 可编辑的 设置 `editable` 属性使节点可编辑(增删改),配合 `draggable` 属性便可以随意编辑树形数据。 @code('${DEMO_PATH}/tree/demo/Editable.vue') ### 树节点过滤 树节点是可以被过滤的。 调用 `filter` 方法来过滤树节点。方法的参数就是过滤关键字。 通过设置 `filter-method` 属性还可以实现自定义的过滤。 @code('${DEMO_PATH}/tree/demo/Filter.vue') ### 严格的树节点过滤 默认的过滤是宽松的,即匹配到一个节点后便停止后代节点的匹配,其后代节点都会被显示出来。 设置 `filter-mode="strict"` 进入严格模式,即所有节点都要进行匹配,只有匹配成功的节点才会显示出来。 @code('${DEMO_PATH}/tree/demo/StrictFilter.vue') ### 懒加载 <sup>1.24.7+</sup> 设置 `lazy` 属性标识为懒加载,设置 `load` 属性用于获取数据,会在点击节点时调用,当获取的数据为空时,会将点击的节点标识为叶子节点,并隐藏箭头按钮。当然,你也可以提前设置节点是否为叶子节点,以避免为叶子节点时渲染箭头按钮。 @code('${DEMO_PATH}/tree/demo/Lazy.vue') ## API ### TreeProps | 属性 | 描述 | 类型 | 默认值 | | ---------------------------------- | ----------------------------------------------- | ----------------------------------------------------------- | --------------- | | root-class | 组件根元素类名 | string | - | | root-style | 组件根元素样式 | StyleValue | - | | data | 树形数据 | TreeNode[] | - | | node-keys | 节点对象的键名 | TreeNodeKeys | defaultNodeKeys | | default-expand-all | 是否默认展开所有节点 | boolean | false | | default-expanded-keys | 默认展开的节点的 key | (string \| number)[] | - | | accordion | 是否每次只展示一个同级树节点 | boolean | false | | selectable | 节点是否可被选择(复选) | boolean | false | | check-strictly | 可选时是否严格遵循父子不关联的做法(复选) | boolean | false | | default-checked-keys | 默认勾选的节点的 key 的数组(复选) | (string \| number)[] | - | | single-selectable <sup>1.17+</sup> | 节点是否可被选择(单选) | boolean | false | | leaf-only <sup>1.17+</sup> | 是否只能选择叶子节点(单选) | boolean | false | | current (v-model) <sup>1.17+</sup> | 当前选择的节点的 key(单选) | string \| number | - | | draggable | 是否可以拖拽节点 | boolean | false | | editable | 是否可编辑节点(增删改) | boolean | false | | filter-mode | 节点过滤模式 | 'lenient' \| 'strict' | 'lenient' | | filter-method | 自定义过滤方法 | (value: string, node: TreeStateNode) => boolean | - | | lazy <sup>1.24.7+</sup> | 是否懒加载子节点,需与 load 方法结合使用 | boolean | false | | load <sup>1.24.7+</sup> | 加载子树数据的方法,仅当 lazy 属性为true 时生效 | (node?: TreeStateNode) => Promise<TreeNode[]> \| TreeNode[] | - | ### TreeEmits | 事件 | 描述 | 类型 | | ------------------------------- | ---------------------- | -------------------------------------------------------- | | update:current <sup>1.17+</sup> | 选择节点后触发(单选) | (key: string \| number, node: TreeStateNode) => void | | select <sup>1.17+</sup> | 选择节点后触发(单选) | (key: string \| number, node: TreeStateNode) => void | | check <sup>1.24+</sup> | 点击树节点复选框时触发 | (event: {checked: boolean; node: TreeStateNode}) => void | | node-click <sup>1.24.1+</sup> | 点击树节点时触发 | (event: {event: any; node: TreeStateNode}) => void | ### TreeExpose | 属性 | 描述 | 类型 | | ------------------ | ---------------------- | -------------------------------------------------- | | getCheckedKeys | 获取所有选中节点的 key | () => (string \| number)[] | | getHalfCheckedKeys | 获取所有半选节点的 key | () => (string \| number)[] | | setCheckedKeys | 设置指定节点为选中状态 | (keys: (string \| number)[]) => void | | setChecked | 设置节点是否选中 | (key: string \| number, checked: boolean) => void | | setExpandedKeys | 设置指定节点为展开状态 | (keys: (string \| number)[]) => void | | setExpanded | 设置节点是否展开 | (key: string \| number, expanded: boolean) => void | | toggleExpanded | 切换节点展开状态 | (key: string \| number) => void | | addRootNode | 添加根节点 | () => void | | getCleanTreeData | 获取干净的当前树形数据 | () => TreeCleanNode[] | | filter | 过滤树节点 | (searchString: string) => void | ### TreeNode ```ts interface TreeNode { title?: string | number key?: any children?: TreeNode[] disabled?: boolean isLeaf?: boolean [prop: string]: any } ``` ### TreeCleanNode ```ts interface TreeCleanNode { title: string | number key: string | number children?: TreeCleanNode[] } ``` ### TreeStateNode ```ts export interface TreeStateNode { title: string | number key: string | number expanded: boolean checked: boolean children?: TreeStateNode[] parent: TreeStateNode | null indeterminate: boolean level: number offsetLevel: number visible: boolean disabled: boolean isLeaf: boolean loadStatus: 'idle' | 'loading' | 'loaded' depth: number } ``` ### TreeNodeKeys ```ts interface TreeNodeKeys { title?: string key?: string children?: string isLeaf?: string } ``` ### defaultNodeKeys ```ts const defaultNodeKeys = { title: 'title', key: 'key', children: 'children', isLeaf: 'isLeaf', } ``` ## 主题定制 ### CSS 变量 @code('./variables.scss#variables')