imetting/design/button-system-guidelines.md

223 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 编辑器工具栏按钮
- 会议详情中的音频工具栏按钮
这两类属于功能控件,不按业务操作按钮规范处理。