x-next 1.14.0 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_USAGE/catalog.md +4 -2
- package/AI_USAGE/components/alert-api.md +1 -1
- package/AI_USAGE/components/alert.md +1 -1
- package/AI_USAGE/components/bar-chart-api.md +1 -1
- package/AI_USAGE/components/bar-chart.md +1 -1
- package/AI_USAGE/components/boxicons.md +1 -1
- package/AI_USAGE/components/button-api.md +1 -1
- package/AI_USAGE/components/button.md +1 -1
- package/AI_USAGE/components/charts.md +1 -1
- package/AI_USAGE/components/checkbox-api.md +1 -1
- package/AI_USAGE/components/checkbox.md +1 -1
- package/AI_USAGE/components/color-picker-api.md +1 -1
- package/AI_USAGE/components/color-picker.md +1 -1
- package/AI_USAGE/components/config-provider-api.md +1 -1
- package/AI_USAGE/components/config-provider.md +1 -1
- package/AI_USAGE/components/date-picker-api.md +1 -1
- package/AI_USAGE/components/date-picker.md +1 -1
- package/AI_USAGE/components/dialog-api.md +1 -1
- package/AI_USAGE/components/dialog.md +1 -1
- package/AI_USAGE/components/draggable-api.md +1 -1
- package/AI_USAGE/components/draggable.md +1 -1
- package/AI_USAGE/components/drawer-api.md +1 -1
- package/AI_USAGE/components/drawer.md +30 -1
- package/AI_USAGE/components/dropdown-api.md +1 -1
- package/AI_USAGE/components/dropdown.md +1 -1
- package/AI_USAGE/components/empty-api.md +1 -1
- package/AI_USAGE/components/empty.md +1 -1
- package/AI_USAGE/components/finicon.md +1 -1
- package/AI_USAGE/components/form-api.md +1 -1
- package/AI_USAGE/components/form.md +1 -1
- package/AI_USAGE/components/grid-api.md +1 -1
- package/AI_USAGE/components/grid.md +1 -1
- package/AI_USAGE/components/heatmap-api.md +1 -1
- package/AI_USAGE/components/heatmap.md +1 -1
- package/AI_USAGE/components/icon-api.md +1 -1
- package/AI_USAGE/components/icon.md +1 -1
- package/AI_USAGE/components/image-api.md +1 -1
- package/AI_USAGE/components/image.md +1 -1
- package/AI_USAGE/components/input-api.md +1 -1
- package/AI_USAGE/components/input-number-api.md +1 -1
- package/AI_USAGE/components/input-number.md +1 -1
- package/AI_USAGE/components/input-tag-api.md +1 -1
- package/AI_USAGE/components/input-tag.md +1 -1
- package/AI_USAGE/components/input.md +1 -1
- package/AI_USAGE/components/layout-api.md +1 -1
- package/AI_USAGE/components/layout.md +1 -1
- package/AI_USAGE/components/line-chart-api.md +3 -3
- package/AI_USAGE/components/line-chart.md +28 -1
- package/AI_USAGE/components/link-api.md +1 -1
- package/AI_USAGE/components/link.md +1 -1
- package/AI_USAGE/components/menu-api.md +1 -1
- package/AI_USAGE/components/menu.md +1 -1
- package/AI_USAGE/components/message-api.md +1 -1
- package/AI_USAGE/components/message-box-api.md +1 -1
- package/AI_USAGE/components/message-box.md +1 -1
- package/AI_USAGE/components/message.md +1 -1
- package/AI_USAGE/components/network-api.md +1 -1
- package/AI_USAGE/components/network.md +1 -1
- package/AI_USAGE/components/notification-api.md +1 -1
- package/AI_USAGE/components/notification.md +1 -1
- package/AI_USAGE/components/pagination-api.md +1 -1
- package/AI_USAGE/components/pagination.md +1 -1
- package/AI_USAGE/components/pie-chart-api.md +1 -1
- package/AI_USAGE/components/pie-chart.md +1 -1
- package/AI_USAGE/components/popconfirm-api.md +1 -1
- package/AI_USAGE/components/popconfirm.md +1 -1
- package/AI_USAGE/components/popover-api.md +1 -1
- package/AI_USAGE/components/popover.md +1 -1
- package/AI_USAGE/components/popup-api.md +1 -1
- package/AI_USAGE/components/popup.md +1 -1
- package/AI_USAGE/components/progress-api.md +1 -1
- package/AI_USAGE/components/progress.md +1 -1
- package/AI_USAGE/components/radio-api.md +1 -1
- package/AI_USAGE/components/radio.md +1 -1
- package/AI_USAGE/components/rate-api.md +1 -1
- package/AI_USAGE/components/rate.md +1 -1
- package/AI_USAGE/components/resize-box-api.md +1 -1
- package/AI_USAGE/components/resize-box.md +1 -1
- package/AI_USAGE/components/scrollbar-api.md +1 -1
- package/AI_USAGE/components/scrollbar.md +1 -1
- package/AI_USAGE/components/select-api.md +1 -1
- package/AI_USAGE/components/select.md +1 -1
- package/AI_USAGE/components/skeleton-api.md +1 -1
- package/AI_USAGE/components/skeleton.md +1 -1
- package/AI_USAGE/components/slider-api.md +1 -1
- package/AI_USAGE/components/slider.md +1 -1
- package/AI_USAGE/components/space-api.md +1 -1
- package/AI_USAGE/components/space.md +1 -1
- package/AI_USAGE/components/spin-api.md +1 -1
- package/AI_USAGE/components/spin.md +1 -1
- package/AI_USAGE/components/steps-api.md +1 -1
- package/AI_USAGE/components/steps.md +1 -1
- package/AI_USAGE/components/switch-api.md +1 -1
- package/AI_USAGE/components/switch.md +1 -1
- package/AI_USAGE/components/table-api.md +1 -1
- package/AI_USAGE/components/table.md +44 -1
- package/AI_USAGE/components/tabs-api.md +1 -1
- package/AI_USAGE/components/tabs.md +1 -1
- package/AI_USAGE/components/tag-api.md +1 -1
- package/AI_USAGE/components/tag.md +1 -1
- package/AI_USAGE/components/textarea-api.md +1 -1
- package/AI_USAGE/components/textarea.md +1 -1
- package/AI_USAGE/components/time-picker-api.md +1 -1
- package/AI_USAGE/components/time-picker.md +1 -1
- package/AI_USAGE/components/time-range-selector-api.md +1 -1
- package/AI_USAGE/components/time-range-selector.md +1 -1
- package/AI_USAGE/components/timeline-api.md +1 -1
- package/AI_USAGE/components/timeline.md +1 -1
- package/AI_USAGE/components/tooltip-api.md +1 -1
- package/AI_USAGE/components/tooltip.md +1 -1
- package/AI_USAGE/components/tree-select-api.md +498 -0
- package/AI_USAGE/components/tree-select.md +744 -0
- package/AI_USAGE/components/trend-chart-api.md +1 -1
- package/AI_USAGE/components/trend-chart.md +1 -1
- package/AI_USAGE/components/trigger-api.md +1 -1
- package/AI_USAGE/components/trigger.md +1 -1
- package/AI_USAGE/components/upload-api.md +1 -1
- package/AI_USAGE/components/upload.md +1 -1
- package/AI_USAGE/components/watermark-api.md +1 -1
- package/AI_USAGE/components/watermark.md +1 -1
- package/AI_USAGE/core.md +1 -1
- package/AI_USAGE/index.md +3 -2
- package/AI_USAGE/recipes/form-on-demand.md +1 -1
- package/AI_USAGE.md +1326 -5
- package/CHANGELOG.md +32 -0
- package/dist/_props/css.d.ts +2 -1
- package/dist/components/_components/input-label/input-label.d.ts +3 -0
- package/dist/components/bar-chart/BarChart.d.ts +1 -1
- package/dist/components/bar-chart/index.d.ts +3 -3
- package/dist/components/index.d.ts +1 -0
- package/dist/components/line-chart/LineChart.d.ts +1 -1
- package/dist/components/line-chart/index.d.ts +3 -3
- package/dist/components/line-chart/interface.d.ts +2 -2
- package/dist/components/tree-select/TreeNode.vue.d.ts +478 -0
- package/dist/components/tree-select/TreeSelect.d.ts +1549 -0
- package/dist/components/tree-select/TreeSelectDropdown.vue.d.ts +569 -0
- package/dist/components/tree-select/hooks/use-tree-select.d.ts +92 -0
- package/dist/components/tree-select/index.d.ts +3321 -0
- package/dist/components/tree-select/interface.d.ts +203 -0
- package/dist/components/tree-select/utils.d.ts +64 -0
- package/dist/es/_styles/palette-aliases.js +3 -0
- package/dist/es/components/_components/feedback-icon/index.vue2.js +10 -10
- package/dist/es/components/_components/input-label/input-label.js +69 -65
- package/dist/es/components/_components/select-view/select-view.js +1 -0
- package/dist/es/components/button/Button.js +9 -9
- package/dist/es/components/drawer/src/Drawer.vue.js +26 -26
- package/dist/es/components/form-switch/Switch.vue2.js +18 -18
- package/dist/es/components/image/Image.vue2.js +13 -13
- package/dist/es/components/image/ImagePreview.vue2.js +33 -33
- package/dist/es/components/index.js +55 -52
- package/dist/es/components/link/Link.vue2.js +12 -12
- package/dist/es/components/message/message.vue2.js +13 -13
- package/dist/es/components/spin/Spin.js +28 -28
- package/dist/es/components/tag/Tag.vue2.js +22 -22
- package/dist/es/components/timeline/src/Timeline.js +7 -7
- package/dist/es/components/tree-select/TreeNode.vue.js +91 -0
- package/dist/es/components/tree-select/TreeNode.vue2.js +162 -0
- package/dist/es/components/tree-select/TreeSelect.js +865 -0
- package/dist/es/components/tree-select/TreeSelectDropdown.vue.js +57 -0
- package/dist/es/components/tree-select/TreeSelectDropdown.vue2.js +79 -0
- package/dist/es/components/tree-select/hooks/use-tree-select.js +376 -0
- package/dist/es/components/tree-select/index.js +13 -0
- package/dist/es/components/tree-select/utils.js +181 -0
- package/dist/es/icons/animation/animation-loading.js +2 -2
- package/dist/es/index.js +71 -68
- package/dist/es/style.css +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.umd.js +3 -3
- package/dist/style/base.css +1 -1
- package/dist/style/dependencies.json +10 -0
- package/dist/style/drawer.css +1 -1
- package/dist/style/table.css +1 -1
- package/dist/style/tree-select.css +1 -0
- package/dist/style/tree-select.js +8 -0
- package/dist/style.css +1 -1
- package/dist/types.d.ts +2 -0
- package/package.json +2 -1
- package/volar.d.ts +2 -0
package/AI_USAGE.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<!-- Generated by pnpm generate:ai-usage. Edit script/ai-usage/content.md and script/ai-usage/. -->
|
|
2
2
|
# x-next AI 使用手册
|
|
3
3
|
|
|
4
|
-
适用版本:**x-next@1.
|
|
4
|
+
适用版本:**x-next@1.16.0**。Vue:`^3.5.0`;Node:`>=20.19.0`。
|
|
5
5
|
|
|
6
|
-
来源指纹(AI 行为说明、docs 导入快照、映射、样式依赖、版本、公开类型和 API 参考):`
|
|
6
|
+
来源指纹(AI 行为说明、docs 导入快照、映射、样式依赖、版本、公开类型和 API 参考):`089f62cfcc5dbb14a7c66c139cdccc00de64d2ebdf90162e3dca9438c15ba4de`。
|
|
7
7
|
|
|
8
|
-
覆盖
|
|
8
|
+
覆盖 58 个组件族与 105 个公开组件/服务导出。优先通过 [本地按需索引](./AI_USAGE/index.md) 读取组件页和 API,不为查本包用法默认搜索网络。
|
|
9
9
|
|
|
10
10
|
读取入口:`node_modules/x-next/AI_USAGE.md`;可用 `require.resolve('x-next/AI_USAGE.md')` 定位。消费项目应在自己的指令中明确引用。
|
|
11
11
|
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
| Pagination | `Pagination` | `<x-pagination>` | `v-model:current`, `v-model:page-size` | `x-next/style/pagination` | `button.css`, `empty.css`, `form-checkbox.css`, `form-input.css`, `form-input-number.css`, `form-select.css`, `scrollbar-v2.css`, `spin.css`, `trigger.css` | [组件文档](https://x-next.yjmf.com/components/pagination) |
|
|
41
41
|
| Steps | `Steps` | `<x-steps>` | `v-model:current` | `x-next/style/steps` | 无独立依赖 | [组件文档](https://x-next.yjmf.com/components/steps) |
|
|
42
42
|
| Tabs | `Tabs` | `<x-tabs>` | `v-model:active-key` | `x-next/style/tabs` | 无独立依赖 | [组件文档](https://x-next.yjmf.com/components/tabs) |
|
|
43
|
+
| TreeSelect | `TreeSelect`, `TreeSelectDropdown` | `<x-tree-select>` | `v-model`, `v-model:input-value`, `v-model:popup-visible`, `v-model:expanded-keys` | `x-next/style/tree-select` | `empty.css`, `form-checkbox.css`, `form-select.css`, `scrollbar-v2.css`, `spin.css`, `trigger.css` | [组件文档](https://x-next.yjmf.com/components/tree-select) |
|
|
43
44
|
| Empty | `Empty` | `<x-empty>` | 无 | `x-next/style/empty` | 无独立依赖 | [组件文档](https://x-next.yjmf.com/components/empty) |
|
|
44
45
|
| Upload | `Upload` | `<x-upload>` | `v-model:file-list` | `x-next/style/upload` | `image.css`, `progress.css`, `trigger.css`, `tooltip.css` | [组件文档](https://x-next.yjmf.com/components/upload) |
|
|
45
46
|
| BarChart | `BarChart` | `<x-bar-chart>` | 无 | `x-next/style/bar-chart` | `spin.css` | [组件文档](https://x-next.yjmf.com/components/bar-chart) |
|
|
@@ -782,6 +783,42 @@ function resized(size: number) { current.value = 1; feedback.value = `每页 ${s
|
|
|
782
783
|
</template>
|
|
783
784
|
```
|
|
784
785
|
|
|
786
|
+
## TreeSelect
|
|
787
|
+
|
|
788
|
+
[组件文档与 live demo](https://x-next.yjmf.com/components/tree-select)。用于在层级数据中选择节点,`data` 是 `{ key, title, children }` 树。单选为标量、`multiple` 为数组、`treeCheckable` 勾选模式始终返回数组;`allowSearch` 默认多选 / 勾选开启、单选关闭,`checkedStrategy` 默认 `parent`。
|
|
789
|
+
|
|
790
|
+
勾选模式默认父子联动:勾选叶子会向上影响父级半选 / 全选,禁用与 `disableCheckbox` 节点不参与联动。`checkedStrategy` 决定回填 key:`parent` 只回填最高层已选节点,`child` 只回填叶子,`all` 返回全部;`treeCheckStrictly` 关闭联动且策略不生效。`change(value, info)` 的 `info` 含 `node`、`checked` / `selected`;`expand(keys, info)` 报告展开变化,`node-click` 报告节点点击。`v-model:expanded-keys` 控制展开,`default-expand-all` 只初始化。
|
|
791
|
+
|
|
792
|
+
多选 / 勾选模式下点击节点会清空搜索词,需要保留时用 `allowSearch: { retainInputValue: true }`。`labelInValue` 时值为 `{ value, label, raw }`;`data` 中不存在的选中值默认保留并按 key 回显,`fallbackOption` 传函数可自定义、传 `false` 丢弃。异步子节点用 `isLeaf: false` + `loadMore`,展开时先加载再展开。搜索默认按标题过滤并保留命中祖先,`filterTreeNode` 可自定义;远程搜索设置 `filterTreeNode=false` 并用 `@search` 替换 `data`。大数据量传 `virtualListProps` 开启虚拟滚动。实例方法 `focus()` / `blur()` / `expandAll()` / `checkAll()`。
|
|
793
|
+
|
|
794
|
+
```vue
|
|
795
|
+
<script setup lang="ts">
|
|
796
|
+
import { ref } from 'vue';
|
|
797
|
+
import { TreeSelect } from 'x-next';
|
|
798
|
+
import 'x-next/dist/style.css';
|
|
799
|
+
const region = ref<string | number | undefined>('hz');
|
|
800
|
+
const feedback = ref('已选:hz');
|
|
801
|
+
const data = [
|
|
802
|
+
{
|
|
803
|
+
key: 'zj',
|
|
804
|
+
title: '浙江省',
|
|
805
|
+
children: [
|
|
806
|
+
{ key: 'hz', title: '杭州' },
|
|
807
|
+
{ key: 'nb', title: '宁波' },
|
|
808
|
+
{ key: 'wz', title: '温州(暂停服务)', disabled: true },
|
|
809
|
+
],
|
|
810
|
+
},
|
|
811
|
+
];
|
|
812
|
+
function changed(value: unknown) {
|
|
813
|
+
feedback.value = value ? `已选:${String(value)}` : '已清空';
|
|
814
|
+
}
|
|
815
|
+
</script>
|
|
816
|
+
<template>
|
|
817
|
+
<TreeSelect v-model="region" :data="data" default-expand-all allow-clear placeholder="请选择城市" @change="changed" />
|
|
818
|
+
<p role="status">{{ feedback }}</p>
|
|
819
|
+
</template>
|
|
820
|
+
```
|
|
821
|
+
|
|
785
822
|
## Steps
|
|
786
823
|
|
|
787
824
|
[组件文档与 live demo](https://x-next.yjmf.com/components/steps)。子组件的公开名称是 `Step`。使用 `v-model:current`,序号从 **1** 开始,`defaultCurrent=1`、`status='process'`、`type='default'`、`direction='horizontal'`;点击切换需开启 `changeable`,默认关闭。
|
|
@@ -8278,6 +8315,701 @@ const handleChangeActive = () => {
|
|
|
8278
8315
|
</template>
|
|
8279
8316
|
```
|
|
8280
8317
|
|
|
8318
|
+
## TreeSelect 扩展场景
|
|
8319
|
+
|
|
8320
|
+
### 用途与选型
|
|
8321
|
+
|
|
8322
|
+
用于在层级数据中选择单个、多个或勾选一批节点,适合地区、组织架构、分类目录、指标维度等字段。
|
|
8323
|
+
|
|
8324
|
+
|
|
8325
|
+
### 何时使用
|
|
8326
|
+
|
|
8327
|
+
候选项存在父子层级,并希望像 Select 一样在下拉里完成选择时使用 TreeSelect;地区、部门、目录、指标树都是典型场景。平铺枚举用 Select,独立的多列级联用 Cascader;需要直接浏览树结构时使用独立的 Tree 组件。
|
|
8328
|
+
|
|
8329
|
+
|
|
8330
|
+
### 基础用法
|
|
8331
|
+
|
|
8332
|
+
单选点击叶子节点后关闭面板并回显标题;点击分支节点只展开 / 收起。`allowClear` 提供清空按钮;禁用节点不可点击,也不会在清空时被误删。
|
|
8333
|
+
|
|
8334
|
+
```vue
|
|
8335
|
+
<script setup lang="ts">
|
|
8336
|
+
import 'x-next/style.css';
|
|
8337
|
+
import { ref } from 'vue';
|
|
8338
|
+
import { TreeSelect } from 'x-next';
|
|
8339
|
+
import type { TreeSelectNodeData, TreeSelectValue } from 'x-next';
|
|
8340
|
+
|
|
8341
|
+
const value = ref<string | number | undefined>('hz');
|
|
8342
|
+
const feedback = ref('已选:hz');
|
|
8343
|
+
const data: TreeSelectNodeData[] = [
|
|
8344
|
+
{
|
|
8345
|
+
key: 'zj',
|
|
8346
|
+
title: '浙江省',
|
|
8347
|
+
children: [
|
|
8348
|
+
{ key: 'hz', title: '杭州' },
|
|
8349
|
+
{ key: 'nb', title: '宁波' },
|
|
8350
|
+
{ key: 'wz', title: '温州(暂停服务)', disabled: true },
|
|
8351
|
+
],
|
|
8352
|
+
},
|
|
8353
|
+
];
|
|
8354
|
+
function changed(value: TreeSelectValue | TreeSelectValue[] | undefined) {
|
|
8355
|
+
feedback.value = value ? `已选:${String(value)}` : '已清空';
|
|
8356
|
+
}
|
|
8357
|
+
</script>
|
|
8358
|
+
<template>
|
|
8359
|
+
<TreeSelect
|
|
8360
|
+
v-model="value"
|
|
8361
|
+
:data="data"
|
|
8362
|
+
default-expand-all
|
|
8363
|
+
allow-clear
|
|
8364
|
+
placeholder="请选择城市"
|
|
8365
|
+
@change="changed"
|
|
8366
|
+
/>
|
|
8367
|
+
<p>{{ feedback }}</p>
|
|
8368
|
+
</template>
|
|
8369
|
+
```
|
|
8370
|
+
|
|
8371
|
+
### 多选
|
|
8372
|
+
|
|
8373
|
+
`multiple` 开启多选,值始终是数组,面板保持展开直到点击外部或按 Escape。`maxTagCount` 只折叠展示,不限制数量;`tagNowrap` 让标签不换行。多选 / 勾选模式下点击节点会清空搜索词(与 Select 一致),需要保留搜索词时用 `allowSearch: { retainInputValue: true }`。
|
|
8374
|
+
|
|
8375
|
+
```vue
|
|
8376
|
+
<script setup lang="ts">
|
|
8377
|
+
import 'x-next/style.css';
|
|
8378
|
+
import { ref } from 'vue';
|
|
8379
|
+
import { TreeSelect } from 'x-next';
|
|
8380
|
+
import type { TreeSelectNodeData, TreeSelectValue } from 'x-next';
|
|
8381
|
+
|
|
8382
|
+
const value = ref<(string | number)[]>(['hz', 'nb']);
|
|
8383
|
+
const data: TreeSelectNodeData[] = [
|
|
8384
|
+
{
|
|
8385
|
+
key: 'zj',
|
|
8386
|
+
title: '浙江省',
|
|
8387
|
+
children: [
|
|
8388
|
+
{ key: 'hz', title: '杭州' },
|
|
8389
|
+
{ key: 'nb', title: '宁波' },
|
|
8390
|
+
{ key: 'wz', title: '温州(暂停服务)', disabled: true },
|
|
8391
|
+
],
|
|
8392
|
+
},
|
|
8393
|
+
];
|
|
8394
|
+
function removed(value: TreeSelectValue | undefined) {
|
|
8395
|
+
console.log('移除:', value);
|
|
8396
|
+
}
|
|
8397
|
+
</script>
|
|
8398
|
+
<template>
|
|
8399
|
+
<TreeSelect
|
|
8400
|
+
v-model="value"
|
|
8401
|
+
:data="data"
|
|
8402
|
+
multiple
|
|
8403
|
+
default-expand-all
|
|
8404
|
+
allow-clear
|
|
8405
|
+
:max-tag-count="2"
|
|
8406
|
+
tag-nowrap
|
|
8407
|
+
placeholder="可多选城市"
|
|
8408
|
+
@remove="removed"
|
|
8409
|
+
/>
|
|
8410
|
+
</template>
|
|
8411
|
+
```
|
|
8412
|
+
|
|
8413
|
+
### 勾选模式与父子联动
|
|
8414
|
+
|
|
8415
|
+
`treeCheckable` 开启复选框。勾选叶子后父节点自动变为半选;半选节点不出现在值里。默认 `checkedStrategy="parent"`,勾选整个分支时只回填父节点 key。禁用和 `disableCheckbox` 节点不参与联动,但仍可被父节点联动勾选。
|
|
8416
|
+
|
|
8417
|
+
```vue
|
|
8418
|
+
<script setup lang="ts">
|
|
8419
|
+
import 'x-next/style.css';
|
|
8420
|
+
import { ref } from 'vue';
|
|
8421
|
+
import { TreeSelect } from 'x-next';
|
|
8422
|
+
import type { TreeSelectNodeData, TreeSelectValue } from 'x-next';
|
|
8423
|
+
|
|
8424
|
+
const value = ref<(string | number)[]>(['hz']);
|
|
8425
|
+
const data: TreeSelectNodeData[] = [
|
|
8426
|
+
{
|
|
8427
|
+
key: 'zj',
|
|
8428
|
+
title: '浙江省',
|
|
8429
|
+
children: [
|
|
8430
|
+
{ key: 'hz', title: '杭州' },
|
|
8431
|
+
{ key: 'nb', title: '宁波' },
|
|
8432
|
+
],
|
|
8433
|
+
},
|
|
8434
|
+
];
|
|
8435
|
+
function changed(value: TreeSelectValue | TreeSelectValue[] | undefined, info: Record<string, unknown>) {
|
|
8436
|
+
console.log('当前值:', value, '节点:', info.node);
|
|
8437
|
+
}
|
|
8438
|
+
</script>
|
|
8439
|
+
<template>
|
|
8440
|
+
<TreeSelect
|
|
8441
|
+
v-model="value"
|
|
8442
|
+
:data="data"
|
|
8443
|
+
tree-checkable
|
|
8444
|
+
default-expand-all
|
|
8445
|
+
placeholder="勾选城市"
|
|
8446
|
+
@change="changed"
|
|
8447
|
+
/>
|
|
8448
|
+
</template>
|
|
8449
|
+
```
|
|
8450
|
+
|
|
8451
|
+
### 勾选策略
|
|
8452
|
+
|
|
8453
|
+
`checkedStrategy` 控制回填值的粒度:`parent`(默认)保留最高层已选节点,`child` 只保留叶子,`all` 返回全部勾选节点。切换策略只影响后续回填值,规范业务数据时用 `parent` 更省心。
|
|
8454
|
+
|
|
8455
|
+
```vue
|
|
8456
|
+
<script setup lang="ts">
|
|
8457
|
+
import 'x-next/style.css';
|
|
8458
|
+
import { ref } from 'vue';
|
|
8459
|
+
import { TreeSelect, RadioGroup, Radio } from 'x-next';
|
|
8460
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8461
|
+
|
|
8462
|
+
const value = ref<(string | number)[]>(['zj']);
|
|
8463
|
+
const strategy = ref<'parent' | 'child' | 'all'>('parent');
|
|
8464
|
+
const data: TreeSelectNodeData[] = [
|
|
8465
|
+
{
|
|
8466
|
+
key: 'zj',
|
|
8467
|
+
title: '浙江省',
|
|
8468
|
+
children: [
|
|
8469
|
+
{ key: 'hz', title: '杭州' },
|
|
8470
|
+
{ key: 'nb', title: '宁波' },
|
|
8471
|
+
],
|
|
8472
|
+
},
|
|
8473
|
+
];
|
|
8474
|
+
</script>
|
|
8475
|
+
<template>
|
|
8476
|
+
<RadioGroup v-model="strategy">
|
|
8477
|
+
<Radio value="parent">parent</Radio>
|
|
8478
|
+
<Radio value="child">child</Radio>
|
|
8479
|
+
<Radio value="all">all</Radio>
|
|
8480
|
+
</RadioGroup>
|
|
8481
|
+
<TreeSelect
|
|
8482
|
+
v-model="value"
|
|
8483
|
+
:data="data"
|
|
8484
|
+
tree-checkable
|
|
8485
|
+
default-expand-all
|
|
8486
|
+
:checked-strategy="strategy"
|
|
8487
|
+
/>
|
|
8488
|
+
<p>当前值:{{ value }}</p>
|
|
8489
|
+
</template>
|
|
8490
|
+
```
|
|
8491
|
+
|
|
8492
|
+
### 严格勾选模式
|
|
8493
|
+
|
|
8494
|
+
`treeCheckStrictly` 取消父子联动,勾选状态完全由业务控制;值为 `['zj']` 时子节点不会被自动勾选。适合「父级只作为分组标题、勾选互相独立」的场景。
|
|
8495
|
+
|
|
8496
|
+
```vue
|
|
8497
|
+
<script setup lang="ts">
|
|
8498
|
+
import 'x-next/style.css';
|
|
8499
|
+
import { ref } from 'vue';
|
|
8500
|
+
import { TreeSelect } from 'x-next';
|
|
8501
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8502
|
+
|
|
8503
|
+
const value = ref<(string | number)[]>(['zj']);
|
|
8504
|
+
const data: TreeSelectNodeData[] = [
|
|
8505
|
+
{
|
|
8506
|
+
key: 'zj',
|
|
8507
|
+
title: '浙江省',
|
|
8508
|
+
children: [
|
|
8509
|
+
{ key: 'hz', title: '杭州' },
|
|
8510
|
+
{ key: 'nb', title: '宁波' },
|
|
8511
|
+
],
|
|
8512
|
+
},
|
|
8513
|
+
];
|
|
8514
|
+
</script>
|
|
8515
|
+
<template>
|
|
8516
|
+
<TreeSelect v-model="value" :data="data" tree-checkable tree-check-strictly default-expand-all />
|
|
8517
|
+
</template>
|
|
8518
|
+
```
|
|
8519
|
+
|
|
8520
|
+
### 搜索与自定义过滤
|
|
8521
|
+
|
|
8522
|
+
`allowSearch` 开启搜索框。默认按标题忽略大小写匹配,命中节点的祖先会保留展示,命中的文字自动高亮。`filterTreeNode` 可换成按编码等业务字段匹配;`search` 事件在 `searchDelay`(默认 500ms)后触发,适合远程查询。
|
|
8523
|
+
|
|
8524
|
+
```vue
|
|
8525
|
+
<script setup lang="ts">
|
|
8526
|
+
import 'x-next/style.css';
|
|
8527
|
+
import { ref } from 'vue';
|
|
8528
|
+
import { TreeSelect } from 'x-next';
|
|
8529
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8530
|
+
|
|
8531
|
+
const value = ref<string | number | undefined>('');
|
|
8532
|
+
const input = ref('');
|
|
8533
|
+
const data: TreeSelectNodeData[] = [
|
|
8534
|
+
{
|
|
8535
|
+
key: 'zj',
|
|
8536
|
+
title: '浙江省',
|
|
8537
|
+
code: '330000',
|
|
8538
|
+
children: [{ key: 'hz', title: '杭州', code: '330100' }],
|
|
8539
|
+
},
|
|
8540
|
+
];
|
|
8541
|
+
const filterByCodeOrTitle = (input: string, node: TreeSelectNodeData) =>
|
|
8542
|
+
String(node.code ?? '').includes(input) || String(node.title ?? '').includes(input);
|
|
8543
|
+
</script>
|
|
8544
|
+
<template>
|
|
8545
|
+
<TreeSelect
|
|
8546
|
+
v-model="value"
|
|
8547
|
+
v-model:input-value="input"
|
|
8548
|
+
:data="data"
|
|
8549
|
+
allow-search
|
|
8550
|
+
:filter-tree-node="filterByCodeOrTitle"
|
|
8551
|
+
placeholder="输入城市名或行政区划代码"
|
|
8552
|
+
@search="query => console.log('搜索:', query)"
|
|
8553
|
+
/>
|
|
8554
|
+
</template>
|
|
8555
|
+
```
|
|
8556
|
+
|
|
8557
|
+
### 异步加载子节点
|
|
8558
|
+
|
|
8559
|
+
给节点的 `isLeaf: false`,并传入 `loadMore`,展开时先请求子级、成功后再展开;加载中的节点显示转圈图标。适合目录、组织架构等大数据量场景,配合 `search` 事件还能实现远程搜索。
|
|
8560
|
+
|
|
8561
|
+
```vue
|
|
8562
|
+
<script setup lang="ts">
|
|
8563
|
+
import 'x-next/style.css';
|
|
8564
|
+
import { ref } from 'vue';
|
|
8565
|
+
import { TreeSelect } from 'x-next';
|
|
8566
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8567
|
+
|
|
8568
|
+
const value = ref<string | number | undefined>('');
|
|
8569
|
+
const data = ref<TreeSelectNodeData[]>([
|
|
8570
|
+
{ key: 'region-east', title: '华东大区', isLeaf: false },
|
|
8571
|
+
]);
|
|
8572
|
+
const loadRegion = (node: TreeSelectNodeData): Promise<void> =>
|
|
8573
|
+
new Promise((resolve) => {
|
|
8574
|
+
setTimeout(() => {
|
|
8575
|
+
node.children = [
|
|
8576
|
+
{ key: `${node.key}-a`, title: `${node.title} · 一组` },
|
|
8577
|
+
{ key: `${node.key}-b`, title: `${node.title} · 二组` },
|
|
8578
|
+
];
|
|
8579
|
+
resolve();
|
|
8580
|
+
}, 600);
|
|
8581
|
+
});
|
|
8582
|
+
</script>
|
|
8583
|
+
<template>
|
|
8584
|
+
<TreeSelect v-model="value" :data="data" :load-more="loadRegion" placeholder="展开大区加载子级" />
|
|
8585
|
+
</template>
|
|
8586
|
+
```
|
|
8587
|
+
|
|
8588
|
+
### 展开控制
|
|
8589
|
+
|
|
8590
|
+
`default-expand-all` 首次渲染展开全部节点;`v-model:expanded-keys` 受控展开状态;`default-expanded-keys` 只指定部分节点;`auto-expand-parent`(默认开启)会在指定节点参与展开时自动补全祖先。
|
|
8591
|
+
|
|
8592
|
+
```vue
|
|
8593
|
+
<script setup lang="ts">
|
|
8594
|
+
import 'x-next/style.css';
|
|
8595
|
+
import { ref } from 'vue';
|
|
8596
|
+
import { TreeSelect } from 'x-next';
|
|
8597
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8598
|
+
|
|
8599
|
+
const value = ref<string | number | undefined>('');
|
|
8600
|
+
const expandedKeys = ref<(string | number)[]>(['zj']);
|
|
8601
|
+
const data: TreeSelectNodeData[] = [
|
|
8602
|
+
{
|
|
8603
|
+
key: 'zj',
|
|
8604
|
+
title: '浙江省',
|
|
8605
|
+
children: [{ key: 'hz', title: '杭州' }],
|
|
8606
|
+
},
|
|
8607
|
+
];
|
|
8608
|
+
</script>
|
|
8609
|
+
<template>
|
|
8610
|
+
<TreeSelect
|
|
8611
|
+
v-model="value"
|
|
8612
|
+
v-model:expanded-keys="expandedKeys"
|
|
8613
|
+
:data="data"
|
|
8614
|
+
@expand="keys => console.log('展开:', keys)"
|
|
8615
|
+
/>
|
|
8616
|
+
</template>
|
|
8617
|
+
```
|
|
8618
|
+
|
|
8619
|
+
### 自定义字段名
|
|
8620
|
+
|
|
8621
|
+
`fieldNames` 把 `key`、`title`、`children`、`disabled` 等字段映射到业务数据上,无需在进入组件前转换结构。`checkable`、`disableCheckbox`、`selectable`、`isLeaf`、`icon` 同样可映射。
|
|
8622
|
+
|
|
8623
|
+
```vue
|
|
8624
|
+
<script setup lang="ts">
|
|
8625
|
+
import 'x-next/style.css';
|
|
8626
|
+
import { ref } from 'vue';
|
|
8627
|
+
import { TreeSelect } from 'x-next';
|
|
8628
|
+
|
|
8629
|
+
const value = ref<string | number | undefined>('dept-design');
|
|
8630
|
+
const data = [
|
|
8631
|
+
{
|
|
8632
|
+
id: 'dept',
|
|
8633
|
+
name: '产品技术中心',
|
|
8634
|
+
sub: [
|
|
8635
|
+
{ id: 'dept-design', name: '设计部' },
|
|
8636
|
+
{ id: 'dept-fe', name: '前端组' },
|
|
8637
|
+
],
|
|
8638
|
+
},
|
|
8639
|
+
];
|
|
8640
|
+
</script>
|
|
8641
|
+
<template>
|
|
8642
|
+
<TreeSelect
|
|
8643
|
+
v-model="value"
|
|
8644
|
+
:data="data"
|
|
8645
|
+
:field-names="{ key: 'id', title: 'name', children: 'sub' }"
|
|
8646
|
+
default-expand-all
|
|
8647
|
+
placeholder="选择部门"
|
|
8648
|
+
/>
|
|
8649
|
+
</template>
|
|
8650
|
+
```
|
|
8651
|
+
|
|
8652
|
+
### 值与标题
|
|
8653
|
+
|
|
8654
|
+
`labelInValue` 让值变成 `{ value, label, raw }` 对象,提交表单或保存草稿时无需再反查标题;数据中已不存在的选中值会保留并在标签里回显,`fallbackOption` 关闭后则直接丢弃。
|
|
8655
|
+
|
|
8656
|
+
```vue
|
|
8657
|
+
<script setup lang="ts">
|
|
8658
|
+
import 'x-next/style.css';
|
|
8659
|
+
import { ref } from 'vue';
|
|
8660
|
+
import { TreeSelect } from 'x-next';
|
|
8661
|
+
import type { TreeSelectNodeData, TreeSelectValue } from 'x-next';
|
|
8662
|
+
|
|
8663
|
+
const value = ref<{ value: string | number; label: string } | undefined>({ value: 'hz', label: '杭州' });
|
|
8664
|
+
const data: TreeSelectNodeData[] = [
|
|
8665
|
+
{
|
|
8666
|
+
key: 'zj',
|
|
8667
|
+
title: '浙江省',
|
|
8668
|
+
children: [{ key: 'hz', title: '杭州' }],
|
|
8669
|
+
},
|
|
8670
|
+
];
|
|
8671
|
+
function changed(value: TreeSelectValue | TreeSelectValue[] | undefined) {
|
|
8672
|
+
console.log('当前值:', value);
|
|
8673
|
+
}
|
|
8674
|
+
</script>
|
|
8675
|
+
<template>
|
|
8676
|
+
<TreeSelect v-model="value" :data="data" label-in-value default-expand-all allow-clear @change="changed" />
|
|
8677
|
+
</template>
|
|
8678
|
+
```
|
|
8679
|
+
|
|
8680
|
+
### 自定义节点
|
|
8681
|
+
|
|
8682
|
+
`title` 插槽拿到节点状态(`checked` / `halfChecked` / `selected` / `expanded` / `level`),`node-icon` 与 `switcher-icon` 分别替换节点前缀图标和展开箭头;数据里的 `icon` 字段也可以直接给节点配置图标函数。
|
|
8683
|
+
|
|
8684
|
+
```vue
|
|
8685
|
+
<script setup lang="ts">
|
|
8686
|
+
import 'x-next/style.css';
|
|
8687
|
+
import { ref } from 'vue';
|
|
8688
|
+
import { TreeSelect } from 'x-next';
|
|
8689
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8690
|
+
|
|
8691
|
+
const value = ref<string | number | undefined>('hz');
|
|
8692
|
+
const data: TreeSelectNodeData[] = [
|
|
8693
|
+
{
|
|
8694
|
+
key: 'cloud',
|
|
8695
|
+
title: '云平台',
|
|
8696
|
+
children: [
|
|
8697
|
+
{ key: 'hz', title: '杭州集群', status: 'healthy' },
|
|
8698
|
+
{ key: 'nb', title: '宁波集群', status: 'warning' },
|
|
8699
|
+
],
|
|
8700
|
+
},
|
|
8701
|
+
];
|
|
8702
|
+
</script>
|
|
8703
|
+
<template>
|
|
8704
|
+
<TreeSelect v-model="value" :data="data" default-expand-all>
|
|
8705
|
+
<template #title="{ node, checked }">
|
|
8706
|
+
<span>
|
|
8707
|
+
{{ node.title }}
|
|
8708
|
+
<i v-if="node.status">{{ node.status === 'healthy' ? '●' : '▲' }}</i>
|
|
8709
|
+
</span>
|
|
8710
|
+
</template>
|
|
8711
|
+
</TreeSelect>
|
|
8712
|
+
</template>
|
|
8713
|
+
```
|
|
8714
|
+
|
|
8715
|
+
### 连接线与整行节点
|
|
8716
|
+
|
|
8717
|
+
`showLine` 显示层级连接线,最后一个子节点的线止于自身行中;`blockNode` 让节点占据整行、悬停与选中背景铺满,适合表格筛选器里的窄宽度选择框。两者可以组合。
|
|
8718
|
+
|
|
8719
|
+
```vue
|
|
8720
|
+
<script setup lang="ts">
|
|
8721
|
+
import 'x-next/style.css';
|
|
8722
|
+
import { ref } from 'vue';
|
|
8723
|
+
import { TreeSelect, Switch } from 'x-next';
|
|
8724
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8725
|
+
|
|
8726
|
+
const value = ref<string | number | undefined>('sz-tc');
|
|
8727
|
+
const block = ref(true);
|
|
8728
|
+
const data: TreeSelectNodeData[] = [
|
|
8729
|
+
{
|
|
8730
|
+
key: 'zj',
|
|
8731
|
+
title: '浙江省',
|
|
8732
|
+
children: [
|
|
8733
|
+
{ key: 'hz', title: '杭州' },
|
|
8734
|
+
{ key: 'nb', title: '宁波' },
|
|
8735
|
+
],
|
|
8736
|
+
},
|
|
8737
|
+
];
|
|
8738
|
+
</script>
|
|
8739
|
+
<template>
|
|
8740
|
+
<Switch v-model="block" checked-text="整行" unchecked-text="缩进" />
|
|
8741
|
+
<TreeSelect
|
|
8742
|
+
v-model="value"
|
|
8743
|
+
:data="data"
|
|
8744
|
+
show-line
|
|
8745
|
+
:block-node="block"
|
|
8746
|
+
default-expand-all
|
|
8747
|
+
allow-clear
|
|
8748
|
+
placeholder="带连接线的树"
|
|
8749
|
+
/>
|
|
8750
|
+
</template>
|
|
8751
|
+
```
|
|
8752
|
+
|
|
8753
|
+
### 禁用、错误、加载与尺寸
|
|
8754
|
+
|
|
8755
|
+
`disabled` 关闭交互,`error` 标记校验失败,`loading` 展示加载图标并在面板内显示加载态,`size` 支持 `mini` / `small` / `medium` / `large`。这些状态与 Select 保持一致,可直接放进 FormItem。
|
|
8756
|
+
|
|
8757
|
+
```vue
|
|
8758
|
+
<script setup lang="ts">
|
|
8759
|
+
import 'x-next/style.css';
|
|
8760
|
+
import { ref } from 'vue';
|
|
8761
|
+
import { TreeSelect, Button } from 'x-next';
|
|
8762
|
+
|
|
8763
|
+
const value = ref<string | number | undefined>('a');
|
|
8764
|
+
const loading = ref(false);
|
|
8765
|
+
const data = [
|
|
8766
|
+
{ key: 'a', title: '可选节点 A' },
|
|
8767
|
+
{ key: 'b', title: '可选节点 B' },
|
|
8768
|
+
];
|
|
8769
|
+
</script>
|
|
8770
|
+
<template>
|
|
8771
|
+
<TreeSelect :data="data" size="mini" placeholder="mini" />
|
|
8772
|
+
<TreeSelect :data="data" size="small" placeholder="small" />
|
|
8773
|
+
<TreeSelect :data="data" size="medium" placeholder="medium" />
|
|
8774
|
+
<TreeSelect :data="data" size="large" placeholder="large" />
|
|
8775
|
+
<TreeSelect :data="data" disabled placeholder="禁用" />
|
|
8776
|
+
<TreeSelect v-model="value" :data="data" error placeholder="错误" />
|
|
8777
|
+
<TreeSelect :data="data" :loading="loading" placeholder="加载" />
|
|
8778
|
+
<Button size="small" @click="loading = !loading">{{ loading ? '结束加载' : '模拟加载' }}</Button>
|
|
8779
|
+
</template>
|
|
8780
|
+
```
|
|
8781
|
+
|
|
8782
|
+
### 缺失值回显
|
|
8783
|
+
|
|
8784
|
+
当值对应的节点不在当前 `data`(数据权限、分页、远程未命中)时,默认保留该值并以原始 key 回显;`fallbackOption` 传函数可自定义回显内容,传 `false` 则丢弃不存在节点。下拉里也会把这类值显示为额外节点,方便用户主动清除。
|
|
8785
|
+
|
|
8786
|
+
```vue
|
|
8787
|
+
<script setup lang="ts">
|
|
8788
|
+
import 'x-next/style.css';
|
|
8789
|
+
import { ref } from 'vue';
|
|
8790
|
+
import { TreeSelect } from 'x-next';
|
|
8791
|
+
|
|
8792
|
+
const value = ref<string | number | undefined>('archived-node');
|
|
8793
|
+
const data = [
|
|
8794
|
+
{ key: 'a', title: '可选节点 A' },
|
|
8795
|
+
{ key: 'b', title: '可选节点 B' },
|
|
8796
|
+
];
|
|
8797
|
+
const fallback = (value: string | number) => ({
|
|
8798
|
+
key: value,
|
|
8799
|
+
title: `归档节点(${String(value)})`,
|
|
8800
|
+
});
|
|
8801
|
+
</script>
|
|
8802
|
+
<template>
|
|
8803
|
+
<TreeSelect v-model="value" :data="data" :fallback-option="fallback" allow-clear />
|
|
8804
|
+
</template>
|
|
8805
|
+
```
|
|
8806
|
+
|
|
8807
|
+
### 虚拟列表
|
|
8808
|
+
|
|
8809
|
+
数据量大时传入 `virtualListProps` 开启虚拟滚动,`height` 控制可视区高度;关闭 `scrollbar` 可退回原生滚动条。搜索命中的节点同样按扁平结果虚拟化,不会因为层级展开而失效。
|
|
8810
|
+
|
|
8811
|
+
```vue
|
|
8812
|
+
<script setup lang="ts">
|
|
8813
|
+
import 'x-next/style.css';
|
|
8814
|
+
import { ref } from 'vue';
|
|
8815
|
+
import { TreeSelect } from 'x-next';
|
|
8816
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8817
|
+
|
|
8818
|
+
const value = ref<string | number | undefined>('');
|
|
8819
|
+
const data: TreeSelectNodeData[] = Array.from({ length: 240 }, (_, index) => ({
|
|
8820
|
+
key: `node-${index + 1}`,
|
|
8821
|
+
title: `数据节点 ${index + 1}`,
|
|
8822
|
+
isLeaf: true,
|
|
8823
|
+
}));
|
|
8824
|
+
</script>
|
|
8825
|
+
<template>
|
|
8826
|
+
<TreeSelect
|
|
8827
|
+
v-model="value"
|
|
8828
|
+
:data="data"
|
|
8829
|
+
:virtual-list-props="{ height: 220 }"
|
|
8830
|
+
allow-search
|
|
8831
|
+
allow-clear
|
|
8832
|
+
placeholder="240 个扁平节点"
|
|
8833
|
+
/>
|
|
8834
|
+
</template>
|
|
8835
|
+
```
|
|
8836
|
+
|
|
8837
|
+
### 下拉定制与批量操作
|
|
8838
|
+
|
|
8839
|
+
`header` / `footer` 插槽承载批量操作,`show-header-on-empty` / `show-footer-on-empty` 决定空态时是否保留;`empty` 替换空态。配合实例方法 `checkAll()` 与 `expandAll()` 可以做出「全选 / 展开全部」的工具条。
|
|
8840
|
+
|
|
8841
|
+
```vue
|
|
8842
|
+
<script setup lang="ts">
|
|
8843
|
+
import 'x-next/style.css';
|
|
8844
|
+
import { ref } from 'vue';
|
|
8845
|
+
import { TreeSelect, Button } from 'x-next';
|
|
8846
|
+
import type { TreeSelectInstance, TreeSelectNodeData } from 'x-next';
|
|
8847
|
+
|
|
8848
|
+
const value = ref<(string | number)[]>([]);
|
|
8849
|
+
const select = ref<TreeSelectInstance>();
|
|
8850
|
+
const data: TreeSelectNodeData[] = [
|
|
8851
|
+
{
|
|
8852
|
+
key: 'east',
|
|
8853
|
+
title: '华东区',
|
|
8854
|
+
children: [
|
|
8855
|
+
{ key: 'east-hz', title: '杭州' },
|
|
8856
|
+
{ key: 'east-nb', title: '宁波' },
|
|
8857
|
+
],
|
|
8858
|
+
},
|
|
8859
|
+
];
|
|
8860
|
+
</script>
|
|
8861
|
+
<template>
|
|
8862
|
+
<TreeSelect ref="select" v-model="value" :data="data" tree-checkable default-expand-all>
|
|
8863
|
+
<template #header>
|
|
8864
|
+
<Button size="mini" @click="select?.checkAll(true)">全选</Button>
|
|
8865
|
+
<Button size="mini" @click="select?.checkAll(false)">清空</Button>
|
|
8866
|
+
<Button size="mini" @click="select?.expandAll(true)">展开全部</Button>
|
|
8867
|
+
</template>
|
|
8868
|
+
<template #footer>已选 {{ value.length }} 项</template>
|
|
8869
|
+
</TreeSelect>
|
|
8870
|
+
</template>
|
|
8871
|
+
```
|
|
8872
|
+
|
|
8873
|
+
### 自定义触发器与实例方法
|
|
8874
|
+
|
|
8875
|
+
默认触发器承载输入与标签;如需完全自定义,使用 `trigger` 插槽并绑定 `onKeydown`,同时补齐 `role="combobox"` 与 ARIA。实例方法提供 `focus()` / `blur()` / `expandAll()` / `checkAll()`。
|
|
8876
|
+
|
|
8877
|
+
```vue
|
|
8878
|
+
<script setup lang="ts">
|
|
8879
|
+
import 'x-next/style.css';
|
|
8880
|
+
import { ref } from 'vue';
|
|
8881
|
+
import { TreeSelect } from 'x-next';
|
|
8882
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8883
|
+
|
|
8884
|
+
const value = ref<string | number | undefined>('');
|
|
8885
|
+
const popup = ref(false);
|
|
8886
|
+
const data: TreeSelectNodeData[] = [
|
|
8887
|
+
{
|
|
8888
|
+
key: 'east',
|
|
8889
|
+
title: '华东区',
|
|
8890
|
+
children: [{ key: 'east-hz', title: '杭州' }],
|
|
8891
|
+
},
|
|
8892
|
+
];
|
|
8893
|
+
</script>
|
|
8894
|
+
<template>
|
|
8895
|
+
<TreeSelect v-model="value" v-model:popup-visible="popup" :data="data" default-expand-all>
|
|
8896
|
+
<template #trigger="{ popupVisible, disabled, treeId, activeDescendant, onKeydown }">
|
|
8897
|
+
<button
|
|
8898
|
+
type="button" role="combobox" :disabled="disabled" aria-label="自定义地区选择"
|
|
8899
|
+
aria-haspopup="tree" :aria-expanded="popupVisible" :aria-controls="treeId"
|
|
8900
|
+
:aria-activedescendant="activeDescendant" @keydown="onKeydown"
|
|
8901
|
+
>{{ value || '选择地区' }}</button>
|
|
8902
|
+
</template>
|
|
8903
|
+
</TreeSelect>
|
|
8904
|
+
</template>
|
|
8905
|
+
```
|
|
8906
|
+
|
|
8907
|
+
### 在 Form 中校验
|
|
8908
|
+
|
|
8909
|
+
放在 FormItem 中即可继承尺寸、禁用与校验状态;值变化会触发 `validateTrigger`。必填校验使用 FormItem 的规则,不要依赖原生表单控件。
|
|
8910
|
+
|
|
8911
|
+
```vue
|
|
8912
|
+
<script setup lang="ts">
|
|
8913
|
+
import 'x-next/style.css';
|
|
8914
|
+
import { reactive, ref } from 'vue';
|
|
8915
|
+
import { Form, FormItem, TreeSelect, Button, Space } from 'x-next';
|
|
8916
|
+
import type { FieldRule, FormInstance, TreeSelectNodeData } from 'x-next';
|
|
8917
|
+
|
|
8918
|
+
const state = reactive<{ region: string | number | undefined }>({ region: undefined });
|
|
8919
|
+
const rules: Record<string, FieldRule[]> = { region: [{ required: true, message: '请选择归属地区' }] };
|
|
8920
|
+
const form = ref<FormInstance>();
|
|
8921
|
+
const result = ref('');
|
|
8922
|
+
const data: TreeSelectNodeData[] = [
|
|
8923
|
+
{
|
|
8924
|
+
key: 'zj',
|
|
8925
|
+
title: '浙江省',
|
|
8926
|
+
children: [{ key: 'hz', title: '杭州' }],
|
|
8927
|
+
},
|
|
8928
|
+
];
|
|
8929
|
+
const validate = async () => {
|
|
8930
|
+
const errors = await form.value!.validate();
|
|
8931
|
+
result.value = errors ? '校验失败' : '校验通过';
|
|
8932
|
+
};
|
|
8933
|
+
</script>
|
|
8934
|
+
<template>
|
|
8935
|
+
<Form ref="form" :model="state" :rules="rules">
|
|
8936
|
+
<FormItem field="region" label="归属地区" required>
|
|
8937
|
+
<TreeSelect v-model="state.region" :data="data" default-expand-all allow-clear />
|
|
8938
|
+
</FormItem>
|
|
8939
|
+
<Button type="primary" @click="validate">校验</Button>
|
|
8940
|
+
<p>{{ result }}</p>
|
|
8941
|
+
</Form>
|
|
8942
|
+
</template>
|
|
8943
|
+
```
|
|
8944
|
+
|
|
8945
|
+
### 键盘与无障碍
|
|
8946
|
+
|
|
8947
|
+
面板打开后:`↑` / `↓` 在可见节点间移动,`→` 展开当前节点或进入第一个子节点,`←` 收起或回到父节点,`Enter` 选中节点,勾选模式下 `空格` 切换勾选,`Escape` 关闭面板,`Tab` 离开并关闭。Home / End 在搜索框为空时跳到首 / 末节点。触发器是 `role="combobox"` 并关联 `aria-controls` / `aria-activedescendant`,树容器是 `role="tree"`,节点带 `aria-level`、`aria-selected`、`aria-checked`(半选为 `mixed`)。
|
|
8948
|
+
|
|
8949
|
+
```vue
|
|
8950
|
+
<script setup lang="ts">
|
|
8951
|
+
import 'x-next/style.css';
|
|
8952
|
+
import { ref } from 'vue';
|
|
8953
|
+
import { TreeSelect } from 'x-next';
|
|
8954
|
+
import type { TreeSelectNodeData } from 'x-next';
|
|
8955
|
+
|
|
8956
|
+
const value = ref<string | number | undefined>('');
|
|
8957
|
+
const popup = ref(false);
|
|
8958
|
+
const data: TreeSelectNodeData[] = [
|
|
8959
|
+
{
|
|
8960
|
+
key: 'zj',
|
|
8961
|
+
title: '浙江省',
|
|
8962
|
+
children: [{ key: 'hz', title: '杭州' }],
|
|
8963
|
+
},
|
|
8964
|
+
];
|
|
8965
|
+
import type { HTMLAttributes } from 'vue';
|
|
8966
|
+
const nativeAttrs1 = { "aria-label": "键盘选择地区" } satisfies HTMLAttributes;
|
|
8967
|
+
</script>
|
|
8968
|
+
<template>
|
|
8969
|
+
<TreeSelect v-bind="nativeAttrs1"
|
|
8970
|
+
v-model="value"
|
|
8971
|
+
v-model:popup-visible="popup"
|
|
8972
|
+
:data="data"
|
|
8973
|
+
default-expand-all
|
|
8974
|
+
|
|
8975
|
+
placeholder="方向键选择,Enter 确认"
|
|
8976
|
+
/>
|
|
8977
|
+
</template>
|
|
8978
|
+
```
|
|
8979
|
+
|
|
8980
|
+
### 节点数据
|
|
8981
|
+
|
|
8982
|
+
| 字段 | 说明 | 类型 | 默认值 |
|
|
8983
|
+
| --- | --- | --- | --- |
|
|
8984
|
+
| `key` | 节点键值,全局唯一;不传按路径生成 | `string \| number` | `-` |
|
|
8985
|
+
| `title` | 节点标题 | `string` | 取 `key` |
|
|
8986
|
+
| `children` | 子节点 | `TreeSelectNodeData[]` | `-` |
|
|
8987
|
+
| `disabled` | 是否禁用(不可选、不可勾选、不参与联动) | `boolean` | `false` |
|
|
8988
|
+
| `checkable` | 是否可勾选 | `boolean` | `true` |
|
|
8989
|
+
| `disableCheckbox` | 是否禁用复选框(仍可被父节点联动) | `boolean` | `false` |
|
|
8990
|
+
| `selectable` | 是否可选中 | `boolean` | `true` |
|
|
8991
|
+
| `isLeaf` | 是否叶子节点(配合 `loadMore`) | `boolean` | 无子节点即叶子 |
|
|
8992
|
+
| `icon` | 节点前缀图标 | `() => VNode` | `-` |
|
|
8993
|
+
|
|
8994
|
+
|
|
8995
|
+
### 无障碍
|
|
8996
|
+
|
|
8997
|
+
- 触发器输入为 `role="combobox"`,带 `aria-haspopup="tree"`、`aria-expanded`、`aria-controls` 和 `aria-activedescendant`。
|
|
8998
|
+
- 树容器为 `role="tree"`,节点为 `role="treeitem"`,带 `aria-level`、`aria-posinset`、`aria-setsize`、`aria-selected`、`aria-expanded`、`aria-checked`(半选为 `mixed`)。
|
|
8999
|
+
- 键盘完整支持 `↑` / `↓` / `←` / `→` / `Home` / `End` / `Enter` / `空格` / `Escape` / `Tab`。
|
|
9000
|
+
- 标签关闭按钮与清空按钮均为真实按钮并提供无障碍名称;移除标签后焦点回到输入框。
|
|
9001
|
+
|
|
9002
|
+
|
|
9003
|
+
### 已知限制
|
|
9004
|
+
|
|
9005
|
+
- 勾选模式下 `treeCheckStrictly` 为真时半选概念不生效,值完全由业务控制,请保持值与 `data` 同步。
|
|
9006
|
+
- `checkedStrategy` 在 `treeCheckStrictly` 下不生效(严格模式直接返回勾选集合)。
|
|
9007
|
+
- `loadMore` 依赖节点的 `isLeaf: false` 标记;数据里已有 `children` 的节点不会再触发加载。
|
|
9008
|
+
- 搜索为前端过滤;远程搜索请设置 `filterTreeNode=false`,用 `@search` 请求数据并替换 `data`。
|
|
9009
|
+
- 节点 `key` 必须唯一;重复键会退化为路径键并在控制台告警。
|
|
9010
|
+
- 与 Arco 的差异:`checkedStrategy` 默认 `parent`(Arco 默认 `all`),并在其基础上提供 `child`;值可为 `labelInValue` 对象且附带 `raw` 原始节点,属于 x-next 的扩展。
|
|
9011
|
+
|
|
9012
|
+
|
|
8281
9013
|
## Empty 扩展场景
|
|
8282
9014
|
|
|
8283
9015
|
### 用途与选型
|
|
@@ -9580,6 +10312,33 @@ const series = ref([
|
|
|
9580
10312
|
</template>
|
|
9581
10313
|
```
|
|
9582
10314
|
|
|
10315
|
+
### CSS 变量与系列颜色
|
|
10316
|
+
|
|
10317
|
+
`series[].color` 和 `labels.color` 支持 CSS 自定义属性引用(含 fallback),以及具名颜色、hex、rgb/rgba、hsl/hsla。传入值原样用于折线、面积、数据点、图例和提示色块,变量在图表所在节点解析;变量值变化无需替换系列数据。未传颜色时使用内置主题色板。
|
|
10318
|
+
|
|
10319
|
+
```vue
|
|
10320
|
+
<script setup lang="ts">
|
|
10321
|
+
import 'x-next/style.css';
|
|
10322
|
+
const area = ref(true);
|
|
10323
|
+
|
|
10324
|
+
import { ref } from 'vue';
|
|
10325
|
+
import { Button, LineChart } from 'x-next';
|
|
10326
|
+
import type { LineChartSeries } from 'x-next';
|
|
10327
|
+
|
|
10328
|
+
const alternateColor = ref(false);
|
|
10329
|
+
const series: LineChartSeries[] = [
|
|
10330
|
+
{ name: '访问量(PV)', data: [20, 45, 30], color: 'var(--demo-line-color, var(--x-color-primary-6))' },
|
|
10331
|
+
];
|
|
10332
|
+
</script>
|
|
10333
|
+
<template>
|
|
10334
|
+
<div :style="{ '--demo-line-color': alternateColor ? 'var(--x-color-success-6)' : 'var(--x-color-primary-6)' }">
|
|
10335
|
+
<Button @click="alternateColor = !alternateColor">切换系列颜色</Button>
|
|
10336
|
+
<LineChart :categories="['10-07', '10-08', '10-09']" :series="series"
|
|
10337
|
+
:labels="{ color: 'var(--x-color-text-primary)' }" area legend ariaLabel="CSS 变量颜色示例" />
|
|
10338
|
+
</div>
|
|
10339
|
+
</template>
|
|
10340
|
+
```
|
|
10341
|
+
|
|
9583
10342
|
### 面积图与堆叠面积
|
|
9584
10343
|
|
|
9585
10344
|
`area` 打开填充;配合 `stack` 变为堆叠面积。堆叠面积适合看「总量 + 构成」——每层填充在下界与上界之间。
|
|
@@ -10293,6 +11052,35 @@ const visible = rightVisible;
|
|
|
10293
11052
|
</template>
|
|
10294
11053
|
```
|
|
10295
11054
|
|
|
11055
|
+
### 长内容滚动
|
|
11056
|
+
|
|
11057
|
+
默认布局由内部 Scrollbar 滚动正文,标题和底部操作区保持可见。四个方向、有无 footer 均适用;`bodyStyle` 的 padding 包含在正文高度内。`fill` 插槽替换整套布局时,滚动与标题布局由插槽内容负责。
|
|
11058
|
+
|
|
11059
|
+
```vue
|
|
11060
|
+
<script setup lang="ts">
|
|
11061
|
+
import 'x-next/style.css';
|
|
11062
|
+
import { ref } from 'vue';
|
|
11063
|
+
import { Button, Drawer, Space } from 'x-next';
|
|
11064
|
+
|
|
11065
|
+
const visible = ref(false);
|
|
11066
|
+
const placement = ref<'left' | 'right' | 'top' | 'bottom'>('right');
|
|
11067
|
+
const showFooter = ref(false);
|
|
11068
|
+
const placements = ['left', 'right', 'top', 'bottom'] as const;
|
|
11069
|
+
</script>
|
|
11070
|
+
<template>
|
|
11071
|
+
<label><input v-model="showFooter" type="checkbox" /> 显示底部操作区</label>
|
|
11072
|
+
<Space>
|
|
11073
|
+
<Button v-for="side in placements" :key="side" @click="placement = side; visible = true">
|
|
11074
|
+
{{ side }} 长内容
|
|
11075
|
+
</Button>
|
|
11076
|
+
</Space>
|
|
11077
|
+
<Drawer v-model="visible" title="长内容滚动" :placement="placement"
|
|
11078
|
+
:width="560" :height="360" :show-footer="showFooter" :body-style="{ padding: '20px' }">
|
|
11079
|
+
<p v-for="index in 40" :key="index">发布记录 {{ index }}:正文滚动后,标题和底部操作区仍可操作。</p>
|
|
11080
|
+
</Drawer>
|
|
11081
|
+
</template>
|
|
11082
|
+
```
|
|
11083
|
+
|
|
10296
11084
|
### 受控与事件
|
|
10297
11085
|
|
|
10298
11086
|
```vue
|
|
@@ -15137,6 +15925,49 @@ const data: TableData[] = [
|
|
|
15137
15925
|
</template>
|
|
15138
15926
|
```
|
|
15139
15927
|
|
|
15928
|
+
### 页面页头与表格内部层级
|
|
15929
|
+
|
|
15930
|
+
Table 根节点建立独立层叠上下文,固定列、吸顶表头和滚动轨道的层级限制在表格内部。下面的页面页头使用 `z-index: 10`;纵向滚动后应始终覆盖表格,横向滚动仍保留左右固定列。可切换吸顶表头和自定义滚动条检查组合行为。
|
|
15931
|
+
|
|
15932
|
+
公开 CSS 变量 `--x-table-fixed-z-index`(默认 10)和 `--x-table-header-z-index`(默认 100)用于调整表格内部层级。可在 Table 的 `style` 或主题容器上设置;整个表格与页面浮层的顺序由业务容器的 `z-index` 决定。
|
|
15933
|
+
|
|
15934
|
+
```vue
|
|
15935
|
+
<script setup lang="ts">
|
|
15936
|
+
import 'x-next/style.css';
|
|
15937
|
+
import { ref } from 'vue';
|
|
15938
|
+
import { Table } from 'x-next';
|
|
15939
|
+
import type { TableColumnData } from 'x-next';
|
|
15940
|
+
|
|
15941
|
+
const stickyHeader = ref(true);
|
|
15942
|
+
const scrollbar = ref(true);
|
|
15943
|
+
const columns: TableColumnData[] = [
|
|
15944
|
+
{ title: '名称', dataIndex: 'name', width: 180, fixed: 'left' },
|
|
15945
|
+
{ title: '说明', dataIndex: 'description', width: 640 },
|
|
15946
|
+
{ title: '状态', dataIndex: 'status', width: 140, fixed: 'right' },
|
|
15947
|
+
];
|
|
15948
|
+
const data = Array.from({ length: 25 }, (_, index) => ({
|
|
15949
|
+
key: String(index), name: `记录 ${index + 1}`, description: '横向滚动检查左右固定列', status: '已发布',
|
|
15950
|
+
}));
|
|
15951
|
+
</script>
|
|
15952
|
+
<template>
|
|
15953
|
+
<label><input v-model="stickyHeader" type="checkbox" /> 吸顶表头</label>
|
|
15954
|
+
<label><input v-model="scrollbar" type="checkbox" /> 自定义滚动条</label>
|
|
15955
|
+
<div class="table-layer-demo">
|
|
15956
|
+
<div class="table-layer-demo__header">页面页头:应始终覆盖滚动中的表格</div>
|
|
15957
|
+
<Table :columns="columns" :data="data" :scroll="{ x: 960 }"
|
|
15958
|
+
:sticky-header="stickyHeader ? 55 : false" :scrollbar="scrollbar" :pagination="false" />
|
|
15959
|
+
</div>
|
|
15960
|
+
</template>
|
|
15961
|
+
<style scoped>
|
|
15962
|
+
.table-layer-demo { width: 100%; max-width: 720px; height: 300px; overflow: auto; }
|
|
15963
|
+
.table-layer-demo__header {
|
|
15964
|
+
position: sticky; top: 0; z-index: 10; height: 55px;
|
|
15965
|
+
display: flex; align-items: center; padding: 0 16px;
|
|
15966
|
+
background: var(--x-color-bg-surface); color: var(--x-color-text-primary);
|
|
15967
|
+
}
|
|
15968
|
+
</style>
|
|
15969
|
+
```
|
|
15970
|
+
|
|
15140
15971
|
### 固定操作列与状态控制
|
|
15141
15972
|
|
|
15142
15973
|
同时展示手柄、展开、选择和左右固定列。调整列宽会保留当前排序与筛选;只清空某一列时,其他列筛选继续生效。选中行在条纹和悬浮下仍保持选中反馈。
|
|
@@ -26499,7 +27330,7 @@ interface LineChartSeries {
|
|
|
26499
27330
|
name?: string;
|
|
26500
27331
|
/** 该系列按 categories 顺序排列的值 */
|
|
26501
27332
|
data: Array<number | null | undefined>;
|
|
26502
|
-
/**
|
|
27333
|
+
/** 该系列的颜色,支持 CSS 变量及 fallback;默认取内置分类色板(按系列下标循环) */
|
|
26503
27334
|
color?: CSSColor;
|
|
26504
27335
|
}
|
|
26505
27336
|
|
|
@@ -26521,7 +27352,7 @@ interface LineChartLabelsOptions {
|
|
|
26521
27352
|
yFormatter?: (value: number) => string;
|
|
26522
27353
|
/** 轴标签字号,默认 12 */
|
|
26523
27354
|
fontSize?: number;
|
|
26524
|
-
/**
|
|
27355
|
+
/** 轴标签颜色,支持 CSS 变量及 fallback;默认取组件文字 token */
|
|
26525
27356
|
color?: CSSColor;
|
|
26526
27357
|
}
|
|
26527
27358
|
|
|
@@ -33788,6 +34619,496 @@ type Filters = Record<string, string[]>;
|
|
|
33788
34619
|
```
|
|
33789
34620
|
|
|
33790
34621
|
|
|
34622
|
+
## TreeSelect API
|
|
34623
|
+
|
|
34624
|
+
公开声明:`dist/components/tree-select/index.d.ts`。 类型中的 undefined 表示可省略;原始 prop 默认值不等于继承配置或服务默认值。
|
|
34625
|
+
|
|
34626
|
+
### Props
|
|
34627
|
+
|
|
34628
|
+
| 名称 | 用途 | 公开类型 | 必填 | 声明默认值 |
|
|
34629
|
+
| --- | --- | --- | --- | --- |
|
|
34630
|
+
| modelValue | 绑定值,勾选 / 多选为数组 | undefined | string | number | TreeSelectLabelValue | TreeSelectValue[] | 否 | undefined |
|
|
34631
|
+
| defaultValue | 默认值(非受控) | undefined | string | number | TreeSelectLabelValue | TreeSelectValue[] | 否 | 工厂函数(每个实例初始化;有效值见行为说明) |
|
|
34632
|
+
| multiple | 是否多选 | undefined | false | true | 否 | false |
|
|
34633
|
+
| treeCheckable | 是否开启勾选模式,值始终为数组 | undefined | false | true | 否 | false |
|
|
34634
|
+
| treeCheckStrictly | 勾选模式是否取消父子联动 | undefined | false | true | 否 | false |
|
|
34635
|
+
| checkedStrategy | 勾选回填策略 | undefined | "all" | "parent" | "child" | 否 | "parent" |
|
|
34636
|
+
| data | 树数据 | undefined | TreeSelectNodeData[] | 否 | [] |
|
|
34637
|
+
| fieldNames | 自定义节点字段名 | undefined | { [x: string]: string | undefined; key?: string | undefined; title?: string | undefined; children?: string | undefined; disabled?: string | undefined; checkable?: string | undefined; disableCheckbox?: string | undefined; selectable?: string | undefined; isLeaf?: string | undefined; icon?: string | undefined; } | 否 | 未声明 |
|
|
34638
|
+
| labelInValue | 值是否包含标题 | undefined | false | true | 否 | false |
|
|
34639
|
+
| selectable | 节点可选规则,支持 'leaf' 或方法 | undefined | false | true | "leaf" | (node: TreeSelectNodeData, info: { isLeaf: boolean; level: number; }) => boolean | 否 | true |
|
|
34640
|
+
| allowSearch | 是否允许搜索 | undefined | false | true | { retainInputValue?: boolean; } | 否 | 工厂函数(每个实例初始化;有效值见行为说明) |
|
|
34641
|
+
| allowClear | 是否允许清空 | undefined | false | true | 否 | false |
|
|
34642
|
+
| filterTreeNode | 过滤节点方法,false 关闭过滤 | undefined | false | true | (inputValue: string, node: TreeSelectNodeData) => boolean | 否 | true |
|
|
34643
|
+
| searchDelay | search 事件触发延迟 | undefined | number | 否 | 500 |
|
|
34644
|
+
| inputValue | 搜索输入值(v-model) | undefined | string | 否 | 未声明 |
|
|
34645
|
+
| defaultInputValue | 默认搜索输入值 | undefined | string | 否 | "" |
|
|
34646
|
+
| size | 尺寸 | undefined | "mini" | "small" | "medium" | "large" | 否 | 未声明 |
|
|
34647
|
+
| placeholder | 占位提示 | undefined | string | 否 | 未声明 |
|
|
34648
|
+
| loading | 是否加载中 | undefined | false | true | 否 | false |
|
|
34649
|
+
| disabled | 是否禁用 | undefined | false | true | 否 | false |
|
|
34650
|
+
| error | 是否错误状态 | undefined | false | true | 否 | false |
|
|
34651
|
+
| bordered | 是否显示边框 | undefined | false | true | 否 | true |
|
|
34652
|
+
| maxTagCount | 最多展示标签数,0 不限制 | undefined | number | 否 | 0 |
|
|
34653
|
+
| tagNowrap | 标签是否不换行 | undefined | false | true | 否 | false |
|
|
34654
|
+
| popupVisible | 面板显示状态(v-model) | undefined | false | true | 否 | undefined |
|
|
34655
|
+
| defaultPopupVisible | 面板默认显示状态 | undefined | false | true | 否 | false |
|
|
34656
|
+
| unmountOnClose | 关闭时销毁面板 | undefined | false | true | 否 | false |
|
|
34657
|
+
| popupContainer | 弹出层挂载容器 | undefined | string | HTMLElement | 否 | 未声明 |
|
|
34658
|
+
| triggerProps | 触发器配置 | undefined | TriggerProps | 否 | 未声明 |
|
|
34659
|
+
| defaultExpandAll | 默认展开全部节点 | undefined | false | true | 否 | false |
|
|
34660
|
+
| expandedKeys | 展开节点(v-model) | undefined | TreeSelectKey[] | 否 | undefined |
|
|
34661
|
+
| defaultExpandedKeys | 默认展开节点 | undefined | TreeSelectKey[] | 否 | [] |
|
|
34662
|
+
| autoExpandParent | 是否自动展开父节点 | undefined | false | true | 否 | true |
|
|
34663
|
+
| showLine | 是否显示连接线 | undefined | false | true | 否 | false |
|
|
34664
|
+
| blockNode | 节点占据整行 | undefined | false | true | 否 | false |
|
|
34665
|
+
| virtualListProps | 虚拟列表配置,传入即开启 | undefined | VirtualListProps | 否 | 未声明 |
|
|
34666
|
+
| scrollbar | 是否开启滚动条或滚动条配置 | undefined | false | true | ScrollbarProps | 否 | true |
|
|
34667
|
+
| maxHeight | 下拉列表最大高度 | undefined | string | number | 否 | 未声明 |
|
|
34668
|
+
| loadMore | 异步加载子节点 | undefined | (node: TreeSelectNodeData) => Promise<void> | 否 | 未声明 |
|
|
34669
|
+
| fallbackOption | 自定义缺失值显示,false 丢弃 | undefined | false | true | (value: TreeSelectKey) => TreeSelectNodeData | 否 | true |
|
|
34670
|
+
| formatLabel | 格式化显示内容 | undefined | (data: TreeSelectNodeData) => string | 否 | 未声明 |
|
|
34671
|
+
| showHeaderOnEmpty | 空态是否显示页头 | undefined | false | true | 否 | false |
|
|
34672
|
+
| showFooterOnEmpty | 空态是否显示页脚 | undefined | false | true | 否 | false |
|
|
34673
|
+
|
|
34674
|
+
### Events
|
|
34675
|
+
|
|
34676
|
+
| 事件 | 用途 | 监听器签名(即事件参数) |
|
|
34677
|
+
| --- | --- | --- |
|
|
34678
|
+
| update:modelValue | 值更新时触发 | undefined | (value: TreeSelectValue | TreeSelectValue[] | undefined) => any |
|
|
34679
|
+
| update:inputValue | 搜索输入更新时触发 | undefined | (inputValue: string) => any |
|
|
34680
|
+
| update:popupVisible | 面板显隐更新时触发 | undefined | (visible: boolean) => any |
|
|
34681
|
+
| update:expandedKeys | 展开节点更新时触发 | undefined | (keys: TreeSelectKey[]) => any |
|
|
34682
|
+
| change | 值变化时触发 | undefined | (value: TreeSelectValue | TreeSelectValue[] | undefined, info: Record<string, unknown>) => any |
|
|
34683
|
+
| inputValueChange | 搜索输入变化时触发 | undefined | (inputValue: string) => any |
|
|
34684
|
+
| search | 用户搜索时触发(searchDelay 后) | undefined | (inputValue: string) => any |
|
|
34685
|
+
| popupVisibleChange | 面板显隐变化时触发 | undefined | (visible: boolean) => any |
|
|
34686
|
+
| clear | 点击清空按钮时触发 | undefined | (ev: Event) => any |
|
|
34687
|
+
| remove | 关闭多选标签时触发 | undefined | (removed: TreeSelectValue | undefined) => any |
|
|
34688
|
+
| expand | 展开状态变化时触发 | undefined | (keys: TreeSelectKey[], info: Record<string, unknown>) => any |
|
|
34689
|
+
| dropdownScroll | 下拉滚动时触发 | undefined | (ev: Event) => any |
|
|
34690
|
+
| nodeClick | 点击(勾选)节点时触发 | undefined | (value: TreeSelectValue, info: Record<string, unknown>) => any |
|
|
34691
|
+
| focus | 默认触发器聚焦 | undefined | (ev: FocusEvent) => any |
|
|
34692
|
+
| blur | 默认触发器失焦 | undefined | (ev: FocusEvent) => any |
|
|
34693
|
+
|
|
34694
|
+
### Slots
|
|
34695
|
+
|
|
34696
|
+
| 名称 | 用途 | 公开类型 |
|
|
34697
|
+
| --- | --- | --- |
|
|
34698
|
+
| title | 自定义节点标题;参数 { node, value, title, level, checked, halfChecked, selected, expanded, disabled, isLeaf } | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34699
|
+
| node-icon | 节点前缀图标;参数 { node } | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34700
|
+
| switcher-icon | 展开 / 收起图标;参数 { node, expanded, loading } | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34701
|
+
| label | 选择框显示内容;参数 { data },data 为 { value, label, raw } | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34702
|
+
| header | 下拉页头 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34703
|
+
| footer | 下拉页脚 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34704
|
+
| empty | 空状态内容 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34705
|
+
| prefix | 选择框前缀元素 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34706
|
+
| arrow-icon | 箭头图标 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34707
|
+
| loading-icon | 加载中图标 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34708
|
+
| search-icon | 搜索图标 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34709
|
+
| trigger | 自定义触发元素;参数 { popupVisible, disabled, treeId, activeDescendant, onKeydown } | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
|
|
34710
|
+
|
|
34711
|
+
### 实例方法 / 暴露值
|
|
34712
|
+
|
|
34713
|
+
| 名称 | 公开类型 |
|
|
34714
|
+
| --- | --- |
|
|
34715
|
+
| focus | 公开声明未细化(用法和实现已显式暴露) |
|
|
34716
|
+
| blur | 公开声明未细化(用法和实现已显式暴露) |
|
|
34717
|
+
| expandAll | 公开声明未细化(用法和实现已显式暴露) |
|
|
34718
|
+
| checkAll | 公开声明未细化(用法和实现已显式暴露) |
|
|
34719
|
+
|
|
34720
|
+
### 关联类型定义
|
|
34721
|
+
|
|
34722
|
+
以下摘自本组件族声明,供查阅嵌套配置;运行时和值类型均以根入口可导出项为准。
|
|
34723
|
+
|
|
34724
|
+
```typescript-reference
|
|
34725
|
+
type TreeSelectKey = string | number;
|
|
34726
|
+
|
|
34727
|
+
interface TreeSelectNodeData {
|
|
34728
|
+
/**
|
|
34729
|
+
* @zh 节点键值,全局唯一;不传时按节点路径自动生成
|
|
34730
|
+
* @en Node key, unique in the whole tree; generated from the node path when omitted
|
|
34731
|
+
*/
|
|
34732
|
+
key?: TreeSelectKey;
|
|
34733
|
+
/**
|
|
34734
|
+
* @zh 节点标题
|
|
34735
|
+
* @en Node title
|
|
34736
|
+
*/
|
|
34737
|
+
title?: string;
|
|
34738
|
+
/**
|
|
34739
|
+
* @zh 子节点
|
|
34740
|
+
* @en Child nodes
|
|
34741
|
+
*/
|
|
34742
|
+
children?: TreeSelectNodeData[];
|
|
34743
|
+
/**
|
|
34744
|
+
* @zh 是否禁用,禁用节点不可选中、不可勾选、不参与父子联动
|
|
34745
|
+
* @en Whether disabled. Disabled nodes cannot be selected or checked and are excluded from cascade
|
|
34746
|
+
*/
|
|
34747
|
+
disabled?: boolean;
|
|
34748
|
+
/**
|
|
34749
|
+
* @zh 是否可勾选,仅 `treeCheckable` 时生效
|
|
34750
|
+
* @en Whether checkable, only works with `treeCheckable`
|
|
34751
|
+
*/
|
|
34752
|
+
checkable?: boolean;
|
|
34753
|
+
/**
|
|
34754
|
+
* @zh 是否禁用复选框,仍可被父节点联动勾选
|
|
34755
|
+
* @en Whether the checkbox is disabled. The node can still be toggled by its parent
|
|
34756
|
+
*/
|
|
34757
|
+
disableCheckbox?: boolean;
|
|
34758
|
+
/**
|
|
34759
|
+
* @zh 是否可选中
|
|
34760
|
+
* @en Whether selectable
|
|
34761
|
+
*/
|
|
34762
|
+
selectable?: boolean;
|
|
34763
|
+
/**
|
|
34764
|
+
* @zh 是否为叶子节点,配合 `loadMore` 判断是否需要异步加载子节点
|
|
34765
|
+
* @en Whether it is a leaf, used with `loadMore` for lazy loading
|
|
34766
|
+
*/
|
|
34767
|
+
isLeaf?: boolean;
|
|
34768
|
+
/**
|
|
34769
|
+
* @zh 节点前缀图标
|
|
34770
|
+
* @en Node prefix icon
|
|
34771
|
+
*/
|
|
34772
|
+
icon?: RenderFunction;
|
|
34773
|
+
[other: string]: any;
|
|
34774
|
+
}
|
|
34775
|
+
|
|
34776
|
+
type TreeSelectFieldNames = FieldString<TreeSelectNodeData>;
|
|
34777
|
+
|
|
34778
|
+
interface TreeSelectLabelValue {
|
|
34779
|
+
/**
|
|
34780
|
+
* @zh 选中的键值
|
|
34781
|
+
* @en Selected key
|
|
34782
|
+
*/
|
|
34783
|
+
value: TreeSelectKey;
|
|
34784
|
+
/**
|
|
34785
|
+
* @zh 选中的标题
|
|
34786
|
+
* @en Selected title
|
|
34787
|
+
*/
|
|
34788
|
+
label: string;
|
|
34789
|
+
/**
|
|
34790
|
+
* @zh 节点原始数据
|
|
34791
|
+
* @en Raw node data
|
|
34792
|
+
*/
|
|
34793
|
+
raw?: TreeSelectNodeData;
|
|
34794
|
+
}
|
|
34795
|
+
|
|
34796
|
+
type TreeSelectValue = TreeSelectKey | TreeSelectLabelValue;
|
|
34797
|
+
|
|
34798
|
+
type TreeSelectFilterNode = (inputValue: string, node: TreeSelectNodeData) => boolean;
|
|
34799
|
+
|
|
34800
|
+
type TreeSelectSelectable = boolean | 'leaf' | ((node: TreeSelectNodeData, info: {
|
|
34801
|
+
isLeaf: boolean;
|
|
34802
|
+
level: number;
|
|
34803
|
+
}) => boolean);
|
|
34804
|
+
|
|
34805
|
+
interface TreeSelectInstance {
|
|
34806
|
+
/** 聚焦默认触发器 */
|
|
34807
|
+
focus: () => void;
|
|
34808
|
+
/** 失焦默认触发器 */
|
|
34809
|
+
blur: () => void;
|
|
34810
|
+
/** 展开 / 收起全部可展开节点,默认展开 */
|
|
34811
|
+
expandAll: (expanded?: boolean) => void;
|
|
34812
|
+
/** 全选 / 清空勾选,仅勾选模式生效,默认全选 */
|
|
34813
|
+
checkAll: (checked?: boolean) => void;
|
|
34814
|
+
}
|
|
34815
|
+
|
|
34816
|
+
interface TreeSelectProps {
|
|
34817
|
+
modelValue?: TreeSelectValue | TreeSelectValue[];
|
|
34818
|
+
defaultValue?: TreeSelectValue | TreeSelectValue[];
|
|
34819
|
+
multiple?: boolean;
|
|
34820
|
+
treeCheckable?: boolean;
|
|
34821
|
+
treeCheckStrictly?: boolean;
|
|
34822
|
+
checkedStrategy?: 'all' | 'parent' | 'child';
|
|
34823
|
+
data?: TreeSelectNodeData[];
|
|
34824
|
+
fieldNames?: TreeSelectFieldNames;
|
|
34825
|
+
labelInValue?: boolean;
|
|
34826
|
+
selectable?: TreeSelectSelectable;
|
|
34827
|
+
allowSearch?: boolean | {
|
|
34828
|
+
retainInputValue?: boolean;
|
|
34829
|
+
};
|
|
34830
|
+
allowClear?: boolean;
|
|
34831
|
+
filterTreeNode?: boolean | TreeSelectFilterNode;
|
|
34832
|
+
searchDelay?: number;
|
|
34833
|
+
inputValue?: string;
|
|
34834
|
+
defaultInputValue?: string;
|
|
34835
|
+
size?: Size;
|
|
34836
|
+
placeholder?: string;
|
|
34837
|
+
loading?: boolean;
|
|
34838
|
+
disabled?: boolean;
|
|
34839
|
+
error?: boolean;
|
|
34840
|
+
bordered?: boolean;
|
|
34841
|
+
maxTagCount?: number;
|
|
34842
|
+
tagNowrap?: boolean;
|
|
34843
|
+
popupVisible?: boolean;
|
|
34844
|
+
defaultPopupVisible?: boolean;
|
|
34845
|
+
unmountOnClose?: boolean;
|
|
34846
|
+
popupContainer?: string | HTMLElement;
|
|
34847
|
+
triggerProps?: TriggerProps;
|
|
34848
|
+
defaultExpandAll?: boolean;
|
|
34849
|
+
expandedKeys?: TreeSelectKey[];
|
|
34850
|
+
defaultExpandedKeys?: TreeSelectKey[];
|
|
34851
|
+
autoExpandParent?: boolean;
|
|
34852
|
+
showLine?: boolean;
|
|
34853
|
+
blockNode?: boolean;
|
|
34854
|
+
virtualListProps?: VirtualListProps;
|
|
34855
|
+
scrollbar?: boolean | ScrollbarProps;
|
|
34856
|
+
maxHeight?: number | string;
|
|
34857
|
+
loadMore?: (node: TreeSelectNodeData) => Promise<void>;
|
|
34858
|
+
fallbackOption?: boolean | ((value: TreeSelectKey) => TreeSelectNodeData);
|
|
34859
|
+
formatLabel?: (data: TreeSelectNodeData) => string;
|
|
34860
|
+
showHeaderOnEmpty?: boolean;
|
|
34861
|
+
showFooterOnEmpty?: boolean;
|
|
34862
|
+
}
|
|
34863
|
+
|
|
34864
|
+
interface TreeSelectNodeInfo {
|
|
34865
|
+
key: string;
|
|
34866
|
+
value: TreeSelectKey;
|
|
34867
|
+
title: string;
|
|
34868
|
+
raw: TreeSelectNodeData;
|
|
34869
|
+
level: number;
|
|
34870
|
+
index: number;
|
|
34871
|
+
parentKey?: string;
|
|
34872
|
+
pathKeys: string[];
|
|
34873
|
+
childrenKeys: string[];
|
|
34874
|
+
siblingIndex: number;
|
|
34875
|
+
siblingCount: number;
|
|
34876
|
+
isLeaf: boolean;
|
|
34877
|
+
disabled: boolean;
|
|
34878
|
+
checkable: boolean;
|
|
34879
|
+
disableCheckbox: boolean;
|
|
34880
|
+
selectable: boolean;
|
|
34881
|
+
loading: boolean;
|
|
34882
|
+
}
|
|
34883
|
+
|
|
34884
|
+
interface TreeSelectNodeSlotProps {
|
|
34885
|
+
node: TreeSelectNodeData;
|
|
34886
|
+
value: TreeSelectKey;
|
|
34887
|
+
title: string;
|
|
34888
|
+
level: number;
|
|
34889
|
+
checked: boolean;
|
|
34890
|
+
halfChecked: boolean;
|
|
34891
|
+
selected: boolean;
|
|
34892
|
+
expanded: boolean;
|
|
34893
|
+
disabled: boolean;
|
|
34894
|
+
isLeaf: boolean;
|
|
34895
|
+
}
|
|
34896
|
+
```
|
|
34897
|
+
|
|
34898
|
+
|
|
34899
|
+
## TreeSelectDropdown API
|
|
34900
|
+
|
|
34901
|
+
公开声明:`dist/components/tree-select/index.d.ts`。 类型中的 undefined 表示可省略;原始 prop 默认值不等于继承配置或服务默认值。
|
|
34902
|
+
|
|
34903
|
+
### Props
|
|
34904
|
+
|
|
34905
|
+
| 名称 | 用途 | 公开类型 | 必填 | 声明默认值 |
|
|
34906
|
+
| --- | --- | --- | --- | --- |
|
|
34907
|
+
| id | 见场景用法与类型 | undefined | string | 否 | 未声明 |
|
|
34908
|
+
| loading | 见场景用法与类型 | undefined | false | true | 否 | false(Vue Boolean 转换) |
|
|
34909
|
+
| empty | 见场景用法与类型 | undefined | false | true | 否 | false(Vue Boolean 转换) |
|
|
34910
|
+
| virtualList | 见场景用法与类型 | undefined | false | true | 否 | false(Vue Boolean 转换) |
|
|
34911
|
+
| showLine | 见场景用法与类型 | undefined | false | true | 否 | false(Vue Boolean 转换) |
|
|
34912
|
+
| scrollbar | 见场景用法与类型 | undefined | false | true | ScrollbarProps | 否 | true |
|
|
34913
|
+
| maxHeight | 见场景用法与类型 | undefined | string | number | 否 | 未声明 |
|
|
34914
|
+
| onScroll | 见场景用法与类型 | undefined | ((ev: Event) => void) & ((...args: any[]) => any) | ((ev: Event) => void)[] & ((...args: any[]) => any) | 否 | 未声明 |
|
|
34915
|
+
| showHeaderOnEmpty | 见场景用法与类型 | undefined | false | true | 否 | false |
|
|
34916
|
+
| showFooterOnEmpty | 见场景用法与类型 | undefined | false | true | 否 | false |
|
|
34917
|
+
|
|
34918
|
+
### Events
|
|
34919
|
+
|
|
34920
|
+
| 事件 | 用途 | 监听器签名(即事件参数) |
|
|
34921
|
+
| --- | --- | --- |
|
|
34922
|
+
| scroll | 见场景用法与类型 | undefined | ((ev: Event) => void) & ((...args: any[]) => any) | ((ev: Event) => void)[] & ((...args: any[]) => any) |
|
|
34923
|
+
| keydown | 见场景用法与类型 | undefined | (...args: any[]) => any |
|
|
34924
|
+
|
|
34925
|
+
### Slots
|
|
34926
|
+
|
|
34927
|
+
公开类型未逐项声明插槽;本页场景说明列出实际使用的插槽,不将任意插槽视为已支持。
|
|
34928
|
+
|
|
34929
|
+
### 实例方法
|
|
34930
|
+
|
|
34931
|
+
没有检索到显式 expose 或 Options API methods 的公开方法;不把 setup 内部函数当成稳定实例 API。
|
|
34932
|
+
|
|
34933
|
+
### 关联类型定义
|
|
34934
|
+
|
|
34935
|
+
以下摘自本组件族声明,供查阅嵌套配置;运行时和值类型均以根入口可导出项为准。
|
|
34936
|
+
|
|
34937
|
+
```typescript-reference
|
|
34938
|
+
type TreeSelectKey = string | number;
|
|
34939
|
+
|
|
34940
|
+
interface TreeSelectNodeData {
|
|
34941
|
+
/**
|
|
34942
|
+
* @zh 节点键值,全局唯一;不传时按节点路径自动生成
|
|
34943
|
+
* @en Node key, unique in the whole tree; generated from the node path when omitted
|
|
34944
|
+
*/
|
|
34945
|
+
key?: TreeSelectKey;
|
|
34946
|
+
/**
|
|
34947
|
+
* @zh 节点标题
|
|
34948
|
+
* @en Node title
|
|
34949
|
+
*/
|
|
34950
|
+
title?: string;
|
|
34951
|
+
/**
|
|
34952
|
+
* @zh 子节点
|
|
34953
|
+
* @en Child nodes
|
|
34954
|
+
*/
|
|
34955
|
+
children?: TreeSelectNodeData[];
|
|
34956
|
+
/**
|
|
34957
|
+
* @zh 是否禁用,禁用节点不可选中、不可勾选、不参与父子联动
|
|
34958
|
+
* @en Whether disabled. Disabled nodes cannot be selected or checked and are excluded from cascade
|
|
34959
|
+
*/
|
|
34960
|
+
disabled?: boolean;
|
|
34961
|
+
/**
|
|
34962
|
+
* @zh 是否可勾选,仅 `treeCheckable` 时生效
|
|
34963
|
+
* @en Whether checkable, only works with `treeCheckable`
|
|
34964
|
+
*/
|
|
34965
|
+
checkable?: boolean;
|
|
34966
|
+
/**
|
|
34967
|
+
* @zh 是否禁用复选框,仍可被父节点联动勾选
|
|
34968
|
+
* @en Whether the checkbox is disabled. The node can still be toggled by its parent
|
|
34969
|
+
*/
|
|
34970
|
+
disableCheckbox?: boolean;
|
|
34971
|
+
/**
|
|
34972
|
+
* @zh 是否可选中
|
|
34973
|
+
* @en Whether selectable
|
|
34974
|
+
*/
|
|
34975
|
+
selectable?: boolean;
|
|
34976
|
+
/**
|
|
34977
|
+
* @zh 是否为叶子节点,配合 `loadMore` 判断是否需要异步加载子节点
|
|
34978
|
+
* @en Whether it is a leaf, used with `loadMore` for lazy loading
|
|
34979
|
+
*/
|
|
34980
|
+
isLeaf?: boolean;
|
|
34981
|
+
/**
|
|
34982
|
+
* @zh 节点前缀图标
|
|
34983
|
+
* @en Node prefix icon
|
|
34984
|
+
*/
|
|
34985
|
+
icon?: RenderFunction;
|
|
34986
|
+
[other: string]: any;
|
|
34987
|
+
}
|
|
34988
|
+
|
|
34989
|
+
type TreeSelectFieldNames = FieldString<TreeSelectNodeData>;
|
|
34990
|
+
|
|
34991
|
+
interface TreeSelectLabelValue {
|
|
34992
|
+
/**
|
|
34993
|
+
* @zh 选中的键值
|
|
34994
|
+
* @en Selected key
|
|
34995
|
+
*/
|
|
34996
|
+
value: TreeSelectKey;
|
|
34997
|
+
/**
|
|
34998
|
+
* @zh 选中的标题
|
|
34999
|
+
* @en Selected title
|
|
35000
|
+
*/
|
|
35001
|
+
label: string;
|
|
35002
|
+
/**
|
|
35003
|
+
* @zh 节点原始数据
|
|
35004
|
+
* @en Raw node data
|
|
35005
|
+
*/
|
|
35006
|
+
raw?: TreeSelectNodeData;
|
|
35007
|
+
}
|
|
35008
|
+
|
|
35009
|
+
type TreeSelectValue = TreeSelectKey | TreeSelectLabelValue;
|
|
35010
|
+
|
|
35011
|
+
type TreeSelectFilterNode = (inputValue: string, node: TreeSelectNodeData) => boolean;
|
|
35012
|
+
|
|
35013
|
+
type TreeSelectSelectable = boolean | 'leaf' | ((node: TreeSelectNodeData, info: {
|
|
35014
|
+
isLeaf: boolean;
|
|
35015
|
+
level: number;
|
|
35016
|
+
}) => boolean);
|
|
35017
|
+
|
|
35018
|
+
interface TreeSelectInstance {
|
|
35019
|
+
/** 聚焦默认触发器 */
|
|
35020
|
+
focus: () => void;
|
|
35021
|
+
/** 失焦默认触发器 */
|
|
35022
|
+
blur: () => void;
|
|
35023
|
+
/** 展开 / 收起全部可展开节点,默认展开 */
|
|
35024
|
+
expandAll: (expanded?: boolean) => void;
|
|
35025
|
+
/** 全选 / 清空勾选,仅勾选模式生效,默认全选 */
|
|
35026
|
+
checkAll: (checked?: boolean) => void;
|
|
35027
|
+
}
|
|
35028
|
+
|
|
35029
|
+
interface TreeSelectProps {
|
|
35030
|
+
modelValue?: TreeSelectValue | TreeSelectValue[];
|
|
35031
|
+
defaultValue?: TreeSelectValue | TreeSelectValue[];
|
|
35032
|
+
multiple?: boolean;
|
|
35033
|
+
treeCheckable?: boolean;
|
|
35034
|
+
treeCheckStrictly?: boolean;
|
|
35035
|
+
checkedStrategy?: 'all' | 'parent' | 'child';
|
|
35036
|
+
data?: TreeSelectNodeData[];
|
|
35037
|
+
fieldNames?: TreeSelectFieldNames;
|
|
35038
|
+
labelInValue?: boolean;
|
|
35039
|
+
selectable?: TreeSelectSelectable;
|
|
35040
|
+
allowSearch?: boolean | {
|
|
35041
|
+
retainInputValue?: boolean;
|
|
35042
|
+
};
|
|
35043
|
+
allowClear?: boolean;
|
|
35044
|
+
filterTreeNode?: boolean | TreeSelectFilterNode;
|
|
35045
|
+
searchDelay?: number;
|
|
35046
|
+
inputValue?: string;
|
|
35047
|
+
defaultInputValue?: string;
|
|
35048
|
+
size?: Size;
|
|
35049
|
+
placeholder?: string;
|
|
35050
|
+
loading?: boolean;
|
|
35051
|
+
disabled?: boolean;
|
|
35052
|
+
error?: boolean;
|
|
35053
|
+
bordered?: boolean;
|
|
35054
|
+
maxTagCount?: number;
|
|
35055
|
+
tagNowrap?: boolean;
|
|
35056
|
+
popupVisible?: boolean;
|
|
35057
|
+
defaultPopupVisible?: boolean;
|
|
35058
|
+
unmountOnClose?: boolean;
|
|
35059
|
+
popupContainer?: string | HTMLElement;
|
|
35060
|
+
triggerProps?: TriggerProps;
|
|
35061
|
+
defaultExpandAll?: boolean;
|
|
35062
|
+
expandedKeys?: TreeSelectKey[];
|
|
35063
|
+
defaultExpandedKeys?: TreeSelectKey[];
|
|
35064
|
+
autoExpandParent?: boolean;
|
|
35065
|
+
showLine?: boolean;
|
|
35066
|
+
blockNode?: boolean;
|
|
35067
|
+
virtualListProps?: VirtualListProps;
|
|
35068
|
+
scrollbar?: boolean | ScrollbarProps;
|
|
35069
|
+
maxHeight?: number | string;
|
|
35070
|
+
loadMore?: (node: TreeSelectNodeData) => Promise<void>;
|
|
35071
|
+
fallbackOption?: boolean | ((value: TreeSelectKey) => TreeSelectNodeData);
|
|
35072
|
+
formatLabel?: (data: TreeSelectNodeData) => string;
|
|
35073
|
+
showHeaderOnEmpty?: boolean;
|
|
35074
|
+
showFooterOnEmpty?: boolean;
|
|
35075
|
+
}
|
|
35076
|
+
|
|
35077
|
+
interface TreeSelectNodeInfo {
|
|
35078
|
+
key: string;
|
|
35079
|
+
value: TreeSelectKey;
|
|
35080
|
+
title: string;
|
|
35081
|
+
raw: TreeSelectNodeData;
|
|
35082
|
+
level: number;
|
|
35083
|
+
index: number;
|
|
35084
|
+
parentKey?: string;
|
|
35085
|
+
pathKeys: string[];
|
|
35086
|
+
childrenKeys: string[];
|
|
35087
|
+
siblingIndex: number;
|
|
35088
|
+
siblingCount: number;
|
|
35089
|
+
isLeaf: boolean;
|
|
35090
|
+
disabled: boolean;
|
|
35091
|
+
checkable: boolean;
|
|
35092
|
+
disableCheckbox: boolean;
|
|
35093
|
+
selectable: boolean;
|
|
35094
|
+
loading: boolean;
|
|
35095
|
+
}
|
|
35096
|
+
|
|
35097
|
+
interface TreeSelectNodeSlotProps {
|
|
35098
|
+
node: TreeSelectNodeData;
|
|
35099
|
+
value: TreeSelectKey;
|
|
35100
|
+
title: string;
|
|
35101
|
+
level: number;
|
|
35102
|
+
checked: boolean;
|
|
35103
|
+
halfChecked: boolean;
|
|
35104
|
+
selected: boolean;
|
|
35105
|
+
expanded: boolean;
|
|
35106
|
+
disabled: boolean;
|
|
35107
|
+
isLeaf: boolean;
|
|
35108
|
+
}
|
|
35109
|
+
```
|
|
35110
|
+
|
|
35111
|
+
|
|
33791
35112
|
## TrendChart API
|
|
33792
35113
|
|
|
33793
35114
|
公开声明:`dist/components/trend-chart/index.d.ts`。 类型中的 undefined 表示可省略;原始 prop 默认值不等于继承配置或服务默认值。
|