UI Design System
build dev

EntityCard

三层结构实体摘要卡:图标/标题/标签、描述与操作按钮。中文惯用名:实体卡片。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.entity-card
名称EntityCard
二级分类业务组件(business)
用途三层结构实体摘要卡:图标/标题/标签、描述与操作按钮
描述中文惯用名:实体卡片。

预览

静态结构:三层纵向结构——上层左侧图标(logo 图片优先,其次 icon 白名单图标,底衬 bg-muted 圆角块)+ 标题/副文案,右侧标签组(Tag,EntityCardTag 的 color 映射语义色);中层描述(line-clamp-2 固定两行截断)与右侧 meta 平铺,仅两者任一存在时渲染;下层操作按钮组(EntityCardAction,居右,footerBackground=true 时带浅底栏背景,负 margin 对齐 Card 内边距),未配置 actions 不渲染。整卡点击与按钮点击解耦(footer 容器 stopPropagation),hoverable 时整卡手型 + hover 高亮。

DSL 结构

DslNode
{
  "type": "EntityCard",
  "props": {
    "icon": "cube",
    "title": "客户实体",
    "subtitle": "cust_profile",
    "tags": [
      {
        "text": "启用",
        "color": "green"
      }
    ],
    "description": "客户画像主实体,含基础属性与扩展属性。",
    "meta": "创建于 2026-09-01",
    "actions": [
      {
        "text": "编辑",
        "key": "edit"
      },
      {
        "text": "删除",
        "key": "remove",
        "variant": "text",
        "danger": true
      }
    ]
  },
  "events": {
    "onClick": {
      "action": "navigate",
      "params": {
        "to": "/entity/detail"
      }
    },
    "onAction": {
      "action": "setState",
      "params": {
        "lastAction": "edit"
      }
    }
  }
}

何时用

何时使用

  • 列表 / 网格页中展示业务实体摘要:图标(logo)、标题、副文案、状态标签、描述与维护信息。
  • 摘要卡需要承载操作入口(编辑、配置、删除等),且操作与整卡点击解耦。
  • 作为 CardList 的列表项底层卡片,与其他 business 组合组件配合。

何时不用

  • 纯图文卡片、无实体语义(无操作区):使用基础 Card。
  • 只展示数据字段的平铺说明(键值对):使用 Descriptions。

变体

变体视觉形态适用场景
icon / logo 图标形态白名单图标(bg-muted 圆角底)或 logo 图片(size-9 rounded-md)无品牌图片用图标,有 logo 时 logo 优先
标签组上层右侧 Tag 语义色标签组状态 / 分类标注(已发布、启用、灰度)
操作按钮组下层居右按钮组,支持 ButtonVariant 与 danger实体级操作入口;footerBackground 控制浅底栏
hoverable 整卡可点手型光标 + hover 边框 / 背景高亮点击卡片进入详情页

API 属性

属性类型默认值说明
iconstring—图标名(Icon 白名单);与 logo 二选一,logo 优先
logostring—Logo 图片地址(alt 取 title)
titlestring—主标题
subtitlestring—标题下方辅助短文案(版本号、编码等)
tagsEntityCardTag[]—上层右侧标签组:{ text, color? }
descriptionstring—中层描述说明,固定两行高度、超出截断
metastring—中层右侧维护信息(与描述平铺)
actionsEntityCardAction[]—下层操作按钮组:{ text, key?, variant?, danger? };key 缺省取 text
footerBackgroundbooleantrue下层是否带浅底栏背景
hoverablebooleanfalse整卡可点:手型 + hover 高亮
contentClassName / className / stylestring / CSSProperties—内容区 / 根节点样式
onClick() => void—整卡点击(操作区不触发)
onAction(event: { key: string; text: string; index: number }) => void—操作按钮点击,回传 { key, text, index }

使用规范

  • 标题 + 描述只放摘要信息,实体详情通过整卡点击进入详情页,不堆砌字段。
  • 操作按钮按权重排列,危险操作(danger)与常规操作分组或置于末尾。
  • 每个 EntityCardAction 给稳定 key(缺省取 text):事件编排按 key 分发,文案变更不破坏逻辑。
  • 卡片组合场景使用 CardList 统一网格 / 间距 / 空态,不逐卡手写布局。

正例

  • ✓ 实体列表页:CardList 渲染 EntityCard,onItemClick 进详情,操作「编辑 / 删除」经 onItemAction 分发。
  • ✓ 卡片墙:tags 标注「已发布 / 草稿」,footerBackground 开启浅底栏承载操作。

反例

  • ✕ 把整页详情字段都塞进 EntityCard(应只放摘要,详情走跳转)。
  • ✕ 在操作按钮上嵌套整卡点击语义(footer 已内置事件解耦,不应再包一层 onClick)。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。