UI Design System
build dev

卡片列表页

以卡片展示实体摘要,支持筛选与生命周期操作(上/中/下层结构与响应式列数)
稳定已接入

概述

组件类型: 卡片化列表

职责: 以卡片展示实体摘要,支持筛选与生命周期操作。

看板指标/图表卡(非实体列表)→ 12-仪表盘页 W1–W6,勿与本文件「上/中/下」混用。

页面先选 列表容器布局(L1/L2/L3),单张卡片统一用 上 / 中 / 下三层 结构(§二);网格列数见 §三。

一、列表页容器布局

L1 — 响应式网格(默认)

筛选区 + 卡片网格 + 结果计数(分页可选,卡片列表常仅展示总数)。

适用: 插件列表。

DSL 配置
{
  "state": {
    "plugins": [
      {
        "id": 1,
        "icon": "users",
        "title": "用户管理",
        "subtitle": "v0.1.0",
        "description": "管理插件安装状态与运行生命周期,支持启停与依赖检查。",
        "tags": [
          {
            "text": "已安装",
            "color": "success"
          }
        ],
        "actions": [
          {
            "text": "停用"
          }
        ]
      },
      {
        "id": 2,
        "icon": "database",
        "title": "数据同步",
        "subtitle": "v2.3.1",
        "description": "定时将外部数据源同步至平台,支持增量与全量两种模式。",
        "tags": [
          {
            "text": "已安装",
            "color": "success"
          }
        ],
        "actions": [
          {
            "text": "停用"
          }
        ]
      },
      {
        "id": 3,
        "icon": "file-text",
        "title": "审计日志",
        "subtitle": "v1.8.0",
        "description": "记录平台关键操作与登录行为,提供检索与导出能力。",
        "tags": [
          {
            "text": "未安装"
          }
        ],
        "actions": [
          {
            "text": "安装",
            "variant": "primary"
          }
        ]
      },
      {
        "id": 4,
        "icon": "bell",
        "title": "消息通知",
        "subtitle": "v3.0.2",
        "description": "站内信、邮件与 Webhook 多渠道通知,支持模板配置。",
        "tags": [
          {
            "text": "已安装",
            "color": "success"
          }
        ],
        "actions": [
          {
            "text": "停用"
          }
        ]
      },
      {
        "id": 5,
        "icon": "chart",
        "title": "报表中心",
        "subtitle": "v0.9.5",
        "description": "预置常用运营报表,支持自定义指标与订阅推送。",
        "tags": [
          {
            "text": "未安装"
          }
        ],
        "actions": [
          {
            "text": "安装",
            "variant": "primary"
          }
        ]
      },
      {
        "id": 6,
        "icon": "folder",
        "title": "文件存储",
        "subtitle": "v1.2.4",
        "description": "对接对象存储服务,提供统一的上传、预览与权限管理。",
        "tags": [
          {
            "text": "已安装",
            "color": "success"
          }
        ],
        "actions": [
          {
            "text": "停用"
          }
        ]
      }
    ]
  },
  "body": {
    "type": "Page",
    "children": [
      {
        "type": "Flex",
        "props": {
          "justify": "space-between",
          "align": "center"
        },
        "children": [
          {
            "type": "Text",
            "props": {
              "text": "插件列表",
              "strong": true,
              "size": "large"
            }
          },
          {
            "type": "Button",
            "props": {
              "text": "刷新",
              "icon": "refresh",
              "variant": "text"
            }
          }
        ]
      },
      {
        "type": "Form",
        "props": {
          "layout": "inline"
        },
        "children": [
          {
            "type": "Field",
            "props": {
              "label": "关键词"
            },
            "children": [
              {
                "type": "Input",
                "props": {
                  "name": "keyword",
                  "placeholder": "输入插件名称"
                }
              }
            ]
          },
          {
            "type": "Field",
            "props": {
              "label": "状态"
            },
            "children": [
              {
                "type": "Select",
                "props": {
                  "name": "status",
                  "value": "all",
                  "options": [
                    {
                      "label": "全部",
                      "value": "all"
                    },
                    {
                      "label": "已安装",
                      "value": "installed"
                    },
                    {
                      "label": "未安装",
                      "value": "notInstalled"
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "Field",
            "children": [
              {
                "type": "Button",
                "props": {
                  "text": "查询",
                  "variant": "primary",
                  "submit": true
                }
              },
              {
                "type": "Button",
                "props": {
                  "text": "重置"
                }
              }
            ]
          }
        ]
      },
      {
        "type": "CardList",
        "props": {
          "items": "${state.plugins}",
          "columns": 3,
          "showCount": true
        },
        "events": {
          "onItemAction": [
            {
              "action": "message",
              "params": {
                "messageType": "info",
                "text": "已触发「${event.text}」:${event.item.title}"
              }
            }
          ]
        }
      }
    ]
  }
}

L2 — 单列宽卡片

网格 columns: 1,卡片 中/下层 可横向平铺更多信息(见 §二「平铺」)。

DSL 配置
{
  "state": {
    "plugins": [
      {
        "id": 1,
        "icon": "users",
        "title": "用户管理",
        "subtitle": "v0.1.0",
        "description": "管理插件安装状态与运行生命周期,支持启停、依赖检查与灰度发布,覆盖平台全部业务空间。",
        "meta": "平台组 · 更新于 2026-09-28",
        "tags": [
          {
            "text": "已安装",
            "color": "success"
          }
        ],
        "actions": [
          {
            "text": "配置",
            "variant": "link"
          },
          {
            "text": "停用"
          }
        ]
      },
      {
        "id": 2,
        "icon": "database",
        "title": "数据同步",
        "subtitle": "v2.3.1",
        "description": "定时将外部数据源同步至平台,支持增量与全量两种模式,失败自动重试并推送告警。",
        "meta": "数据组 · 更新于 2026-09-20",
        "tags": [
          {
            "text": "未安装"
          }
        ],
        "actions": [
          {
            "text": "配置",
            "variant": "link"
          },
          {
            "text": "安装",
            "variant": "primary"
          }
        ]
      }
    ]
  },
  "body": {
    "type": "Page",
    "children": [
      {
        "type": "CardList",
        "props": {
          "items": "${state.plugins}",
          "columns": 1,
          "showCount": true
        },
        "events": {
          "onItemAction": [
            {
              "action": "message",
              "params": {
                "messageType": "info",
                "text": "已触发「${event.text}」:${event.item.title}"
              }
            }
          ]
        }
      }
    ]
  }
}

L3 — 网格 + 末尾占位卡

首格为 虚线新建卡(+ 新建{实体});无新建能力则不画。

DSL 配置
{
  "state": {
    "plugins": [
      {
        "id": 1,
        "icon": "users",
        "title": "用户管理",
        "subtitle": "v0.1.0",
        "description": "管理插件安装状态与运行生命周期,支持启停与依赖检查。",
        "tags": [
          {
            "text": "已安装",
            "color": "success"
          }
        ],
        "actions": [
          {
            "text": "停用"
          }
        ]
      },
      {
        "id": 2,
        "icon": "database",
        "title": "数据同步",
        "subtitle": "v2.3.1",
        "description": "定时将外部数据源同步至平台,支持增量与全量两种模式。",
        "tags": [
          {
            "text": "未安装"
          }
        ],
        "actions": [
          {
            "text": "安装",
            "variant": "primary"
          }
        ]
      }
    ]
  },
  "body": {
    "type": "Page",
    "children": [
      {
        "type": "CardList",
        "props": {
          "items": "${state.plugins}",
          "columns": 3,
          "createText": "新建插件",
          "showCount": true
        },
        "events": {
          "onCreateClick": [
            {
              "action": "message",
              "params": {
                "messageType": "info",
                "text": "打开新建插件弹层"
              }
            }
          ],
          "onItemAction": [
            {
              "action": "message",
              "params": {
                "messageType": "info",
                "text": "已触发「${event.text}」:${event.item.title}"
              }
            }
          ]
        }
      }
    ]
  }
}

二、单卡结构 — 上 / 中 / 下三层

每张卡片纵向分为 上层 · 中层 · 下层,层与层之间可用分割线或间距区分。下层可单独设置背景色(如操作条、状态条、浅色底栏)。

2.1 层内对齐(每层独立配置)

对齐线框表达典型用途
居左元素靠左起始排列Logo + 标题 + 标签(插件名、版本)
居中组内整体水平居中空状态小卡、占位新建卡
居右元素靠右单颗主按钮、状态角标
平铺justify: space-between 或等宽拉满一行左标题 + 右标签;左描述 + 右操作

每层 alignment 互不影响;线框在层旁注 上层·居左 下层·居右·底栏背景。

2.2 层内元素与 inline 排列

同一层内多个元素按 inline(横向) 排列,换行时 flex-wrap(线框多行则画出第二行)。允许的元素类型:

元素说明线框示例
Logo图标/插件图;方或圆[图标] [Logo]
Tag状态/分类标签,可多个[已安装] [●在运行]
标题主标题,通常一项{名称} 加粗
文字辅助短文案(版本号、编码)v2.0.1 ADMIN
描述说明多行说明,常放 中层 独占或占满宽灰色小字段落
表单项卡片内极少用;若有开关/下拉,须 Form 包裹并注字段名启用 [开关]
按钮见 §2.6;与整卡点击进详情 并存 时须阻止冒泡[停用] (⋮) ···

禁止 在无 Form 时用裸 Input 攒筛选(卡片内表单项仅用于 单卡快捷操作,非列表筛选项)。

2.3 文字样式(按元素单独定义)

线框或规格表可为每个元素注明样式 token,例如:

元素常用样式
标题strong / text-base
文字(版本)secondary / text-sm tabular-nums
描述muted / 最多 2 行 ellipsis
Tag 内文字随标签色,不单改字号除非线框标明
错误摘要destructive 或 warning,单行截断

示例标注:{名称}title · v1.0caption · {描述}muted-2lines

2.4 三层内容分工(推荐,可 override)

层常见内容对齐示例
上层Logo、标题、版本文字、Tag居左 或 平铺(左信息右 Tag)
中层描述说明、错误摘要、次要文字居左,全宽
下层主/次按钮、链接操作;或仅 Tag 条居右 或 平铺;可设底栏背景色

下层背景: 线框用 ░ 或旁注 bg: var(--muted);与上层、中层背景 contrast 清晰。

2.6 卡片内按钮

卡片内可放 按钮(非整卡唯一的交互方式)。线框须标明 形态 与 锚定区域(常用 右上、右下)。

形态线框表达说明
文字按钮[停用] [启用] 或 link 样式「查看」对应 Button variant: link 或 default;危险操作用 danger
长方形按钮[ 停用 ] 标准 padding、圆角矩形主操作常用;默认 / primary
圆形按钮( ⋮ ) ( ⚙ ) ⊕ 仅图标shape: circle;须 Tooltip / aria-label
锚定区域说明
右上落在上层或卡片 绝对定位右上角;常与 Tag 并列或替代「更多」;适合次要操作、圆形更多钮
右下落在 下层 或卡片 右下角;适合主操作长方形按钮、文字「安装」
层内居右非绝对定位时,用该层 居右 / 平铺 把按钮组靠右(与「右下」视觉接近)
规则
数量单卡主操作 1 个 为宜;次要收入圆形 ⋯ 或右上文字 link
确认安装/停用/删除等仍须 二次确认
与整卡点击按钮点击 不触发 进详情(实现:stopPropagation);线框用旁注「按钮独立事件」

2.7 整卡点击进入详情

整张卡片(除按钮、表单项、链接外)可作为 一个大点击区 进入详情页。

项规则
范围卡片根节点 navigate / href;排除 按钮、Switch、下拉、内嵌链接
线框旁注 「整卡可点 → 详情」;不设 单独「详情」文字按钮(与插件线框一致时)
光标可点区域 pointer;按钮上为 default
与 L3新建占位卡 不 整卡进详情,仅点「+」或卡内 CTA
无障碍整卡可点时卡片根加可读名称(如插件名);按钮保留独立 label

2.8 插件列表示例(上中下 + 平铺)

整卡可点进详情(§2.7);右下长方形 [停用] 独立点击,须 二次确认。

DSL 配置
{
  "body": {
    "type": "EntityCard",
    "props": {
      "icon": "users",
      "title": "用户管理",
      "subtitle": "v0.1.0",
      "description": "管理插件安装状态与运行生命周期。",
      "hoverable": true,
      "style": {
        "width": 380
      },
      "tags": [
        {
          "text": "已安装",
          "color": "success"
        }
      ],
      "actions": [
        {
          "text": "停用"
        }
      ]
    },
    "events": {
      "onClick": [
        {
          "action": "message",
          "params": {
            "messageType": "info",
            "text": "进入「用户管理」详情"
          }
        }
      ],
      "onAction": [
        {
          "action": "confirm",
          "id": "disableConfirm",
          "params": {
            "title": "确认停用「用户管理」?",
            "content": "停用后依赖该插件的功能将不可用。"
          }
        },
        {
          "action": "if",
          "params": {
            "condition": "${actions.disableConfirm}",
            "then": [
              {
                "action": "message",
                "params": {
                  "messageType": "success",
                  "text": "已停用「用户管理」"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

三、响应式网格

列表容器使用 Grid,列数随断点变化;须定义 最大列数 maxColumns。

参数说明
maxColumns宽屏上限,如 4;不超过时均分宽度
columns 断点例:xs:1 · sm:2 · lg:3 · xl:4;线框注「最大 4 列」
gap卡片间距,如 16px
卡片等高默认 stretch 同行等高;下层底栏对齐;若不要等高须注明
规则
列数min(maxColumns, floor(容器宽 / minCardWidth)) 语义;线框写清 maxColumns 与各断点列数即可
占位卡L3 新建卡占 1 格,参与网格流
筛选无结果空状态占满网格区域,不渲染卡片

四、交互要点

1. 安装/启用/停用/重试:二次确认;说明对导航或依赖的影响。

2. 筛选无结果:空状态 + 清除筛选(筛选形态见 02)。

3. 窄屏:maxColumns 降为 1;状态 Tag 保留文案,不仅靠颜色。

4. 线框单卡须标:各层对齐、下层是否设色、元素样式、按钮形态与右上/右下、是否整卡进详情;列表须标 maxColumns 与 L1/L2/L3。