<!-- 该 README.md 根据 api.yaml 和 docs/*.md 自动生成，为了方便在 GitHub 和 NPM 上查阅。如需修改，请查看源文件 -->

# UTreeSelectNew 树选择

- [示例](#示例)
    - [基本用法](#基本用法)
    - [禁用状态](#禁用状态)
- [API]()
    - [Props/Attrs](#propsattrs)
    - [Slots](#slots)
    - [Events](#events)
    - [Methods](#methods)

**Selector**

树选择

## 示例
### 基本用法

#### Tag 方式

```vue
<template>
    <u-tree-select-new v-model="value" :data-source="load" text-field="title" value-field="title">
    </u-tree-select-new>
</template>
<script>
// 模拟后端请求
const mockRequest = (data, timeout = 300) => new Promise((res, rej) => setTimeout(() => res(data), timeout));

export default {
    data() {
        return {
            value: '页面2'
        };
    },
    methods: {
        load(params) {
            if (!params.node) {
                return mockRequest([
                    { type: 'app', title: '应用1', childrenField: 'services' },
                    { type: 'app', title: '应用2', childrenField: 'services' },
                ]);
            } else if (params.node.type === 'app') {
                return mockRequest([
                    { type: 'service', title: '服务1', childrenField: 'pages' },
                    { type: 'service', title: '服务2', childrenField: 'pages' },
                    { type: 'service', title: '服务3', childrenField: 'pages' },
                ]);
            } else if (params.node.type === 'service') {
                return mockRequest([
                    { type: 'page', title: '页面1', isLeaf: true, childrenField: 'children' },
                    { type: 'page', title: '页面2', isLeaf: true, childrenField: 'children' },
                ]);
            }
        },
    },
}
</script>
```

#### Tag 方式

``` html
<u-tree-select-new value="节点 1" valueField="text" textField="text1">
    <u-tree-view-node-new text="节点 1" :node="{text1: '节点 2'}">
        <u-tree-view-node-new text="节点 1.1" :node="{text1: '节点 1.1'}"></u-tree-view-node-new>
        <u-tree-view-node-new text="节点 1.2" :node="{text1: '节点 1.2'}">
            <u-tree-view-node-new text="节点 1.2.1" :node="{text1: '节点 1.2.1'}"></u-tree-view-node-new>
            <u-tree-view-node-new text="节点 1.2.2" :node="{text1: '节点 1.2.2'}"></u-tree-view-node-new>
        </u-tree-view-node-new>
        <u-tree-view-node-new text="节点 1.3" :node="{text1: '节点 1.3'}"></u-tree-view-node-new>
        <u-tree-view-node-new text="节点 1.4" :node="{text1: '节点 1.4'}"></u-tree-view-node-new>
    </u-tree-view-node-new>
    <u-tree-view-node-new text="节点 2" :node="{text1: '节点 2'}"></u-tree-view-node-new>
    <u-tree-view-node-new text="节点 3" :node="{text1: '节点 3'}">
        <u-tree-view-node-new text="节点 3.1" :node="{text1: '节点 3.1'}"></u-tree-view-node-new>
        <u-tree-view-node-new text="节点 3.2" :node="{text1: '节点 3.2'}"></u-tree-view-node-new>
    </u-tree-view-node-new>
</u-tree-select-new>
```

#### Data 方式

``` html { width: 30% }
<u-tree-select-new value="节点 1" valueField="text1" textField="text1" :data-source="[
    { text1: '节点 1', children: [
        { text1: '节点 1.1' },
        { text1: '节点 1.2', children: [
            { text1: '节点 1.2.1' },
            { text1: '节点 1.2.2' },
        ] },
        { text1: '节点 1.3' },
        { text1: '节点 1.4' },
    ] },
    { text1: '节点 2' },
    { text1: '节点 3', children: [
        { text1: '节点 3.1' }
        ,
        { text1: '节点 3.2' },
    ] },
]"></u-tree-select-new>
```

#### 支持清除

多选：

```vue { width: 30% }
<template>
    <u-tree-select-new  v-model="value" checkable clearable valueField="text1" textField="text1" :data-source="dataSource"></u-tree-select-new>
</template>
<script>
    export default {
        data() {
            return {
                value: [],
                dataSource: [
                    { text1: '节点 1', value1: '1', children: [
                        { text1: '节点 1.1' , value1: '1.1'},
                        { text1: '节点 1.2', value1: '1.2' ,children: [
                            { text1: '节点 1.2.1', value1: '1.2.1' },
                            { text1: '节点 1.2.2' , value1: '1.2.2' },
                        ] },
                        { text1: '节点 1.3', value1: '1.3' },
                        { text1: '节点 1.4' , value1: '1.4'},
                    ] },
                    { text1: '节点 2' ,value1: '2'},
                    { text1: '节点 3', value1: '3', children: [
                        { text1: '节点 3.1', value1: '3.1' },
                        { text1: '节点 3.2' , value1: '3.2'},
                    ] },
                ],
            };
        },
        methods: {
            
        },
    }
</script>
```
单选：
```vue { width: 30% }
<template>
    <u-tree-select-new  v-model="value"  clearable valueField="text1" textField="text1" :data-source="dataSource"></u-tree-select-new>
</template>
<script>
    export default {
        data() {
            return {
                value: [],
                dataSource: [
                    { text1: '节点 1', value1: '1', children: [
                        { text1: '节点 1.1' , value1: '1.1'},
                        { text1: '节点 1.2', value1: '1.2' ,children: [
                            { text1: '节点 1.2.1', value1: '1.2.1' },
                            { text1: '节点 1.2.2' , value1: '1.2.2' },
                        ] },
                        { text1: '节点 1.3', value1: '1.3' },
                        { text1: '节点 1.4' , value1: '1.4'},
                    ] },
                    { text1: '节点 2' ,value1: '2'},
                    { text1: '节点 3', value1: '3', children: [
                        { text1: '节点 3.1', value1: '3.1' },
                        { text1: '节点 3.2' , value1: '3.2'},
                    ] },
                ],
            };
        },
        methods: {
            
        },
    }
</script>
```


#### 支持多选

```vue { width: 30% }
<template>
    <u-tree-select-new  v-model="value" checkable clearable valueField="text1" textField="text1" :data-source="dataSource"></u-tree-select-new>
</template>
<script>
    export default {
        data() {
            return {
                value: [],
                dataSource: [
                    { text1: '节点 1', value1: '1', children: [
                        { text1: '节点 1.1' , value1: '1.1'},
                        { text1: '节点 1.2', value1: '1.2' ,children: [
                            { text1: '节点 1.2.1', value1: '1.2.1' },
                            { text1: '节点 1.2.2' , value1: '1.2.2' },
                        ] },
                        { text1: '节点 1.3', value1: '1.3' },
                        { text1: '节点 1.4' , value1: '1.4'},
                    ] },
                    { text1: '节点 2' ,value1: '2'},
                    { text1: '节点 3', value1: '3', children: [
                        { text1: '节点 3.1', value1: '3.1' },
                        { text1: '节点 3.2' , value1: '3.2'},
                    ] },
                ],
            };
        },
        methods: {
            
        },
    }
</script>
```

### 禁用状态

```vue
<template>
    <u-tree-select-new  v-model="value" disabled valueField="value1" textField="text1" :data-source="dataSource"></u-tree-select-new>
</template>
<script>
    export default {
        data() {
            return {
                value: '1',
                dataSource: [
                    { text1: '节点 1', value1: '1', children: [
                        { text1: '节点 1.1' , value1: '1.1'},
                        { text1: '节点 1.2', value1: '1.2' ,children: [
                            { text1: '节点 1.2.1', value1: '1.2.1' },
                            { text1: '节点 1.2.2' , value1: '1.2.2' },
                        ] },
                        { text1: '节点 1.3', value1: '1.3' },
                        { text1: '节点 1.4' , value1: '1.4'},
                    ] },
                    { text1: '节点 2' ,value1: '2'},
                    { text1: '节点 3', value1: '3', children: [
                        { text1: '节点 3.1', value1: '3.1' },
                        { text1: '节点 3.2' , value1: '3.2'},
                    ] },
                ],
            };
        },
        methods: {
            
        },
    }
</script>
```

#### 一维Data

``` html { width: 30% }
<u-tree-select-new :data-source="[{id: 1, name: '节点1', pid: null}, {id: 2, name: '节点2', pid: 1}, {id: 3, name: '节点3', pid: null}, {id: 4, name: '节点4', pid: null}, {id: 5, name: '节点5', pid: 1}, {id: 6, name: '节点6', pid: 2}]"
                 parent-field="pid"
                 value-field="id"
                 children-field="children"
                 text-field="name"  
></u-tree-select-new>
```

#### 动态插槽数据
``` html { width: 70% }
<u-tree-select-new valueField="value" textField="text" childrenField="children" :data-source="[
    { text: '节点 1',value: '1', children: [
        { text: '节点 1.1', value: '1.1' },
        { text: '节点 1.2', value: '1.2', children: [
            { text: '节点 1.2.1', value: '1.2.1' },
            { text: '节点 1.2.2', value: '1.2.2' },
        ] },
        { text: '节点 1.3', value: '1.3' },
        { text: '节点 1.4', value: '1.4', },
    ] },
    { text: '节点 2', value: '2' },
    { text: '节点 3', value: '3',children: [
        { text: '节点 3.1', value: '3.1'},
        { text: '节点 3.2', value: '3.2'},
    ] },
]">
    <template #item="scope">
        <u-text>{{ scope.item.text }} - {{ scope.item.value}}</u-text> 
    </template>
    <u-tree-view-node-new ref="tree_view_node_new11" text="选项一" value="jing1">
        <template #item ref="template18">
            <u-text ref="text18" text="选项1"></u-text>
        </template>
    </u-tree-view-node-new>
    <u-tree-view-node-new ref="tree_view_node_new12" text="选项2" value="jing2">
        <template #item ref="template19">
            <u-text ref="text19" text="选项2"></u-text>
        </template>
    </u-tree-view-node-new>
</u-tree-select-new>
```

#### 动静结合选项回填
``` html { width: 70% }
<u-tree-select-new valueField="data.id" textField="data.deptname" parentField="data.parentid"
        :data-source="[ { 'data': { 'id': 1, 'deptname': '一级部门a', 'parentid': 0, 'name': '小明' } }, { 'data': { 'id': 2, 'deptname': '一级部门b', 'parentid': 11, 'name': 'xiaoming' } }, { 'data': { 'id': 99, 'deptname': '一级部门c', 'parentid': 0, 'name': 'xiaoming' } },{ 'data': { 'id': 3, 'deptname': '二级部门a', 'parentid': 1, 'name': '小明2' } }, { 'data': { 'id': 4, 'deptname': '三级部门a', 'parentid': 3, 'name': '小明3' } } ]"
>
    <template #item="scope">
        <u-text>{{ scope.item.data.deptname }}</u-text> 
    </template>
    <u-tree-view-node-new ref="tree_view_node_new11" text="选项一" value="jing1">
        <template #item ref="template18">
            <u-text ref="text18" text="选项1"></u-text>
        </template>
    </u-tree-view-node-new>
    <u-tree-view-node-new ref="tree_view_node_new12" text="选项2" value="jing2">
        <template #item ref="template19">
            <u-text ref="text19" text="选项2"></u-text>
        </template>
    </u-tree-view-node-new>
</u-tree-select-new>
```

```html 
<u-tree-select-new ref="tree_select_new3" placeholder="请选择">
    <template #item="scope" ref="template4"></template>
    <u-tree-view-node-new ref="tree_view_node_new1" text="水果" :value="1">
        <template #item ref="template5">
            <u-text ref="text6" text="水果"></u-text>
        </template>
        <u-tree-view-node-new ref="tree_view_node_new2" text="苹果" :value="2">
            <template #item ref="template6">
                <u-text ref="text7" text="平果"></u-text>
            </template>
            <u-tree-view-node-new ref="tree_view_node_new4" text="无核" :value="3">
                <template #item ref="template8">
                    <u-text ref="text9" text="无核"></u-text>
                </template>
            </u-tree-view-node-new>
        </u-tree-view-node-new>
    </u-tree-view-node-new>
    <u-tree-view-node-new ref="tree_view_node_new3" text="电器" :value="1">
        <template #item ref="template7">
            <u-text ref="text8" text="电器"></u-text>
        </template>
    </u-tree-view-node-new>
</u-tree-select-new>
```


## API
### Props/Attrs

| Prop/Attr | Type | Options | Default | Description |
| --------- | ---- | ------- | ------- | ----------- |
| data-source | Array\<Item\> \| Function \| object \| DataSource |  |  | 展示数据的输入源，可设置为集合类型变量（List<T>）或输出参数为集合类型的逻辑。 |
| data-schema | schema |  |  | 数据源返回的数据结构的类型，自动识别类型进行展示说明 |
| text-field | string |  | `'text'` | 集合的元素类型中，用于显示文本的属性名称 |
| value-field | string |  | `'value'` | 集合的元素类型中，用于标识选中值的属性 |
| parent-field | string |  | `''` | 集合的元素类型中，用于标识父节点的属性 |
| children-field | string |  | `'children'` | 集合的元素类型中，用于标识子节点的属性，默认为children |
| expanded-field | string |  | `'expanded'` | 集合的元素类型中，用于标识节点是否展开的属性，默认为expanded |
| value.sync, v-model | any |  |  | 选择后，所选中的值 |
| checkable | boolean |  | `false` | 设置是否开启多选模式，显示多选框 |
| placeholder | string |  | `'请选择'` | 为空时显示的占位符文本 |
| check-controlled | boolean |  | `false` | 开启后父节点选择不会全选子节点，子节点选择不会联动父节点 |
| disabled-field | string |  | `'disabled'` | 集合的元素类型中，用于标识节点的disabled属性 |
| clearable | boolean |  | `false` | 设置是否开启可清除模式 |
| render-optimize | boolean |  | `false` | 设置只渲染tree激活子节点，用于渲染性能提升。 |
| append-to | string | `[object Object]`<br/>`[object Object]` | `'reference'` | 设置弹出层依据哪个元素定位位置，可选值：`'body'`表示添加到 document.body，`'reference'`表示添加到参考元素中。 |
| disabled | boolean |  | `false` | 置灰显示，且禁止任何交互（焦点、点击、选择、输入等） |
| width | string | `[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]` | `'normal'` | 设置选择框宽度大小 |
| height | string | `[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]`<br/>`[object Object]` | `'normal'` | 设置选择框高度大小 |

### Slots

#### (default)

插入`<u-tree-view-node-new>`子组件

#### item

自定义选项的结构和样式

### Events

#### @change

修改时触发

| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.param1 | string | 参数1 |
| $event.param2 | number | 参数2 |

#### @select

选择某一项时触发

| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.value | any | 改变后的值 |
| $event.oldValue | any | 旧的值 |
| $event.node | object | 选择项相关对象 |
| $event.oldNode | object | 旧的选择项相关对象 |
| $event.nodeVM | UTreeViewNode | 选择项子组件 |
| $event.oldVM | UTreeViewNode | 旧的选择项子组件 |
| senderVM | UTreeView | 发送事件实例 |

#### @check

选中/取消节点时触发

| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.checked | boolean | 选中/取消状态 |
| $event.oldChecked | boolean | 旧的选中/取消状态 |
| $event.values | Array | 所有选中节点的值 |
| $event.node | object | 节点相关对象 |
| $event.nodeVM | UTreeViewNode | 节点组件 |
| senderVM | UTreeView | 发送事件实例 |

#### @before-load

加载前触发

| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.preventDefault | Function | 阻止加载流程 |
| senderVM | UTableView | 发送事件实例 |

#### @load

加载后触发

| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | null | 无 |
| senderVM | UTableView | 发送事件实例 |

#### @before-clear

清空前触发

| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.value | any | 改变后的值 |
| $event.oldValue | any | 旧的值 |
| $event.preventDefault | Function | 阻止清空流程 |
| senderVM | UTreeView | 发送事件实例 |

#### @clear

清空时触发

| Param | Type | Description |
| ----- | ---- | ----------- |
| $event | object | 自定义事件对象 |
| $event.value | any | 改变后的值 |
| $event.oldValue | any | 旧的值 |
| senderVM | UTreeView | 发送事件实例 |

Methods

#### reload()

重新加载

| Param | Type | Default | Description |
| ----- | ---- | ------- | ----------- |

