组件/Transfer 穿梭框

Transfer 穿梭框

在两个列表间移动条目的穿梭框

已验证自 0.3.4

用法

可筛选穿梭

filterable 在两侧显示筛选输入;emptyText 本地化空态文案。

示例加载中...

优先级排序

orderable 让目标面板按 modelValue 顺序显示名次与上移 / 下移;maxHeight 让长列表在面板内滚动。

示例加载中...

权限资源授权

TxTransfer 只负责资源的受控移动;权限域、归属团队与审计分别交给 TxTree、TxTreeSelect 与 TxTimeline。

示例加载中...

最佳实践

  • modelValue 由业务侧受控,只保存条目 key;每个 data[].key 保持唯一且稳定。
  • 禁用项保留在 data 中展示,不在外层过滤掉,以免用户误以为资源不存在。
  • 选择顺序有意义时用 targetOrder="push";需要用户手动排序(优先级、回退链)时开 orderable。
  • 放进弹窗或抽屉时用 maxHeight 贴合容器(如 min(56dvh, 520px));紧凑位置调低 minHeight。
  • 本地化界面覆盖 titles、emptyText 与全部 *AriaLabel 属性。

API 参考

属性

属性名类型默认值说明
modelValue目标列表中的条目 key。
data全量条目,含 key、label 与可选的 disabled。
titles左右面板标题。
filterable两侧显示筛选输入。
filterPlaceholder筛选输入的占位文案。
emptyText面板为空时的文案;传元组则左右各用一条。
maxHeight面板高度上限,数字按 px;写入 --tx-transfer-max-height。
minHeight面板高度下限,数字按 px;写入 --tx-transfer-min-height。
addAriaLabel添加按钮的可访问名称。
removeAriaLabel移除按钮的可访问名称。
selectAllAriaLabel全选框的可访问名称,后接面板标题。
moveUpAriaLabel上移按钮的可访问名称,后接条目文本。
moveDownAriaLabel下移按钮的可访问名称,后接条目文本。
targetOrder目标列表按原始 data 顺序或追加顺序排列;`orderable` 时不生效。
orderable目标面板显示名次与上移/下移,顺序即 modelValue 顺序。

事件

事件参数说明
update:modelValueArray<string | number>已选 key 更新。
changeArray<string | number>与 update:modelValue 同时触发。

概述

  • 面板头部的全选框只作用于当前可见且未禁用的行;部分选中时报告 aria-checked="mixed"。
  • 勾选后按中间按钮移动,或直接双击一行;双击禁用行无效。
  • 中间按钮有勾选时变为主色并显示待移动数量,无勾选时禁用。
  • orderable 时名次与首末判定取自未过滤的 modelValue,筛选不影响名次。

技术实现

  • 面板读取 --tx-transfer-max-height(默认 320px)与 --tx-transfer-min-height(默认 240px),两个 prop 只写这两个变量;上限保证滚动发生在列表内部。
  • 源码:packages/tuffex/packages/components/src/transfer/。
查看源码
packages/tuffex/packages/components/src/transfer/index.ts