241 lines
8.2 KiB
Markdown
241 lines
8.2 KiB
Markdown
# customthree-tree-select 使用指南
|
||
|
||
**提示:** 使用该插件前确保你已经导入 `uni-popup` `uni-icons` `uni-easyinput` 插件。
|
||
|
||
**有问题可以加 QQ 群:297080738**
|
||
|
||
## 优势
|
||
|
||
💪:基于 `uni-popup`、 `uni-icons`、 `uni-easyinput` 插件进行开发,默认样式与 `uni-easyinput` 样式对标。
|
||
|
||
⚡:全面支持懒加载应对大量数据。
|
||
|
||
🚀:v-model 绑定数据、数据回显、移除选项。
|
||
|
||
⚙ :提供更多配置项。
|
||
|
||
📦:开箱即用。
|
||
|
||
## Props
|
||
|
||
| 属性名 | 类型 | 默认值 | 说明 |
|
||
| :--------------------: | :-----------------: | :-------------: | :----------------------------------------------------------: |
|
||
| canSelectAll | Boolean | false | 开启一键全选功能 |
|
||
| clearResetSearch | Boolean | false | 设置为 `true` 并且搜索之后,点击输入框清除按钮,会清空搜索内容并且会直接重置整个弹窗内树形选择器内容,默认情况下只有清除之后再次进行查询才会重置选择器 |
|
||
| animation | Boolean | ture | 是否开启弹窗动画 |
|
||
| is-mask-click | Boolean | true | 点击遮罩关闭弹窗 |
|
||
| mask-background-color | String | rgba(0,0,0,0.4) | 蒙版颜色,建议使用 rgba 颜色值 |
|
||
| background-color | String | none | 主窗口背景色 |
|
||
| safe-area | Boolean | true | 是否适配底部安全区 |
|
||
| **choseParent** | **Boolean** | **false** | **父节点是否可选** |
|
||
| **linkage** | **Boolean** | **false** | **父子节点是否联动** |
|
||
| placeholder | String | 请选择 | 空状态信息提示、弹窗标题 |
|
||
| confirmText | String | 完成 | 确定按钮文字 |
|
||
| confirmTextColor | String | #007aff | 确定按钮文字颜色 |
|
||
| dataSource | Array | - | 展示的数据 |
|
||
| **dataLabel** | **String** | **name** | **dataSource 中对应数据的 label** |
|
||
| **dataValue** | **String** | **id** | **dataSource 中对应数据的 value** |
|
||
| **dataChildren** | **String** | **children** | **dataSource 中对应数据的 children** |
|
||
| clearable | Boolean | false | 是否显示清除按钮,点击清除所有已选项 |
|
||
| **mutiple** | **Boolean** | **false** | **是否可以多选** |
|
||
| **disabled** | **Boolean** | **false** | **是否允许修改** |
|
||
| search | Boolean | false | 是否可以搜索(常用于数据较多的情况) |
|
||
| showChildren | Boolean | false | 默认不展开(数据内部 showChildren 属性优先级更高,可以设置全局收起,单独展开某一条数据) |
|
||
| border | Boolean | false | 显示引导线 |
|
||
| load | Function | function(){} | lazyLoadChildren 设置为true 后,点击某个节点发送请求获取子节点数据,用法见下方异步懒加载示例 |
|
||
| lazyLoadChildren | Boolean | false | 是否开启异步懒加载节点 |
|
||
| **v-model/modelValue** | **Array \| String** | **[ ]** | **已选择的值,通过 v-model 进行绑定,例如:v-model="formData.selectedList" ,根据你绑定数据的类型自动返回相同类型的数据,String 类型通过 `,` 进行分隔** |
|
||
| deleteSource | Boolean | false | 是否可删除已选数据
|
||
## Events
|
||
|
||
| 事件名称 | 说明 | 返回值 |
|
||
| ----------------- | ------------------------ | ------------------------------------------- |
|
||
| change | 弹窗组件状态发生变化触发 | e={show: true | false,type:当前模式} |
|
||
| maskClick | 点击遮罩层触发 | |
|
||
| update:modelValue | 选中数据或取消选中时触发 | 以数组形式返回已选择数据的 dataValue 对应值 |
|
||
| select-change | 选中数据或取消选中时触发 | 以数组形式返回选中数据完整信息 |
|
||
| removeSelect | 从选择框内删除元素时触发 | |
|
||
|
||
## 基础使用示例
|
||
|
||
```vue
|
||
<template>
|
||
<customthree-tree-select :listData="listData" v-model="formData.selectedArr" />
|
||
<customthree-tree-select :listData="listData" v-model="formData.selectedString" />
|
||
</template>
|
||
|
||
<script setup>
|
||
import { reactive } from 'vue'
|
||
|
||
const formData = reactive({
|
||
selectedArr: [],
|
||
selectedString: ''
|
||
})
|
||
|
||
const listData = [
|
||
{
|
||
id: 1,
|
||
name: '城市1',
|
||
children: [
|
||
{
|
||
id: 3,
|
||
name: '街道1',
|
||
children: [
|
||
{
|
||
id: 4,
|
||
name: '小区1'
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: 2,
|
||
name: '城市2',
|
||
children: [
|
||
{
|
||
id: 6,
|
||
name: '街道2'
|
||
}
|
||
]
|
||
}
|
||
]
|
||
</script>
|
||
```
|
||
|
||
## 禁用某些选项,或隐藏某些选项
|
||
|
||
```vue
|
||
<template>
|
||
<customthree-tree-select
|
||
mutiple
|
||
linkage
|
||
clearable
|
||
search
|
||
dataLabel="text"
|
||
dataValue="value"
|
||
:listData="listData"
|
||
v-model="formData.selected"
|
||
></custom-tree-select>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { reactive } from 'vue'
|
||
|
||
const formData = reactive({
|
||
selected: ''
|
||
})
|
||
|
||
const listData = [
|
||
{
|
||
id: 1,
|
||
name: '城市1',
|
||
children: [
|
||
{
|
||
id: 3,
|
||
name: '街道1',
|
||
disabled: true
|
||
children: [
|
||
{
|
||
id: 4,
|
||
name: '小区1'
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
id: 2,
|
||
name: '城市2',
|
||
children: [
|
||
{
|
||
id: 6,
|
||
name: '街道2',
|
||
visible: false
|
||
}
|
||
]
|
||
}
|
||
]
|
||
</script>
|
||
```
|
||
|
||
## 异步懒加载
|
||
|
||
```vue
|
||
<template>
|
||
<view class="content">
|
||
<customthree-tree-select
|
||
search
|
||
linkage
|
||
clearable
|
||
clearResetSearch
|
||
border
|
||
mutiple
|
||
lazyLoadChildren
|
||
canSelectAll
|
||
:showChildren="false"
|
||
:listData="listData"
|
||
:load="loadNode"
|
||
dataLabel="text"
|
||
dataValue="value"
|
||
v-model="selectedStr"
|
||
></customthree-tree-select>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
data() {
|
||
return {
|
||
selectedStr: '',
|
||
listData: [
|
||
{
|
||
value: '0',
|
||
text: '测试懒加载'
|
||
},
|
||
{
|
||
value: '1',
|
||
text: '城市1',
|
||
children: [
|
||
{
|
||
value: '1-1',
|
||
text: '街道1',
|
||
disabled: true
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
},
|
||
methods: {
|
||
loadNode(node) {
|
||
return new Promise((resolve) => {
|
||
setTimeout(() => {
|
||
const item = this.listData.find((item) => item.value === node.value)
|
||
if (item) {
|
||
resolve([
|
||
{
|
||
value: '0-1',
|
||
text: '懒加载子元素'
|
||
}
|
||
])
|
||
}
|
||
resolve([])
|
||
}, 500)
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
.content {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
</style>
|
||
```
|
||
|