imetting/design/button-system-guidelines.md

223 lines
6.3 KiB
Markdown
Raw Normal View History

2026-04-03 16:25:53 +00:00
# iMeeting 按钮统一规范
## 目标
统一平台内业务操作按钮的视觉语言、尺寸层级和使用方式,避免同一场景中出现不同形态的编辑、删除、查看、复制等操作按钮。
当前平台按钮分为两套标准:
1. 业务操作按钮:统一通过 [ActionButton](/Users/jiliu/工作/projects/imeeting/frontend/src/components/ActionButton.jsx) 承载。
2. 表单操作条按钮:统一使用 Ant Design `Button` 家族,不与 `ActionButton` 混用。
## 设计原则
1. 语义和尺寸分离。
语义只表达动作类型,例如查看、编辑、删除;尺寸只表达场景层级,例如列表操作、面板次级操作。
2. 同一场景只选一种尺寸档。
不要在同一条记录、同一个卡片头部、同一个面板操作区里混用大图标、小图标、大文字、小文字。
3. 删除按钮只保留颜色差异。
删除按钮和其它按钮使用同一套圆角、边框、阴影和尺寸,不再使用额外的危险态造型。
4. 业务操作、表单操作、功能控件分开。
- 业务操作统一走 `ActionButton`
- 表单操作条统一走标准 `Button`
- 编辑器工具栏、播放器控制等功能控件不强行复用这套规范
5. 同一操作条内外框语言必须一致。
如果一组按钮里已经采用普通 `Button`,就不要混入胶囊式 `ActionButton`;如果一组按钮采用 `ActionButton`,就不要再塞入默认 `Button`
## 标准尺寸
### 1. 带文字(大)
- 组件参数:`variant="textLg"`
- 典型场景:面板内次级操作、详情弹窗中的补充动作、信息面板中的“下载结果 / 复制链接 / 编辑当前菜单”
- 示例:`编辑`、`删除`、`下载转录结果 (JSON)`、`复制链接`
### 2. 带文字(小)
- 组件参数:`variant="textSm"`
- 典型场景:卡片头部轻量动作、模块内局部切换动作
- 示例:`标签`、`编辑`、`查看详情`、`清空已选`
### 3. 仅图标(大)
- 组件参数:`variant="iconLg"`
- 典型场景:输入框组合控件右侧操作、需要更高点击面的紧凑操作
- 示例:分享密码区的 `复制 / 保存`
### 4. 仅图标(小)
- 组件参数:`variant="iconSm"`
- 典型场景:列表行操作、卡片角落操作、悬浮于内容边缘的轻量动作
- 示例:`编辑 / 删除 / 查看 / 同步 / 更多`
## 标准语义
### `tone="view"`
- 用于查看、打开、复制、下载、预览
- 颜色语义:蓝色系
### `tone="neutral"`
- 用于更多、清空、重置筛选、非强调型辅助动作
- 颜色语义:中性色
### `tone="edit"`
- 用于编辑、设置、修改
- 颜色语义:蓝色系,与查看同体系但文义偏编辑
### `tone="accent"`
- 用于需要强调但非危险的特殊动作
- 颜色语义:强调色
- 当前典型场景:`重置密码`
### `tone="delete"`
- 用于删除、移除、关闭会话等不可逆动作
- 颜色语义:红色系
## 场景映射
### 列表行操作
- 一律使用 `iconSm`
- 常见组合:`编辑 / 删除`、`查看 / 编辑 / 删除`
- 示例页面:
- 热词管理
- 用户管理
- 参数管理
- 模型管理
- 客户端管理
- 外部应用管理
### 卡片角落操作
- 一律使用 `iconSm`
- 常见组合:`编辑 / 删除`、`更多`
- 示例页面:
- 会议中心卡片
- 时间线卡片
- 知识库左侧列表
### 卡片或模块头部的轻量动作
- 一律使用 `textSm`
- 常见组合:`标签`、`编辑`、`查看详情`
### 面板或 Drawer 的次级操作
- 一律使用 `textLg`
- 常见组合:`编辑`、`删除`、`复制链接`、`下载转录结果`
### 表单操作条
- 一律使用标准 `Button`
- 常见组合:`删除 / 取消 / 保存`
- 视觉规范:
- `删除``className="btn-soft-red"`
- `取消`:默认 `Button`
- `保存``type="primary"`
- 说明:
- 这类按钮属于提交与撤销控制,不使用 `ActionButton`
- 同一条内不要出现 `ActionButton tone="delete"` 与普通 `Button` 并排
### 输入框附属操作
- 一律使用 `iconLg`
- 常见组合:输入框后缀的 `复制 / 保存`
## 禁止项
1. 不要在业务操作中直接裸用 `EditOutlined`、`DeleteOutlined` 作为可点击入口。
2. 不要在同一场景混用:
- `shape="circle"` 图标按钮
- 旧的 `btn-icon-soft-*`
- 默认 `danger` 样式按钮
- 新的 `ActionButton`
- 普通 `Button``ActionButton` 的不同外框语言
3. 不要为了“删除更危险”单独给删除按钮换不同形状、尺寸或阴影。
4. 不要在业务操作中继续手写 `Tooltip + Button + btn-text-* + btn-action-*`
优先使用 `ActionButton`
## 推荐写法
```jsx
import ActionButton from '../components/ActionButton';
<ActionButton
tone="edit"
variant="iconSm"
tooltip="编辑"
icon={<EditOutlined />}
onClick={handleEdit}
/>
```
```jsx
<ActionButton
tone="delete"
variant="textLg"
icon={<DeleteOutlined />}
onClick={handleDelete}
>
删除
</ActionButton>
```
```jsx
<ActionButton
tone="view"
variant="iconLg"
tooltip="复制密码"
icon={<CopyOutlined />}
onClick={handleCopy}
/>
```
```jsx
<Space>
<Button className="btn-soft-red" icon={<DeleteOutlined />} onClick={handleDelete}>
删除
</Button>
<Button icon={<CloseOutlined />} onClick={handleCancel}>
取消
</Button>
<Button type="primary" icon={<SaveOutlined />} onClick={handleSave}>
保存
</Button>
</Space>
```
## 落地约束
1. 新增按钮时,先判断是不是业务动作还是表单提交动作。
- 业务动作优先使用 `ActionButton`
- 表单操作条优先使用标准 `Button`
2. 新页面开发时,先确定场景,再选尺寸档。
不要先凭感觉挑样式。
3. 旧页面调整时,如果涉及编辑、删除、查看、更多、复制、下载等业务动作,顺手迁移到 `ActionButton`
4. 如果删除按钮和取消、保存并排出现,优先按表单操作条处理,不要单独给删除套胶囊业务按钮。
## 现状说明
当前平台中的主要业务操作按钮已基本迁移到 `ActionButton`,主要表单操作条也开始统一为 `删除 / 取消 / 保存` 的标准按钮组合。
未纳入本规范的主要是两类控件:
- Markdown 编辑器工具栏按钮
- 会议详情中的音频工具栏按钮
这两类属于功能控件,不按业务操作按钮规范处理。