element3 icon indicating copy to clipboard operation
element3 copied to clipboard

refactor Tree component

Open Lydanne opened this issue 5 years ago • 0 comments

Target

  • 完全兼容旧的属性、事件、方法
  • 添加新的API功能
  • 更高的性能追求
  • 添加useTree的方法

Tasking

  • 实现树形结构化数据进行显示以及动态更新
    • [x] 基于v-model | v-model:data去展示树形结构的数据
    • [x] 基于empty-text实现,在data为空的时候的文本提示
    • [x] 基于node-key实现,标识每个TreeNode用来作为唯一标识的属性
    • [x] 基于indent实现,实现节点缩进px
  • 实现节点的多选操作
    • [x] 基于check-on-click-node实现,是否在点击节点的时候选中节点
    • [x] 基于v-model:checked | default-checked-keys实现, 默认勾选的节点的 key 的数组
    • [x] 基于show-checkbox实现,是否显示多选框
    • [x] 基于check-strictly实现,在显示复选框的情况下,是否严格的遵循父子不互相关联的做法
    • [x] 基于TreeNode.isDisabled实现,实现禁用选择
  • 实现展开折叠子元素
    • [x] 基于 treeNode.expand() 实现简单的展开闭合子节点
    • [x] 基于render-after-expand实现,是否在第一次展开TreeNode后渲染子组件
    • [x] 基于default-expand-all实现,是否默认展开所有节点
    • [x] 基于expand-on-click-node实现,是否在点击节点的时候展开或者收缩节点
    • [x] 基于auto-expand-parent实现,是否在展开子节点的时候展开父节点
    • [x] 基于v-model:expanded | default-expanded-keys实现默认展开的节点的key数组
  • 实现节点懒加载实现动态的加载显示
    • [x] 基于async | lazy实现,是否懒加载子节点
    • [x] 基于async-loader | load实现,异步加载子树数据的方法
  • 实现手风琴的显示效果
    • [x] 基于accordion实现,是否每次只打开一个同级树节点展开
  • 实现节点的禁用隐藏的状态描述
    • [x] 基于filter-node-method实现,对树节点进行筛选时执行的方法
  • 实现自定义节点内容
    • [x] 基于render-content实现,树节点的内容区的渲染 Function
    • [x] 基于icon-class实现,自定义树节点的图标
    • [x] 基于#default插槽实现内容自定义
  • 实现拖拽的功能改变节点的结构关系
    • [x] 基于draggable实现,是否开启拖拽节点功能
    • [x] 基于allow-drag实现,判断节点是否可以被拖拽
    • [x] 基于allow-drop,判断节点是否可以被放置
  • 实现为节点注入方法增删改查的功能
    • [x] 基于TreeNode方法appendChild(node) 实现,为当前节点添加子节点
    • [x] 基于TreeNode方法remove()实现, 删除当前节点
    • [x] 基于TreeNode方法insertChild(index, node)实现,为当前节点的插入一个子元素,到 index 位置
    • [x] 基于TreeNode方法removeChild(index)实现, 移除 index 位置的子元素
    • [x] 基于TreeNode方法setChecked(value)实现,设置元素为选中状态,strictly 表示是否只选中当前节点
    • [x] 基于TreeNode方法upwardEach(callback, opts)实现,从当前节点向上遍历树
    • [x] 基于TreeNode方法depthEach(upToDownCallBack, downToUpCallBack)实现,从 当前节点向下遍历
    • [x] 基于TreeNode方法findOne(target) 实现,查找当前当前子树的目标节点
    • [x] 基于TreeNode方法findMany(label)实现,通过 label 查找节点
    • [x] 基于TreeNode方法expand(value, ...extraNodes)实现,展开该节点,在展开的时候可以添加节点
    • [x] 基于TreeNode方法show | hide实现, 设置当前节点是否可见
    • [x] 基于TreeNode方法move(target, relative)实现,移动当前节点到目标节点的相对位置(上,内,下)
  • 实现对外提供的Tree方法和useTree方法
    • [x] 基于updateKeyChildren方法, 通过 keys 设置节点子元素,使用此方法必须设置 node-key 属性
    • [x] 基于getCheckedNodes方法,若节点可被选择(即 show-checkboxtrue),则返回目前被选中的节点所组成的数组
    • [x] 基于filter方法,对树节点进行筛选操作
    • [x] 基于getCheckedNodes方法,若节点可被选择(即 show-checkboxtrue),则返回目前被选中的节点所组成的数组
    • [x] 基于setCheckedKeys方法,设置目前勾选的节点,使用此方法必须设置 node-key 属性
    • [x] 基于getCheckedKeys方法, 若节点可被选择(即 show-checkboxtrue),则返回目前被选中的节点的 key 所组成的数组
    • [x] 基于setChecked方法,通过 key / data 设置某个节点的勾选状态,使用此方法必须设置 node-key 属性
    • [x] 基于getHalfCheckedNodes方法,若节点可被选择(即 show-checkboxtrue),则返回目前半选中的节点所组成的数组
    • [x] 基于getHalfCheckedKeys方法, 若节点可被选择(即 show-checkboxtrue),则返回目前半选中的节点的 key 所组成的数组
    • [x] 基于getCurrentKey方法,获取当前被选中节点的 key,使用此方法必须设置 node-key 属性,若没有节点被选中则返回 null
    • [x] 基于getCurrentNode方法,获取当前被选中节点的 data,若没有节点被选中则返回 null
    • [x] 基于setCurrentKey方法,通过 key 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性
    • [x] 基于setCurrentNode方法, 通过 node 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性
    • [x] 基于getNode方法,根据 data 或者 key 拿到 Tree 组件中的 node
    • [x] 基于remove方法,删除 Tree 中的一个节点,使用此方法必须设置 node-key 属性
    • [x] 基于append方法, 为 Tree 中的一个节点追加一个子节点
    • [x] 基于insertBefore方法,为 Tree 的一个节点的前面增加一个节点
    • [x] 基于insertAfter方法,为 Tree 的一个节点的后面增加一个节点
  • 实现右击菜单事件
    • [x] 菜单事件
  • 实现用户传入节点属性的key来适应用户的树结构数据
    • [x] 基于default-node-key | props实现,TreeNode的默认字段key
  • 实现为当前选中的节点设置高亮
    • [x] 基于highlight-current实现,是否高亮当前选中节点
    • [x] 基于current-node-key实现,当前选中的节点

Lydanne avatar Dec 12 '20 03:12 Lydanne