---
id: "load-empty"
title: "加载、空状态、失败与重试"
category: "反馈组件"
document_type: "component-specification"
spec_status: "local-current-draft"
element_ui: "2.15.6"
vue: "2.6.14"
page: "../index.html#spec-load-empty"
source_data: "../component-data.json"
official_components: ["loading"]
template_components: ["el-button", "el-empty"]
scenario_count: 6
verification: "scenario-checklist-not-full-test-pass"
---

# 加载、空状态、失败与重试

专题 `load-empty` · 反馈组件 · Element UI 2.15.6

## 适用范围与组件映射

公共色板及字体基线适用于整个运营后台。本库整理基础组件、组件状态和可复用的组合模式；本轮补齐表单整体验证、页面布局和导航组合；具体业务字段与跨页流程仍在业务场景中说明。专题验收清单包含接入要求，不表示当前示例已实现或已验证全部场景。

官方条目映射：`loading`。

本页模板直接使用的 Element UI 标签：`el-button`、`el-empty`。

## 通用基线

- 组件库：Element UI **2.15.6**；运行样例 Vue **2.6.14**。
- 系统中文字体：macOS 优先苹方，Windows 通常微软雅黑；工程顺序固定为 `"PingFang SC", "Microsoft YaHei", sans-serif`。不要求安装或加载网络字体，兼容回退不是另一套可选样式。
- 后续仅采用经验证且固定版本的兼容 Element UI 2.x；Element Plus 属于独立迁移路线。
- 正文、数据值、输入及已选值：`14px / 400 / 21px`，`#303133`。
- 表头及组件分组标题：`14px / 600 / 21px`；弹窗标题：`16px / 600 / 24px`，均使用 `#303133`。
- 辅助说明：`12px / 400 / 18px`，`#595959`；错误、链接、状态、禁用与占位按各自语义处理。
- 适用组件的默认尺寸为 `small / 32px`；不得将这一高度机械应用于表格、文本域、浮层等全部组件。
- 规范正文与场景说明使用 `14px / 400 / 24px`、`#303133`，不降成灰蓝小字。
- 筛选文本输入占位统一“请输入”；未选择下拉统一“请选择”；默认全部的下拉显示“全部”。字段标签保留业务含义；日期保留开始/结束语义。
- 次级文字操作（查看更多、编辑、详情、数据中心、更多）：`12px / 400 / 18px`，`#3377BB`；保留点击热区。
- 本规范库的深色目录、蓝色展示区属于文档排版，不是业务组件颜色或业务导航规范。

## 本页用法与分类

默认用法：真实页面根据读取过程自动展示当前状态：等待时加载，读取完成后显示数据或相应空提示，失败时显示原因与重试。

| 区分什么 | 本页内容 | 选用或触发条件 |
| --- | --- | --- |
| 请求阶段 | 加载中和读取完成由请求过程决定。 | 开始等待时显示加载反馈；内容到达后显示真实内容，不让用户选择“加载中样式”。 |
| 数据结果 | 暂无数据表示没有记录，无匹配表示现有条件未找到结果。 | 按真实查询结果区分；有筛选条件时保留上下文并提示修改条件，不把两个空态随意互换。 |
| 失败与恢复 | 加载失败和重试是错误处理流程。 | 真实失败才显示错误；本页重试约1秒后只显示本地恢复反馈，不发网络请求。 |

使用边界：四个演示按钮只用来模拟状态，不是产品配置；请求失败不能伪装成空数据，加载结束也不必先变成绿色成功页。

## 组件规则

- **LOAD-EMPTY-R01**：首次加载可用骨架屏；局部更新保留结构并提供正在处理的状态标识；禁止因加载中让布局反复塌陷。
- **LOAD-EMPTY-R02**：暂无数据、筛选无结果与加载失败是不同状态；失败不伪装空表格。重试保留用户上下文。
- **LOAD-EMPTY-R03**：错误态给出可执行下一步；该卡片切换仅为状态演示，不发网络请求。
- **LOAD-EMPTY-R04**：【公共用色】颜色仅从公共色值 引用：主色系 3 个基础色值、辅助功能色 3 个、中性色 10 个，共 16 个基础色值。角色可以多个，实际色值复用；不为每个组件、悬停 或不同字段再新增近似颜色。透明效果仅限遮罩 35% 与阴影 12%，从 外壳深色 派生。
- **LOAD-EMPTY-R05**：【统一字体】统一系统中文字体：macOS 优先苹方（PingFang SC），Windows 通常使用微软雅黑（Microsoft YaHei）；工程顺序固定为 "PingFang SC", "Microsoft YaHei", sans-serif。使用设备已有字体，不要求安装或加载网络字体；最后一项仅作兼容回退，不是供页面作者任选的另一套样式。正文 14px/400/21px；表头与分组标题 14px/600/21px，弹窗标题 16px/600/24px；次级文字操作和辅助说明 12px/400/18px。正文与标题同用 #303133；不通过额外加粗或透明度改变正文轻重。
- **LOAD-EMPTY-R06**：【叠加优先级】状态叠加规则：禁用阻断交互；输入类控件错误边框覆盖蓝色聚焦边框；输入框不叠加外圈或阴影，其他无边框操作保留键盘焦点提示；选中底覆盖悬停底；只读不等于禁用；加载不等于成功；业务启用/停用的文字结果不等于控件是否可点击。
- **LOAD-EMPTY-R07**：【加载中】主题蓝加载图标配正文深灰文字；保留可用表结构或浅灰骨架，不展示空结果或成功提示。
- **LOAD-EMPTY-R08**：【暂无数据】空值灰提示说明没有数据；新增等确有动作使用操作蓝或对应按钮，不能用错误红。
- **LOAD-EMPTY-R09**：【无匹配】空值灰提示说明当前条件无结果；重置或修改条件使用操作蓝，保留查询上下文。
- **LOAD-EMPTY-R10**：【加载失败】错误红图标与短提示共同表达失败，详细原因正文深灰，重试操作蓝；已有数据不伪造为0。
- **LOAD-EMPTY-R11**：【组件边界】暂无数据、无匹配、加载中和读取失败必须分别表达；加载结束显示正常内容，不需要先展示一套成功绿色状态。
- **LOAD-EMPTY-R12**：空状态的文案与结构统一引用“结果与空状态”专题：没有记录使用“暂无数据”，筛选无匹配使用“未找到符合条件的数据”；本页只定义加载、空态、失败与重试之间的转换。

## 场景与验收清单

以下为需核对的场景组；`[ ]` 不代表已经测试通过。

- [ ] **LOAD-EMPTY-S01**：当前样例：切换加载中、暂无数据、无匹配和加载失败；重试按钮约1秒后显示本地恢复文案，不请求接口。
- [ ] **LOAD-EMPTY-S02**：接入验收：首次加载与局部更新的范围、已有内容保留、没有数据与无匹配的不同下一步。
- [ ] **LOAD-EMPTY-S03**：接入验收：失败、权限失效、超时、取消和重复重试；请求状态与正在处理标识 aria-busy 同步。
- [ ] **LOAD-EMPTY-S04**：共用视觉验收：仅核对本组件实际适用的颜色与组合状态；无此能力标为不适用，不给静态内容添加输入错误、半选或按下状态。
- [ ] **LOAD-EMPTY-S05**：共用文字验收：正文14px/400、次级操作12px/400、标题600；检查实际子元素与弹出层。输入焦点只改自身边框，按钮和链接保留键盘焦点轮廓。
- [ ] **LOAD-EMPTY-S06**：当前样例快速切换：点击失败后的重试，再在 1 秒内切换暂无数据、无匹配或加载失败，旧计时任务不得覆盖后选状态。

### 专题验收重点

当前四种状态可切换；失败重试约1秒后退出错误并显示本地恢复文案。真实请求、取消、超时及不同空态的下一步另行验收。

## 当前示例模板

以下来自本专题的结构化示例，使用 Vue 2 模板语法。`v-model`、事件方法、数据列表等依赖 [components.js](../components.js)；完整样式文件及加载顺序见 [通用基线](FOUNDATIONS.md)。自定义组合标签的内部实现由下方依赖文件提供，不能仅复制标签作为完整组件。

```html
<p class="help">以下按钮只用于模拟不同请求状态。真实页面应由请求进度和数据结果自动决定显示内容，不能把这些状态当作可选样式。</p>
<div class="demo-line">
<el-button @click="setFeedback('loading')">加载中</el-button>
<el-button @click="setFeedback('empty')">暂无数据</el-button>
<el-button @click="setFeedback('no-match')">无匹配</el-button>
<el-button @click="setFeedback('error')">加载失败</el-button>
</div>
<div class="feedback-panel" v-loading="feedback==='loading'" element-loading-text="加载中" :aria-busy="feedback==='loading'?'true':'false'">
<el-empty v-if="feedback==='empty' || feedback==='no-match'" :image-size="44" :description="feedback==='empty'?'暂无数据':'未找到符合条件的数据'">
</el-empty>
<div v-if="feedback==='error'" role="alert">
<p class="danger">
<i class="el-icon-error" aria-hidden="true">
</i> 加载失败</p>
<el-button @click="retryFeedback">重试本地样例</el-button>
</div>
<span v-if="feedback==='success'" role="status">重试完成，状态已恢复</span>
</div>
```

## 交付与使用边界

- 规范条款、示例代码与待验收场景分开理解；有示例不等于已覆盖所有样式、交互状态和使用场景。
- 业务接口、权限、时区、金额精度、数据规模等依赖应从实际项目读取，不使用演示值代替生产约定。
- 发生样式或文案变更时，同步专题数据、页面与 Markdown，避免规范和样例分离。

## 来源与关联

- 来源线索：历史样板规范 26 / 27 / 28 / 53。
- [打开本专题页面](../index.html#spec-load-empty)
- [通用基线](FOUNDATIONS.md)
- [规范总索引](README.md)
- [结构化规范数据](../component-data.json)（记录 id：`load-empty`）
- [原始历史样板](../original-20260621.html)
- [历史规范条目](../spec-notes.json)

## 本组件颜色状态表

| 状态 / 条件 | 统一规则 |
| --- | --- |
| 加载中 | 主题蓝加载图标配正文深灰文字；保留可用表结构或浅灰骨架，不展示空结果或成功提示。 |
| 暂无数据 | 空值灰提示说明没有数据；新增等确有动作使用操作蓝或对应按钮，不能用错误红。 |
| 无匹配 | 空值灰提示说明当前条件无结果；重置或修改条件使用操作蓝，保留查询上下文。 |
| 加载失败 | 错误红图标与短提示共同表达失败，详细原因正文深灰，重试操作蓝；已有数据不伪造为0。 |

暂无数据、无匹配、加载中和读取失败必须分别表达；加载结束显示正常内容，不需要先展示一套成功绿色状态。

[公共颜色与字体 token](../color-tokens.json) · [公共组件样式](../color-contract.css) · [系统字体合同（最后加载）](../font-contract.css)

## 业务落地场景

- [存款记录 · 筛选无数据 · 空状态](../../showcase/index.html#deposits) · [场景文档](../../showcase/docs/deposits.md)；落地范围：覆盖筛选无数据，不代表远端请求失败与重试。
- [客服工单管理 · 工单查询等待与筛选无数据](../../showcase/index.html#tickets) · [场景文档](../../showcase/docs/tickets.md)；落地范围：查询等待为本地演示，没有远端失败与重试。

[竞品组件拆解](../../reference-review/竞品组件反推规范.html) · [业务场景分类](../../业务场景分类清单.md)
