vue-tree-color
前言
最近公司项目(
Vue
+Element
)需求有用到tree
,所以呢我去网上找了很多插件,都不是很符合我的要求。最后在GitHub上面找到了一款插件是iview
的组织结构树vue-org-tree
,但是由于文档不是特别易懂,自己踩了很多坑。不过定制性特别高,基本上会用到的方法都有了。所以今天来给大家讲解下。自己也根据业务需求修改了部分内容,下面我也会介绍到我修改的内容,重新修改了包上传到了npm
安装
NPM
# use npmnpm install vue-tree-color# use yarnyarn add vue2-org-tree
安装 loader
温馨提示:不安装less-loader基本上都会报错
npm install --save-dev less less-loader
Import Plugins
Vue
简单起步
严老湿这边呢,就直接使用Vue-cli
起步了,vue-tree-color
安装成功之后,我们就直接使用了,在Vue
页面或者组件中使用vue2-org-tree
标签,动态绑定data
基本创建
data数据放入页面中
id 每个元素不同的ID ,label为name, children为自己的子集数据
data:id: 0label: "XXX科技有限公司"children:id: 2label: "产品研发部"children:id: 5label: "研发-前端"id: 6label: "研发-后端"id: 9label: "UI设计"id: 10label: "产品经理"id: 3label: "销售部"children:id: 7label: "销售一部"id: 8label: "销售二部"id: 4label: "财务部"id: 9label: "HR人事"
效果图:
排列方式
刚刚我们看到的是默认排列方式 ,其实还有一种排列方式,我们一起来看看
水平排列
horizontal
是水平排列方式,我们来实践一下吧,它的参数是true
、false
看看效果如何:
修改背景色
使用 label-class-name
我们还可以动态绑定自定义class
我们一起来尝试一下吧!
js:
{returnlabelClassName:"bg-color-orange"}
css:
警告⚠ :style
标签里不能加 scoped
不然自定义样式无效
看看效果图
折叠展示
折叠展示效果
折叠效果是有了,那么怎么展开呢?
js:
{var _this = this;list;}{if "expand" in datadataexpand = !dataexpand;if !dataexpand && datachildrenthis;elsethis;}
请看效果图:
问题又来了,默认展开如何实现?
请看大屏幕
{var _this = this;if Arraydata;elsethis;if datachildren_this;}
在请求完数据之后直接调用,或者生命周期调用,可以自由发挥
第一个参数是你的资源data,第二个参数是全部展开或否
this
上效果图:
深入观察
vue2-org-tree
向我们抛出了几个事件,我们先看看有哪些事件
点击事件
on-node-click
就是被抛出的点击事件
我们在方法里面写一个NodeClick用来接受点击触发的值
{console// e 为 eventconsole// 当前项的所有详情 如:id label children}
打印结果:
// e 的打印isTrusted: truescreenX: 720screenY: 308clientX: 720clientY: 205ctrlKey: falseshiftKey: falsealtKey: falsemetaKey: falsebutton: 0buttons: 0relatedTarget: nullpageX: 720......// data的打印id: 2label: "产品研发部"children: Array4
移入移出
它还向我们抛出了移入移出事件,返回值与点击事件大致相同
<vue2-org-tree:data="data":horizontal="true":label-class-name="labelClassName"collapsable@on-expand="onExpand"@on-node-mouseover="onMouseover"@on-node-mouseout="onMouseout"/>
拓展移入移出
来了老弟?我们做移入移出,肯定是要有功能的对不对?
每当我们的鼠标移入到小盒子里就出现一个模态框用来展示data内容
<!-- 创建浮窗盒子 -->ID:{{BasicInfo.id}}Name:{{BasicInfo.label}}
js:
// 声明变量{returnBasicSwich:falseBasicInfo:id:nulllabel:null}// 方法{thisBasicSwich = false}{thisBasicInfo = data;thisBasicSwich = true;var floating = document0;floatingstyleleft = eclientX +'px';floatingstyletop = eclientY+'px';}
css:
/* 盒子css */
上效果图:
自定义方块颜色
这个地方是严老湿在原有的基础上进行了封装改良,我在内部文件中修改了部分内容话不多说,我们上代码看看
传judge
值给组件
2.1.5: judge 是一个Object
格式 里面存在着一个值 {swtich:true || false}
不传或者传入false 都默认为不需要自定义class
新增NodeClass
参数 NodeClass
是一个Array
格式 类似于Echarts
的 color
参数,
如果有放入你需要的class
如果没有则采取默认格式
NodeClass:"myred""myger""myblue"
在data
数据中需要的项中添加 你就需要这样做
id: 5label: "研发-前端"swtich: "myred"id: 6label: "研发-后端"swtich: "myger"
html
js
judge: id: 6
judge是传给组件分辨区别的对象
id和6同时为判断条件,
上面的那段代码的意思就是,如果id为6的那一项进行修改颜色
康康效果图吧
如果你要修改更多的项,那就得换个判断条件了
比如数据里面携带了判断条件你可以这样
judge: swtich: false
data
data:id: 0label: "XXX科技有限公司"children:id: 2label: "产品研发部"children:id: 5label: "研发-前端"swtich: falseid: 6label: "研发-后端"swtich: falseid: 9label: "UI设计"id: 10label: "产品经理"id: 3label: "销售部"children:id: 7label: "销售一部"swtich: falseid: 8label: "销售二部"swtich: falseid: 4label: "财务部"id: 9label: "HR人事"
效果图:
但是值得你注意的是,这两个颜色是通过类名来自定义的
条件中查询成功的class是.org-bg-err
条件中查询失败的class是 .org-bg-res
API
props
prop | descripton | type | default |
---|---|---|---|
data | Object |
||
props | configure props | Object |
{label: 'label', children: 'children', expand: 'expand'} |
labelWidth | node label width | String | Number |
auto |
collapsable | children node is collapsable | Boolean |
true |
renderContent | how to render node label | Function |
- |
labelClassName | node label class | Function | String |
- |
selectedKey | The key of the selected node | String |
- |
selectedClassName | The className of the selected node | Function | String |
- |
events
event name | descripton | type |
---|---|---|
click | Click event | Function |
mouseover | onMouseOver event | Function |
mouseout | onMouseOut event | Function |
- ### Call events
on-expand
鼠标点击时调用它。
- params
e
Event
- params
data
Current node data
on-node-click
well be called when the node-label clicked
- params
e
Event
- params
data
Current node data
on-node-mouseover
当鼠标悬停时调用它。
- params
e
Event
- params
data
Current node data
on-node-mouseout
当鼠标离开时调用它。
- params
e
Event
- params
data
Current node data
总结
最后附上Git地址:https://github.com/CrazyMrYan/vue-tree-color
预览地址:http://crazy.lovemysoul.vip/gitdemo/vue-tree-color
关注“悲伤日记”查看更多精彩文章