SpringBlade/.claude/skills/avue-design/references/tree-component.md
2026-04-17 18:50:28 +08:00

134 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# avue-tree 树组件参考
## 基本用法
```vue
<avue-tree
:option="option"
:data="treeData"
@node-click="nodeClick"
@save="handleSave"
@update="handleUpdate"
@del="handleDel"
/>
```
## Option 属性
| 属性 | 类型 | 默认值 | 说明 |
|-----|------|-------|------|
| defaultExpandAll | boolean | false | 默认展开所有 |
| virtualize | boolean | false | 虚拟DOM模式 |
| dialogWidth | string | '50%' | 弹窗宽度 |
| formOption | object | - | 自定义表单参考avue-form |
| menu | boolean | true | 显示菜单栏 |
| addBtn | boolean | true | 新增按钮 |
| editBtn | boolean | true | 编辑按钮 |
| delBtn | boolean | true | 删除按钮 |
| filter | boolean | true | 显示搜索框 |
| props | object | - | 配置选项 |
| lazy | boolean | false | 懒加载 |
## Props 属性
| 属性 | 类型 | 默认值 | 说明 |
|-----|------|-------|------|
| label | string | 'label' | 节点名称属性 |
| labelText | string | '名称' | 弹窗新增名称 |
| children | string | 'children' | 子节点属性 |
| value | string | 'value' | 节点值属性和nodeKey |
## 数据结构
```javascript
const treeData = ref([
{
label: '一级节点',
value: '1',
children: [
{ label: '二级节点A', value: '1-1' },
{ label: '二级节点B', value: '1-2' },
],
},
])
```
## 事件
| 事件名 | 参数 | 说明 |
|-------|------|------|
| save | (parent, data, done, loading) | 新增回调 |
| update | (parent, data, done, loading) | 编辑回调 |
| del | (data, done) | 删除回调 |
| before-open | (done, type) | 打开前回调 |
| before-close | (done, type) | 关闭前回调 |
| node-click | (data, node, component) | 节点点击 |
| check-change | (data, checked, hasCheckedChildren) | 勾选变化 |
## 方法
| 方法名 | 参数 | 说明 |
|-------|------|------|
| filter | (value) | 筛选树节点 |
| updateKeyChildren | (key, data) | 更新子节点 |
| getCheckedNodes | (leafOnly, includeHalfChecked) | 获取勾选节点 |
| setCheckedNodes | (nodes) | 设置勾选节点 |
| getCheckedKeys | (leafOnly) | 获取勾选keys |
| setCheckedKeys | (keys, leafOnly) | 设置勾选keys |
| setChecked | (key/data, checked, deep) | 设置勾选状态 |
| getHalfCheckedNodes | - | 获取半选节点 |
| getHalfCheckedKeys | - | 获取半选keys |
| getCurrentKey | - | 获取当前选中key |
| getCurrentNode | - | 获取当前选中数据 |
| setCurrentKey | (key) | 设置当前选中 |
| setCurrentNode | (node) | 设置当前选中 |
| getNode | (data) | 获取节点 |
| remove | (data) | 删除节点 |
| append | (data, parentNode) | 追加子节点 |
| insertBefore | (data, refNode) | 在前面插入 |
| insertAfter | (data, refNode) | 在后面插入 |
## 插槽
| 插槽名 | 说明 |
|-------|------|
| menu | 按钮插槽 |
| add-btn | 新增按钮插槽 |
| default | 节点内容插槽 |
## 示例
### 多选模式
```vue
<avue-tree :option="{ ...option, multiple: true }" :data="treeData" @check-change="checkChange" />
```
### 懒加载
```vue
<avue-tree :option="option" :data="treeData">
const option = reactive({
lazy: true,
props: { label: 'name', value: 'id' },
})
// 在 treeLoad 中处理加载逻辑
```
### 拖拽
参考 `default/tree/drag` 示例。
### 权限控制
参考 `default/tree/permission` 示例。
### 虚拟模式
```javascript
option: { virtualize: true }
// 适用于大数据量场景
```