Figma 组织架构图与人员层级树系统(Org Chart & Hierarchy Tree Architecture)组件架构实战:从正交树状分支连接线(Orthogonal Connectors)、卡片原子插槽解耦、跨部门虚线矩阵到 Variables 展开折叠状态机与 Dev Mode 前端代码交付

2026 年 11 月 14 日

1. 业务痛点与企业级组织架构图设计挑战 #

在现代化企业人力资源管理系统(HR SaaS,如 Workday、Lark/飞书人事、钉钉智能人事、SAP SuccessFactors)以及企业协同通讯录中,组织架构图与人员层级树(Org Chart & Hierarchy Tree Architecture) 是展示公司权力矩阵、部门层级拓扑、跨职能汇报链路与人才梯队的核心交互载体。

然而在日常设计实践中,组织架构图往往是设计资产中最脆弱、维护成本最高的“图形泥潭”:

  1. 树形分支对齐脆弱(Connector Misalignment):设计师通常用随手拉出的矢量单线将上级管理者与下级团队连起来,一旦在中间插入一个新节点或某个部门扩充人员,所有的连接线都会错位,必须纯手工重新测量调整;
  2. Auto Layout 无法原生支持“树状正交分支”:Figma 的 Auto Layout 原生支持水平或垂直流式堆叠,但标准的“一个父节点 -> 向下居中垂直干线 -> 横向水平横梁 -> 分叉到多个子节点”的伞状正交分支架构,如果不懂得巧妙嵌套 Frame 与设置弹性留白,就会导致左右子树失衡扭曲;
  3. 人员卡片(Member Card)耦合严重:将头像、姓名、职级徽标(P/M 序列)、在职状态、下属人数胶囊混在一个死板的 Frame 中,未解耦为具有可插拔组件属性(Component Properties)的原子组件,无法灵活适配不同部门的个性化信息展示;
  4. 矩阵式汇报(Dotted Matrix Reporting)无法表达:现代企业常见“实线直属上级 + 虚线项目导师/虚线业务线主管”的跨部门双重汇报网络,设计师很难在 Auto Layout 流式流体中优雅穿插跨节点飞线;
  5. 研发交付脱节:前端开发面对一堆散乱的图层,无法理解树形父子递归结构,更无法与业内成熟的拓扑可视化库(如 React Flow、OrgChart.js、D3.js Tree)进行无损对接。

一套工业级组织架构树的标准几何拓扑如下:

                              ┌────────────────────┐
                              │    CEO / VP Card   │
                              └─────────┬──────────┘
                                        │ (Vertical Stem: 24px)
                         ┌──────────────┴──────────────┐ (Horizontal Beam)
                         │ (Drop Stem)                 │ (Drop Stem)
               ┌─────────┴──────────┐        ┌─────────┴──────────┐
               │  Design Lead Card  │        │   Tech Lead Card   │
               │  [▼ 4 Members]     │        │   [► 8 Members]    │
               └─────────┬──────────┘        └────────────────────┘
                         │
        ┌────────────────┴────────────────┐
 ┌──────┴───────┐                  ┌──────┴───────┐
 │ Product Des  │ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┆ Front-End Dev┆ (Dotted Matrix Line)
 └──────────────┘                  └──────────────┘

结合站内 Figma Auto Layout 弹性自适应与流体布局深度实战 与 Figma 绝对定位(Absolute Positioning)与负间距实战,本文将详细拆解高韧性树形架构图的构建法门。


2. 正交树状分支导轨与 Auto Layout 拓扑编排 #

要让组织架构图实现“无论增删多少节点,整棵树都能自动居中对称扩展”,核心在于掌握伞状节点单元(Tree Node Unit)的递归嵌套法则。

2.1 伞状节点单元的四层垂直结构 #

每个具有下属的管理节点,在工程拓扑上都是一个垂直 Auto Layout 容器 tree-node-branch,其从上至下包含四个图层:

  1. 父节点卡片容器(parent-card-slot):居中对齐,承载上级管理者的成员卡片;
  2. 自上而下的垂直主干线(stem-top):高度固定为 24px,宽度为 2px,实线(如 #CBD5E1),水平居中;
  3. 水平分配横梁导轨(horizontal-cross-beam):
    • 这是整棵树自适应对齐的灵魂。它的宽度必须能够自适应撑满下方所有子节点的中心跨度;
    • 在 Auto Layout 技巧中,可以构建一个水平 Frame,左右两侧填充空白占位以对齐首尾子节点的中心点;
  4. 子节点水平集合(children-group-container):
    • Auto Layout 水平排列,间距(Gap)设为标准间距 32px 或 48px;
    • 内部包含若干个并排的 tree-leaf-node 或嵌套的 tree-node-branch;
    • 每一个子节点顶部都自带一条长度为 24px 的向上引申垂直线(stem-bottom),正好与上方的水平横梁形成 90 度正交直角衔接。
[ tree-node-branch: Auto Layout (Vertical, Align Center) ]
  ├── [ parent-card-slot: Card Component ]
  ├── [ stem-top: 2px x 24px Vertical Line ]
  ├── [ horizontal-cross-beam: 2px Horizontal Stroke Frame ]
  └── [ children-group: Auto Layout (Horizontal, Gap: 40px) ]
        ├── [ child-branch-1 ]
        ├── [ child-branch-2 ]
        └── [ child-branch-3 ]

通过这种标准的递归编排,无论你在 children-group 中添加第 4 个还是第 5 个子节点,外层的父节点卡片和主干线永远由 Auto Layout 的 Align: Center 机制自动推到正中央,彻底告别手工微调。


3. 人员卡片(Org Member Card)原子结构与插槽解耦 #

组织架构图中的成员卡片是承载信息的核心载体。必须采用原子设计理念将其拆解为通用的原子组件。

3.1 成员卡片的信息层级规范 #

  • 卡片基准外壳(member-card-shell):
    • 宽度推荐固定为 240px 或 260px,高度自适应(Hug contents);
    • 采用白底或高对比微暗底(#FFFFFF / #1E293B),搭配 1px 精细边框(#E2E8F0)与 4px 柔和外阴影(Elevation 1);
    • 圆角设置为 8px 或 12px。
  • 头部基础信息行(card-header):
    • 左侧:40px × 40px 头像插槽(Avatar Slot),右下角带有 10px 在职状态绿点(Active Dot);
    • 右侧:Auto Layout 垂直文本组,包含姓名(15px, Semibold)与职级序列标签(如 P7 / 资深体验架构师,12px, 中性灰文本)。关于头像规范可参阅 Figma 头像与重叠头像组系统实战;
  • 中部业务属性行(card-body):
    • 部门名称(如 体验技术部 / 平台组)、工位地点、邮件/通讯录快捷图标;
  • 底部展开/折叠控制器(collapse-toggle-badge):
    • 如果该人员是团队管理者,卡片正下方边缘居中悬挂一个交互胶囊(Badge);
    • 展开态(Expanded):显示减号图标及下属人数(如 − 6 人);
    • 折叠态(Collapsed):显示加号图标及下属人数(如 + 6 人),背景高亮以吸引点击。
┌──────────────────────────────────────────────┐
│  (👤 Alice)   张晓明 (P8)                     │
│               体验设计技术部 / 负责人         │
├──────────────────────────────────────────────┤
│  ✉️ xiaoming@figma.com   📍 望京总部 18F       │
└──────────────────────┬───────────────────────┘
                       │
                   [ − 6 人 ] (Collapse Toggle)

使用 Figma 组件属性(Component Properties)企业级实战 中的 Boolean 与 Instance Swap 属性,可以实现单一组件在“高管卡片”、“普通员工卡片”、“兼职/外包卡片”之间的毫秒级一键切换。


4. 跨部门虚线矩阵汇报(Matrix Dotted Reporting)与绝对定位穿透 #

在矩阵式管理架构中,员工不仅要向业务主管(Solid Line Manager)汇报,还要向虚拟项目主管或职能线长(Dotted Line Manager)汇报。这种跨子树、跨层级的飞线无法放入局部的 Auto Layout 容器中。

4.1 绝对定位穿透层(Dotted Matrix Overlay) #

  1. 在架构图全局画板顶层,建立一个覆盖全图的透明 Frame,命名为 matrix-reporting-layer;
  2. 勾选 绝对定位(Absolute Positioning),使其脱离正常的流式布局,不挤占任何节点位置;
  3. 针对跨部门关联,使用带有贝塞尔曲线或圆角折线的矢量路径,线型设置为 Dotted(点状虚线,Dash 4, Gap 4),描边颜色选用醒目的紫罗兰色或中性浅蓝(如 #8B5CF6);
  4. 起点连接员工卡片的右侧端口锚点,终点附带方向箭头,指向虚拟主管卡片的左侧端口锚点;
  5. 在连线中央嵌入一个微型药丸标签(Pill Badge),注明汇报关系性质(如 Matrix / 导师 或 20% 资源协同)。

5. 基于 Figma Variables 的展开折叠状态机与交互原型 #

利用 Figma Variables 的布尔变量和组件变体,可以在单画板内呈现丝滑的“点击管理者节点展开/折叠下属团队”的高保真交互。

5.1 变量控制矩阵 #

变量名称(Variable Name) 类型(Type) 默认值 作用描述
dept/design-team-expanded Boolean true 控制设计团队下属子节点群组的显隐
dept/tech-team-expanded Boolean false 控制技术团队下属子节点群组的显隐
dept/show-matrix-lines Boolean true 一键切换全局矩阵虚线汇报拓扑的显示

5.2 状态流转微交互设置 #

  1. 选中管理者卡片底部的 collapse-toggle-badge;
  2. 添加原型连线:On Click -> Set variable -> 将 dept/design-team-expanded 赋值为 !dept/design-team-expanded(布尔值取反);
  3. 将下方的 stem-top、horizontal-cross-beam 以及 children-group 图层的 Layer Visibility(图层可见性) 全部绑定该布尔变量;
  4. 勾选 Smart Animate(智能动画),缓动曲线设置为 Ease out (300ms)。当用户点击时,整个子树平滑收起,周围的其他并列部门自动向中间聚拢对齐,生动还原真实 Web 组织架构系统的物理动效。关于动画调校可参考 Figma Smart Animate 智能动画深水区避坑指南。

6. Dev Mode 现代前端 React Flow / OrgChart.js 规范交付 #

在 Figma Dev Mode 下,前端工程师可以直接查看卡片间距、连线 Token,并将其直接映射为前端主流流程图框架(如 React Flow、OrgChart 或原生纯 CSS Tree)。

以下是高度契合 Figma 组件拓扑的生产级 React + Tailwind CSS 树形组织架构图实现:

import React, { useState } from 'react';

// 1. 组织成员数据节点接口
export interface OrgNodeData {
  id: string;
  name: string;
  role: string;
  department: string;
  avatarUrl?: string;
  children?: OrgNodeData[];
}

interface OrgChartNodeProps {
  node: OrgNodeData;
}

export const OrgChartNode: React.FC<OrgChartNodeProps> = ({ node }) => {
  const [isExpanded, setIsExpanded] = useState<boolean>(true);
  const hasChildren = Boolean(node.children && node.children.length > 0);

  return (
    <div className="flex flex-col items-center">
      {/* A. 成员信息卡片 */}
      <div className="w-64 bg-white border border-gray-200 rounded-xl p-4 shadow-sm hover:shadow-md transition-shadow relative z-10">
        <div className="flex items-center gap-3">
          <div className="w-10 h-10 rounded-full bg-blue-100 text-blue-600 flex items-center justify-center font-bold text-sm">
            {node.name.slice(0, 1)}
          </div>
          <div className="flex-1 min-w-0">
            <h4 className="text-sm font-semibold text-gray-900 truncate">{node.name}</h4>
            <p className="text-xs text-gray-500 truncate">{node.role}</p>
          </div>
        </div>
        <div className="mt-3 pt-2.5 border-t border-gray-100 flex items-center justify-between text-[11px] text-gray-400">
          <span>{node.department}</span>
          {hasChildren && (
            <button
              onClick={() => setIsExpanded(!isExpanded)}
              className="px-2 py-0.5 rounded-full bg-gray-100 hover:bg-blue-50 hover:text-blue-600 font-medium transition-colors text-gray-600"
            >
              {isExpanded ? `− ${node.children!.length} 人` : `+ ${node.children!.length} 人`}
            </button>
          )}
        </div>
      </div>

      {/* B. 树状正交分支连线与子节点递归 */}
      {hasChildren && isExpanded && (
        <div className="flex flex-col items-center">
          {/* 垂直主干线 */}
          <div className="w-0.5 h-6 bg-gray-300" />

          {/* 子节点水平排列容器 */}
          <div className="flex gap-8 relative pt-6">
            {/* 水平正交横梁导轨(居中对齐所有子树) */}
            {node.children!.length > 1 && (
              <div
                className="absolute top-0 h-0.5 bg-gray-300"
                style={{
                  left: 'calc(16rem / 2)',
                  right: 'calc(16rem / 2)',
                }}
              />
            )}

            {/* 递归渲染每一个子树节点 */}
            {node.children!.map((child) => (
              <div key={child.id} className="relative flex flex-col items-center">
                {/* 向上连接横梁的垂直线 */}
                <div className="absolute -top-6 w-0.5 h-6 bg-gray-300" />
                <OrgChartNode node={child} />
              </div>
            ))}
          </div>
        </div>
      )}
    </div>
  );
};

7. 组织架构图多端展示形态与架构决策对比 #

根据企业组织规模与使用终端的不同,组织架构图在设计系统中的呈现形态应因地制宜:

评估维度 自顶向下正交树状图(Top-Down Tree) 自左向右横向流拓扑(Left-to-Right Hierarchy) 紧凑多级手风琴列表(Accordion List)
空间画布诉求 极大(适合大屏显示器与无限画布缩放) 适中(横向滚动条适配友好) 极小(高度适应移动端纵向单手刷动)
层级深浅适应 适合深度 ≤ 4 层、宽度均衡的中大型组织 适合深度较深(≥ 6 层)的研发/职能链条 适合超百人深层级部门的快速检索
连线复杂度 树状正交伞状线(正交水平+垂直) 水平贝塞尔连接曲线或 S 形平滑线 无连线,纯靠行缩进缩放导轨(Indentation)
矩阵虚线支持 优秀(支持全景跨节点绝对定位飞线) 一般(飞线容易与正常树线交叉打结) 较弱(列表形态难以表达跨节点协同)
前端落地方案 React Flow / D3.js Tree AntV G6 / GoJS / Mermaid Ant Design Tree / 原生 HTML <details>

通过在 Figma 中建立严谨的“父卡片-垂直主干-水平横梁-子节点集合”的四层 Auto Layout 伞状拓扑,结合标准解耦的成员卡片插槽与 Variables 展开折叠状态机,设计团队不仅能彻底解决树状连线错位的顽疾,更能为前端研发提供清晰无歧义的递归组件工程规范。进一步的系统级设计治理与 Tokens 落地技巧,请查阅 设计系统 Design Tokens 规范速查 与 Figma 设计系统版本治理实战。

❓ 常见问题与答疑 (FAQ)

高频疑难解析与避坑指南
A

完全不需要。绝大多数核心功能在免费 Starter 计划中均可完整体验与实操练习,无需额外付费购买付费团队版。