FxTransfer 穿梭框
基础用法
数据通过 data 属性传入。数据需为对象数组,每个对象应包含:key(唯一标识)、label(显示文本)、disabled(是否禁用)。目标列内容与 v-model 绑定变量同步,该变量值为目标项 key 数组;初始化 v-model 即可预选目标项。
可搜索
可搜索过滤数据项。设置 filterable 为 true 开启过滤;默认按 label 包含匹配。也可通过 filter-method 自定义过滤逻辑——该方法接收搜索关键字与每个数据项,返回 true 即纳入结果。
自定义
可自定义列标题、按钮文本、数据项渲染、列表头部勾选计数文本、列底部内容。分别用 titles、button-texts、render-content / 默认作用域插槽、format、left-footer / right-footer。left-default-checked 与 right-default-checked 可设置初始勾选项。
自定义空态
可自定义列表为空、或过滤无匹配结果时的内容。通过 left-empty 与 right-empty 插槽分别定制两侧面板的空态。
字段别名
默认情况下,穿梭框会在数据项中查找 key、label 与 disabled。若数据项字段名不同,可用 props 属性定义别名。
虚拟滚动
数据量较大时可开启虚拟滚动提升性能。设置 virtual-scroll 为 true 开启,可用 item-size 自定义行高(默认 30px)。
API
Attributes
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| model-value (v-model) | 绑定值 | Array<string | number> | [] |
| data | 数据源 | Record<string, any>[] | [] |
| filterable | 是否可过滤 | boolean | false |
| filter-placeholder | 过滤框占位文本 | string | '请输入搜索内容' |
| filter-method | 自定义过滤方法 | (query: string, item: Record<string, any>) => boolean | — |
| target-order | 目标列排序策略:original 保持源顺序 / push 追加底部 / unshift 插入顶部 | 'original' / 'push' / 'unshift' | original |
| titles | 自定义列标题 | [string, string] | ['列表 1', '列表 2'] |
| button-texts | 自定义按钮文本 | [string, string] | [] |
| render-content | 自定义渲染函数 | (h, option) => VNode | VNode[] | — |
| format | 列表头部勾选状态文本格式 | TransferFormat | {} |
| props | 数据源字段别名 | TransferPropsAlias | — |
| left-default-checked | 左列初始勾选项 key 数组 | Array<string | number> | [] |
| right-default-checked | 右列初始勾选项 key 数组 | Array<string | number> | [] |
| validate-event | 是否在值变化时触发表单校验 | boolean | true |
| virtual-scroll | 是否开启虚拟滚动 | boolean | false |
| item-size | 虚拟滚动单项高度 | number | 30 |
Events
| 事件名 | 说明 | 类型 |
|---|---|---|
| change | 目标列变化时触发 | (value: TransferKey[], direction: TransferDirection, movedKeys: TransferKey[]) => void |
| left-check-change | 左列任一项勾选状态变化时触发 | (value: TransferKey[], movedKeys?: TransferKey[]) => void |
| right-check-change | 右列任一项勾选状态变化时触发 | (value: TransferKey[], movedKeys?: TransferKey[]) => void |
Slots
| 插槽名 | 说明 | 类型 |
|---|---|---|
| default | 自定义数据项内容 | { option: TransferDataItem } |
| left-footer | 左列底部内容 | — |
| right-footer | 右列底部内容 | — |
| left-empty | 左列为空或过滤无匹配时的内容 | — |
| right-empty | 右列为空或过滤无匹配时的内容 | — |
Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| clearQuery | 清空某侧面板的过滤关键字 | (which: TransferDirection) => void |
| leftPanel | 左侧面板实例 | Ref<FxTransferPanelInstance | undefined> |
| rightPanel | 右侧面板实例 | Ref<FxTransferPanelInstance | undefined> |
Transfer Panel API
Transfer Panel Exposes
| 名称 | 说明 | 类型 |
|---|---|---|
| query | 当前过滤关键字 | string |
类型声明
展开声明
ts
type TransferKey = string | number
type TransferDirection = "left" | "right"
type TransferDataItem = Record<string, any>
interface TransferFormat {
noChecked?: string
hasChecked?: string
}
interface TransferPropsAlias {
label?: string
key?: string
disabled?: string
}