我开源了一个基于Vue的组织架构树组件

229 篇文章 14 订阅
159 篇文章 14 订阅

点赞再看,养成习惯

本文 GitHub https://github.com/qq449245884/xiaozhi 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。

大家都说简历没项目写,我就帮大家找了一个项目,还附赠【搭建教程】

开门见山

Demo 演示地址:http://www.longstudy.club/vue-okr-tree-doc/index.html

github 地址:https://github.com/qq449245884/vue-okr-tree

项目背景

因为最近公司需要做一个OKR,OKR 里面有个对齐视图,是一个数型结构,如下图所示:

就拿我 小智 来说,如果有人对齐我的 KR 就放到我的右边,如果是我对齐了谁的 KR,就放到我的左边,类似一个上下级的关系,所以这里我用两棵树来表示左边与右边的关系。

在GitHub上找了半天,这类组件不多,也没有符合业务需求的组件,所以决定自己造轮子!

分析

  • 既然是树,那么每个节点都应该是相同的组件
  • 节点下面套节点,所以节点组件应该是一个递归组件
  • 整棵树应该有一个全局的状态,用来管理从外部传入的值以及向外部提供的属性和方法。
  • 每相树节点应该也要有一个对应的节点状态,来管理节点自身属性和方法。

实现思路

递归组件

对于递归组件,Vue 官方文档是这样说的:

组件在它的模板内可以递归地调用自己。不过,只有当它有 name 选项时才可以这么做。

这里我用 OkrTreeNode.vue 来表示树的节点,里面是这样用递归,下面是该组件简定:

<template>
  <OkrTreeNode
    v-for="child in leftChildNodes"
    :node="child"
  ></OkrTreeNode>
</template>

export default {
  name: 'OkrTreeNode'
}

递归组件的使用需要注意的两点是组件里面要有组件name 以及结束递归的条件。

树的状态

对于树的状态,我用一个 TreeStore 类来表示,该实现方式主要是参考 ElementUI 中的 tree 组件。TreeStore 中的属性就表示我外部传入的 pros 或者 attr 或者 事件和方法,都在这个对象里面管理,具体的代码可以看这里:

https://github.com/qq449245884/vue-okr-tree/blob/main/src/lib/vue-okr-tree/model/tree-store.js

节点的状态

对于节点的状态,我用一个 Node 对象来表示,具体的代码可以看下面这个地址,这里就不展开说了:

https://github.com/qq449245884/vue-okr-tree/blob/main/src/lib/vue-okr-tree/model/node.js

Demo 演示

基础用法

基础的树形结构展示,默认方式垂直方向。

水平方向

direction 属性设置为 horizontal 就可以展示水平方向。

节点是否可被展开

节点可被展开,默认是不展开,通过show-collapsable设置节点可被展开。

节点默认全部展开

通过设置 default-expand-all 默认展开所有节点,该参数只有在 show-collapsabletrue 时有效

可将 Tree 的某些节点设置为默认展开

通过 default-expanded-keys 设置默认展开的节点。需要注意的是,此时必须设置 node-key ,其值为节点数据中的一个字段名,该字段在整棵树中是唯一的。

节点的样式

可自行设置节点的默认样式和选中的样式。

通过 label-class-name 设置节点的样式,支持字符和函数方式。通过 current-lable-class-name 设置当前节点选中的样式,支持字符和函数方式。

节点自定义内容

可自行设置节点内容。通过 render-content 渲染节点内容。

OKR 展示模式

该模式的出现,是为了实现跟飞书OKR 展示的视图一样效果,所以在 Tree 的模式下,扩展成左右两棵子树。
该模式必须设置 onlyBothTree ,以及通过 leftData表示左子数的结构。

OKR 展示模式之自定义节点内容

与上常规 Tree 一样,我们也可以通过自定义渲染函数来制定节点的内容。

通过 render-content 渲染节点内容,通过返回 node 中的 isLeftChild 判断是否是左边的树。

节点过滤(不可展开)及支持的方法

通过关键字过滤树节点,在需要对节点进行过滤时,调用 Tree 实例的 filter 方法,参数为关键字。需要注意的是,此时需要设置 filter-node-method ,值为过滤函数。

节点过滤(可被展开)

通过关键字过滤树节点,在需要对节点进行过滤时,调用 Tree 实例的 filter 方法,参数为关键字。需要注意的是,此时需要设置 filter-node-method ,值为过滤函数。

支持的事件(不可展开)

不可展开时支持的事件有 节点点击 和 鼠标右键点击。

支持的事件(可被展开)

可展开时支持的事件有 节点点击、鼠标右键点击,节点的展开以及节点的关闭。

Attributes

参数说明类型可选值默认值
data展示数据array
direction树的展开方向Stringhorizontal / verticalvertical
onlyBothTree子树在根节点左右两边展开,该模式只有在 direction 为 horizontal 有效,且必须提供 leftData 数据Booleanfalse
leftData展示左子数的数据,该属性于在 onlyBothTree 模式启用array
label-width节点的宽度,默认为自动宽度。如果 label-width 为 number 类型,单位 px;如果 label-width 为 string 类型,则这个宽度会设置为 节点 的 style.width 的值,节点的宽度会受控于外部样式string/number
label-height节点的高度,默认为自动高度。如果 label-height 为 number 类型,单位 px;如果 label-height 为 string 类型,则这个高度会设置为 节点 的 style.height 的值,节点的高度会受控于外部样式string/number
label-class-name节点 className 的回调方法,也可以使用字符串为所有的节点设置一个固定的 classNameFunction(node)/String
current-lable-class-name当前选中节点的样式Function(node)/String
show-collapsable节点是否可被展开Booleanfalse
default-expand-all是否默认展开所有节点,该参数只有在 show-collapsable 为 true 时有效Booleanfalse
render-content树节点的内容区的渲染 FunctionFunction(h, node)
props配置选项,具体看下表object
node-key每个树节点用来作为唯一标识的属性,整棵树应该是唯一的String
default-expanded-keys默认展开的节点的 key 的数组(需要注意的是,此时必须设置node-key,其值为节点数据中的一个字段名,该字段在整棵树中是唯一的。)array
filter-node-method对树节点进行筛选时执行的方法,返回 true 表示这个节点可以显示,返回 false 则表示这个节点会被隐藏Function(value, data, node)

props

参数说明类型可选值默认值
label指定节点标签为节点对象的某个属性值string, function(data, node)
children指定节点标签为节点对象的某个属性值string

## Events

事件名称说明回调参数
node-click节点被点击时的回调共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。
node-expand节点被展开时触发的事件共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身
node-collapse节点被关闭时触发的事件共三个参数,依次为:传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身
node-contextmenu当某一节点被鼠标右键点击时会触发该事件共四个参数,依次为:event、传递给 data 属性的数组中该节点所对应的对象、节点对应的 Node、节点组件本身。

方法

方法名说明回调参数
filter对树节点进行筛选操作接收一个任意类型的参数,该参数会在 filter-node-method 中作为第一个参数
getNode根据 data 或者 key 拿到 Tree 组件中的 node,使用此方法必须设置 node-key 属性(data) 要获得 node 的 key 或者 data
setCurrentNode通过 node 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性(node) 待被选节点的 node
setCurrentKey通过 key 设置某个节点的当前选中状态,使用此方法必须设置 node-key 属性(key) 待被选节点的 key,若为 null 则取消当前高亮的节点
getCurrentKey获取当前被选中节点的 key,使用此方法必须设置 node-key 属性,若没有节点被选中则返回 null
getCurrentNode获取当前被选中节点的 data,若没有节点被选中则返回 null
remove删除 Tree 中的一个节点,使用此方法必须设置 node-key 属性(data) 要删除的节点的 id 或者 data 或者 node
append为 Tree 中的一个节点追加一个子节点(data, parentNode) 接收两个参数,1. 要追加的子节点的 data 2. 子节点的 parent 的 data、key 或者 node
insertBefore为 Tree 的一个节点的前面增加一个节点(data, refNode) 接收两个参数,1. 要增加的节点的 data 2. 要增加的节点的后一个节点的 data、key 或者 node
insertAfter为 Tree 的一个节点的后面增加一个节点(data, refNode) 接收两个参数,1. 要增加的节点的 data 2. 要增加的节点的前一个节点的 data、key 或者 node

浏览器支持情况

Modern browsers and Internet Explorer 10+.

如果你觉得还不错的话,还请帮忙在 github 上给个 star,如果你觉得哪些需要优化的可以到 github 上提个 PR。

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

交流

文章每周持续更新,可以微信搜索「 大迁世界 」第一时间阅读和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 已经收录,整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,另外关注公众号,后台回复福利,即可看到福利,你懂的。

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: ThinkPHP admin vue 是一种基于ThinkPHP框架开发的后台管理系统,前端使用了Vue.js框架。它提供了一套完整的后台管理解决方案,方便开发者快速搭建后台管理系统。 ThinkPHP 是一款使用PHP语言编写的开源框架,它具有良好的性能和稳定性。ThinkPHP admin vue 则是在这个框架的基础上,使用了Vue.js来实现前端的交互和组件化开发。 ThinkPHP admin vue 提供了丰富的后台管理功能,包括用户管理、权限管理、数据统计等等。开发者只需要通过简单的配置即可实现这些功能,大大减少了开发成本。 在前端方面,Vue.js提供了响应式的数据绑定和组件化的开发方式。这使得前端页面的开发变得更加灵活和高效。开发者可以通过组件的方式构建页面,提高了代码的复用性和维护性。 而在后端方面,ThinkPHP框架提供了一系列强大的功能和接口,包括数据库的操作、路由的设置、验证的规则等等。这些功能可以帮助开发者轻松实现后台逻辑的处理,保证了系统的稳定性和安全性。 综上所述,ThinkPHP admin vue 是一个功能强大的后台管理系统,它结合了ThinkPHP框架和Vue.js框架的优点,为开发者提供了方便快捷的开发工具和丰富的后台管理功能。无论是初学者还是有经验的开发者,都能够轻松上手并快速开发出高质量的后台管理系统。 ### 回答2: ThinkPHP Admin Vue 是一套基于ThinkPHP框架和Vue.js技术开发的后台管理系统。ThinkPHP是一个在中国广泛使用的PHP开源框架,而Vue.js则是一个用于构建用户界面的 JavaScript 框架。 ThinkPHP Admin Vue 的设计理念是快速高效地搭建后台管理系统。它提供了丰富的功能模块,如登录、用户管理、角色权限、菜单管理、日志记录等。可以帮助开发人员快速构建可扩展的后台管理系统,并提供了良好的用户体验。 ThinkPHP Admin Vue 的前端部分基于Vue.js来构建现代化的用户界面。Vue.js具备响应式的数据驱动视图能力,使前端开发更加高效和可维护。同时,它还支持组件化的开发方式,使得复杂页面的构建更加简单和可重用。 而后台部分则运用了ThinkPHP框架,这是一个成熟且稳定的PHP开发框架。它提供了一整套的开发规范和工具,包括数据库操作、路由配置、模型关联等。借助ThinkPHP框架,我们可以高效地组织后台逻辑代码,实现业务需求。 ThinkPHP Admin Vue 的结合,可以让开发人员在搭建后台管理系统的过程中更加快速、高效和方便。无论是从前端还是后台的角度来看,都提供了一套完整的解决方案。同时,它还具备良好的可扩展性和灵活性,可以根据实际需求进行二次开发和定制。 总而言之,ThinkPHP Admin Vue是一个集成了ThinkPHP框架和Vue.js技术的后台管理系统,具备快速、高效和可扩展的特点。它可以帮助开发人员快速搭建并定制自己的后台管理系统,提升开发效率和用户体验。 ### 回答3: ThinkPHP Admin Vue是一种基于ThinkPHP框架和Vue.js框架进行开发的后台管理系统。该系统采用前后端分离的架构,前端使用Vue.js框架进行开发,后端使用ThinkPHP框架提供接口支持。 ThinkPHP是一款国内流行的PHP开发框架,它提供了丰富的功能和强大的扩展性,同时也支持MVC的开发模式,使得开发人员能够快速构建稳定可靠的Web应用程序。 Vue.js是一种轻量级的JavaScript框架,它仅关注视图层,并且通过组件化的方式构建用户界面,能够更高效地创建交互性较强的页面。Vue.js还具备虚拟DOM、数据双向绑定等特性,使得开发人员能够更加便捷地处理页面数据和交互逻辑。 结合ThinkPHP和Vue.js的特点,ThinkPHP Admin Vue能够提供给开发人员一个完整的、功能强大的后台管理系统开发解决方案。开发人员可以使用ThinkPHP框架提供的数据库操作、缓存管理、权限控制等功能,同时也能够利用Vue.js框架构建出交互性较强的用户界面。 ThinkPHP Admin Vue还支持多种插件的集成,例如富文本编辑器、图表插件等,开发人员可以根据实际需求选择合适的插件进行集成,从而快速开发出适应不同业务场景的后台管理系统。 总之,ThinkPHP Admin Vue是一个可靠、高效的后台管理系统开发解决方案,它能够帮助开发人员快速构建出功能丰富、交互性强的后台管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@大迁世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值