一、最终效果
![在这里插入图片描述](https://img-blog.csdnimg.cn/83bba9e502d74333bbeb7b110345d35d.gif)
二、具体HTML代码(详情请看源码)
<template>
<el-select
ref="select"
v-model="selectValue"
:multiple="multiple"
:filter-method="dataFilter"
@remove-tag="removeTag"
@clear="clearAll"
popper-class="t-tree-select"
:style="{width: width||'100%'}"
v-bind="attrs"
v-on="$listeners"
>
<el-option v-model="selectTree" class="option-style" disabled>
<div class="check-box" v-if="multiple&&checkBoxBtn">
<el-button type="text" @click="handlecheckAll">全选</el-button>
<el-button type="text" @click="handleReset">清空</el-button>
<el-button type="text" @click="handleReverseCheck">反选</el-button>
</div>
<el-tree
:data="options"
:props="treeProps"
class="tree-style"
ref="treeNode"
:show-checkbox="multiple"
:node-key="treeProps.value"
:filter-node-method="filterNode"
:default-checked-keys="defaultValue"
:current-node-key="currentKey"
@node-click="handleTreeClick"
@check-change="handleNodeChange"
v-bind="treeAttrs"
v-on="$listeners"
></el-tree>
</el-option>
</el-select>
</template>
三、参数配置
1、代码示例
<t-tree-select
:options="treeList"
placeholder="请选择tree结构"
width="50%"
:defaultData="defaultValue"
:treeProps="treeProps"
@handleNodeClick="selectDrop"
/>
2、配置参数(Attributes)继承 el-select 和 el-tree Attributes
参数 | 说明 | 类型 | 默认值 |
---|
options | tree 原始数据源 | Array | 无 |
treeProps | tree 配置 | Object | el-tree props 默认值一样 |
checkBoxBtn | 是否显示全选、反选、清空操作(多选的情况下) | Boolean | true |
multiple | 是否开启多选 | Boolean | false |
width | 选择宽度(可以设置 px 或者%) | String | 100% |
defaultData | 单选默认值 | Object | {} |
defaultValue | 多选默认值 | Array | [] |
3、 events 继承 el-select 和 el-tree events
事件名 | 说明 | 返回值 |
---|
handleNodeClick | 选中 tree 节点 | 单选传出当前选择项;多选传出选中的集合。 |
四、组件地址
gitHub组件地址
gitee码云组件地址
五、相关文章
基于ElementUi或AntdUI再次封装基础组件文档
基于Element-plus再次封装基础组件文档(vue3+ts)