返回知识库

界面与交互 · 内容与数据展示

树形控件Tree

用于浏览与多选分层数据的展示型树;勾选父子联动、半选表示部分子节点已选,展开与勾选是两件独立的事。

促销类目树:勾选联动与半选都长在物件上

亲手展开类目、勾选父子节点、查看路径、搜索定位,再点「生成满减规则」——勾选方块、半选状态、摘要计数与规则卡都即时变,不只靠底部说明。

第 0 步:这是「满 300 减 50」促销的类目选择树。展开类目看子级;勾选节点注意三件事—— 勾父节点联动所有可选子节点;勾部分子节点父节点变半选;已下架节点留下但禁用并标注原因。右侧路径与计数随操作即时变;最后点「生成满减规则」(主操作)把已选固化成规则卡。

  • 家电3 个可选子类
    • 厨房家电2 个可选子类
      • 电饭煲86 件商品查看中
      • 微波炉94 件商品
  • 文具暂无商品
当前查看 · 路径电饭煲

家电 / 厨房家电 / 电饭煲

节点类型
叶子类目
覆盖范围
86 件商品
已勾选摘要 · 随勾选即时变已选 1 个叶子类目
覆盖商品
86
当前状态
已勾选 · 待生成

勾任意节点,父级半选、计数与覆盖件数一起变——结果长在物件上。

对照:默认勾了「电饭煲」一个叶子,父级「厨房家电 / 家电」自动变半选,摘要计数 1 个叶子类目。原因:树形勾选父子联动,半选表示部分子节点已选。下一步:勾「家电」整棵联动,或点「生成满减规则」把当前已选固化成规则。

面板教会的知识点

把刚才操作里看到的现象命名为六条规则。

  • 父子联动:勾父节点一次勾上全部可选子节点;取消父节点也一次清空整棵子树。
  • 半选 = 部分子节点已选:父节点方块变半选(减号),说明子级勾了一些但没全勾——不是第三种值,是状态汇总。
  • 展开 ≠ 勾选:展开只让子节点可见,不改变勾选;勾选才纳入结果,两件事分开。
  • 路径与范围长在物件上:点节点标签查看路径条与覆盖商品数,不靠记忆。
  • 禁用可见不可选:已下架的「电动剃须刀」留在树里、灰掉并标注「已下架」,不是悄悄消失。
  • 搜索保留层级:搜「电」会高亮命中类目并自动展开所在分支,结构上下文不丢。

什么时候用展示型树

从数据是否分层、是否要批量勾选或浏览上下文判断,而不是看控件长什么样。

适合

分层数据需要展开浏览或批量多选:商品类目、文件目录、权限 / 角色分配、组织架构展示。

先别用

只要选一个值回填表单(→ tree-select);层级均匀且每级相同(→ cascader);选项少而平(→ checkbox 清单);同主题长内容按需展开(→ collapse)。

怎么用:从展开到生成结果的最短路径

一次到位的检查顺序。

  1. 定语义:容器 role=tree,节点 role=treeitem,带 aria-level、aria-expanded(有子级时);勾选用原生 checkbox。
  2. 分开展开与勾选:箭头按钮只切换展开,checkbox 只切换勾选;点标签查看详情,三者不互相吞。
  3. 父子联动按叶子累计:状态由叶子勾选推导——全选=勾、部分=半选、空=未勾;不要给父节点单独存布尔值。
  4. 禁用标注原因:不可选节点 disabled 并写明「已下架 / 无权限」,不要静默删除或假装可点。
  5. 给键盘与出口:方向键移动焦点、空格勾选、Enter 查看详情;大树提供搜索与全部展开 / 收起。

同一个促销配置:正例与反例

目标都是选类目参与满减。差别只在于父子是否联动、空类目与禁用类目是否说明。

正例

勾「家电」一次联动全部可选子类,半选状态提示「厨房家电已选、个护家电未选」;空类目「文具」显示「暂无商品」;已下架节点留下但禁用并标注。

用户一眼看清哪些纳入、还差哪些。
反例

扁平清单勾「家电」不联动子类;空类目和已下架类目悄悄消失;没有半选状态,看不出部分子类是否已选。

用户漏选或重复选,规则覆盖不全。

快速自测

需求是「给 200 个员工逐个勾选是否参加培训」,数据没有层级,最合适的控件是?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。