# U8 Chat 2.0 · 移动端「设备管理」产品需求文档（PRD）

| 项目 | 内容 |
|---|---|
| 文档版本 | v1.1（2026-09-15 更新：产品已就 5 项决策拍板，详见第十一章） |
| 功能模块 | 我的 → 设备 |
| 适用端 | iOS / Android（移动端）；涉及其它端的登录行为在第六章 6.8 与第八章中约定 |
| 设计稿 | Figma「U8 Chat 2.0」`6dsI4eKdAoZr4RP0uILIBq` · 画布「设备管理」`node 515-989` |
| 线框图与演示 | 同目录 `index.html`（20 屏可点击串联） |
| 查缺补漏报告 | 历史归档 `_archive/01_查缺补漏-页面清单与比对.md` |
| 参照产品 | Telegram「Settings → Devices / Active Sessions」 |

> **本 PRD 的特点**：设计稿已交付 9 屏主干。按 Telegram 逐条筛过后，**真正缺的「页面」只有 1 个**
> （扫码确认授权页），其余补充是**已有页面的状态** 6 屏、**设计稿回改** 1 屏、**其它模块** 3 屏，全案共 **20 屏**。
> 「非 Telegram 固有且可合并」的一律已合并；**编辑态只支持逐个删、不做批量**（决策 D5）。删除会话有「逐个删」与「除本机外全删」两类路径。产品决策见 **第十一章**。

---

## 一、背景与目标

### 1.1 背景

U8 Chat 支持同一个账号在多个端同时在线（iOS、Android、Web、桌面端）。这带来两个必须解决的问题：

1. **用户看不见**：用户无法知道自己的账号此刻登录在哪几台设备上。
2. **用户管不了**：一旦发现陌生设备（账号被盗、旧手机没退登录、公共电脑忘了退），没有办法把它踢下线。

同时，U8 Chat 与 U8 加密钱包共用账号。**设备即资产入口**——一台陌生设备在线，等于资产查看权限暴露。因此设备管理的安全等级要求高于普通 IM。

### 1.2 现状问题（本次要解决的）

| # | 问题 | 影响 |
|---|---|---|
| 1 | 支持多端在线，但设备管理只在设置里有一行入口，且「添加设备」链路两端断裂 | 扫码登录走不通，用户只能靠密码在别的端登录 |
| 2 | 注销会话后没有任何反馈 | 用户不知道成没成，会重复操作，甚至误以为已生效（安全误判） |
| 3 | 编辑态（批量注销）只画了半个界面，且与「全删」重复 | 会让人不知道批量该走哪个入口（**已决策：不补齐编辑态，由「除本机外全删」承接**，见 6.5） |
| 4 | 扫码登录无手机端确认 | 扫到别人发的二维码 = 账号直接被登走（Telegram 最典型的诈骗手法） |
| 5 | 没有新设备登录提醒 | 账号被盗后用户可能几周都不会发现 |

### 1.3 目标

**业务目标**
- 让用户能自助管理登录设备，降低因账号被盗导致的资产损失与客诉。

**用户目标**
- 3 步之内完成「发现陌生设备 → 踢它下线」。
- 在电脑上登录时，用手机扫码 10 秒内完成，且**能看清自己在给哪台设备授权**。

**成功指标（上线首月）**

| 指标 | 目标 |
|---|---|
| 设备管理页周访问 UV / 活跃用户 | ≥ 15% |
| 「注销所有其它设备」操作成功率 | ≥ 98% |
| 扫码登录成功率（进入扫码页 → 电脑端登录成功） | ≥ 85% |
| 从「设备列表」到「注销完成」的平均步数 | ≤ 3 步 |
| 因"陌生设备"产生的安全类客诉 | 环比下降 50% |

---

## 二、范围

### 2.1 本期做

- 设备列表（此设备 + 活跃会话）
- 单台会话注销（详情页按钮入口 + 列表左滑）
- 一键注销所有其它设备
- 自动终止旧会话（超时自动登出）
- 添加设备（扫码登录）**完整闭环**：扫码 → 手机端确认授权 → 电脑端登录 → 结果反馈
- **电脑端二维码页的引导文案**（手机端不再出引导说明页，见 6.8.1）
- 全部状态页：加载中 / 空态 / 失败 / 成功反馈
- 新设备登录的安全通知（站内系统消息）

### 2.2 本期不做（明确划出）

| 不做的事 | 原因 |
|---|---|
| **扫码授权前的资金密码 / Face ID 二次验证** | **已决策本期不做**（见 D2） |
| **「新设备 24 小时内不能注销其它会话」的安全规则** | **已决策本期不引入**（见 D3） |
| **手机端的「添加设备-引导说明页」** | **已决策不做**（见 D6）；点「添加设备」直接进相机，引导由电脑端二维码页承担 |
| **编辑态的批量能力（勾选 / 全选 / 注销所选）** | **不做**：编辑态**保留**，但只支持一台一台删（见 D5 / 6.5）。批量删与「注销所有其它设备上的会话」重复 |
| **登录两步验证（2FA）** | **本期不做** —— 影响见 6.9.1：没有 2FA 时，验证码是登录的必经步骤 |
| 深色模式、大字号无障碍适配 | 随全局一起排期 |

---

## 三、名词定义

| 名词 | 定义 |
|---|---|
| **此设备** | 用户当前正在操作的这台设备。**不能被自己注销**。 |
| **活跃会话** | 除「此设备」外，其它在线的登录会话（含 Web / 桌面端）。 |
| **注销会话** | 结束某一台设备上的登录状态。该设备立即掉线，需重新登录。 |
| **注销所有其它设备上的会话** | 除「此设备」外，一次性结束全部会话。 |
| **自动终止旧会话** | 设置一个时长，超过该时长未上线的设备自动退出登录。 |
| **设备登录二维码** | 由**电脑端（网页版 / 桌面端）** 在登录页展示、仅供手机端扫描授权登录的二维码。**有效期 5 分钟**。 |
| **扫码登录（链接设备）** | 手机端扫描电脑屏幕上的二维码，经手机端确认后，电脑端获得一个独立会话。 |
| **会话 ID** | 每一次登录的唯一标识。同一台设备重复登录会产生新会话。 |

---

## 四、用户与场景

只有一个用户角色：**账号持有者本人**（无管理员、无子账号）。

### 场景 A · 例行巡查（低频、低风险）

> 用户换过几台设备，想确认一下现在还有哪些端在线。
> **路径**：我的 → 设备 → 看到 3 台活跃会话，其中一台是半年前的公司电脑 → 点进详情 → 注销会话 → Toast「已注销」。

### 场景 B · 发现异常登录（低频、高风险、**本功能的核心场景**）

> 用户收到「新设备登录」通知（6.9.1），设备名和位置都不是自己的。
> **路径**：通知 → 前往设备管理 → 看到陌生设备 → 点「注销所有其它设备上的会话」→ 确认 → Toast 成功。
> **要求**：从收到通知到踢掉设备，**不超过 30 秒、不超过 3 步**。

### 场景 C · 换手机 / 旧设备忘了退

> **路径**：新手机上登录 → 我的 → 设备 → 点「注销所有其它设备上的会话」→ 确认（一步清掉所有旧设备）。

### 场景 D · 在电脑上登录（扫码）

> **路径**：在电脑端打开 U8Chat（网页版 / 桌面端）→ 按页面引导切到二维码登录 → 手机：我的 → 设备 → 添加设备 → 扫码 → **确认登录** → 电脑端登入成功，手机端列表新增该设备 + Toast。

### 场景 E · 公共电脑用完就走

> 用户在网吧/酒店电脑上用了网页版，离开前在手机上把它踢掉。
> **依赖**：场景 A + 「最后活跃时间」字段足够准确。

---

## 五、功能总览

| 模块 | 功能点 | 页面（线框图） | 优先级 |
|---|---|---|---|
| A 入口 | 「我的」页设备入口 | — | P0 |
| B 列表 | 设备列表页（此设备 / 活跃会话） | `#E1` | P0 |
| B 列表 | 加载中 / 空态 / 加载失败 | —（**不出独立屏**，规则见 6.2 异常与边界） | 状态 |
| C 详情 | 会话详情面板（含字段补全） | `#E7` `#E8` `#N16` | P0 |
| D 注销 | 单会话注销 + 确认 | `#E9` | P0 |
| D 注销 | 列表左滑注销单台（原编辑态里的左滑，保留并独立） | `#E4` | 已有 · 需回改 |
| D 注销 | 注销所有其它设备 + 确认 | `#E2` | P0 |
| D 注销 | 成功 / 失败反馈 | `#N08` `#N09` | 状态 |
| E 设置 | 自动终止旧会话（含设置后回填） | `#E6` | 已有 |
| F 扫码 | 扫码 → 确认授权 → 结果 | `#E5` `#N02` `#N04` | **新增页面** + 状态 |
| F 扫码 | 失败态 / 权限态 | `#N05` `#N06` | 状态 |
| G 安全 | 新设备登录通知 | `#N17` | 其它模块（聊天） |
| G 安全 | 被注销设备端表现（跨端） | `#N15` | 其它模块（登录） |

---

## 六、需求详述

### 6.1 入口（P0）

| 项 | 说明 |
|---|---|
| 位置 | 「我的」页 → 列表第 7 行「设备」（Figma `573:23903` 已有此行） |
| 右侧 | 默认无内容；**有异常时**显示红点（异常定义见下） |
| 异常定义 | ① 存在"最后活跃时间在 30 天内"但用户从未在自己的设备列表里见过的新会话 → 红点提示「有新的登录设备」 |
| 点击 | 进入设备列表页 `#E1` |

> **待确认 Q1**：红点规则是否要做？做的话需要"用户见过"的本地标记，属于客户端存储。

---

### 6.2 设备列表页 `#E1`（P0）

**页面结构（自上而下）**

1. 导航栏：`‹ 返回` · 标题「设备」 · 右侧无操作（原「编辑」入口**已决策删除**，见 6.5）
2. 扫码登录引导区：二维码图标 + 「通过扫描二维码登录」+ 主按钮「添加设备」
3. **此设备** 分组
   - 一张卡片：设备图标 · 设备名 · 应用与版本 · 位置 · 「在线」
   - 卡片内一条红色操作行：**注销所有其它设备上的会话**
   - 下方灰色说明：登出除此设备外的所有设备
4. **活跃会话** 分组
   - 每台会话一张卡片：设备图标 · 设备名 · 应用与版本 · 位置 · 最后活跃时间
5. 底部说明：U8Chat 官方应用可用于 iPhone、iPad、Android、macOS、Windows。
6. **自动终止旧会话** 分组
   - 一行设置项：「若我不上线」→ 当前值（如「6 个月」）

**字段与数据来源**

| 字段 | 来源 | 规则 |
|---|---|---|
| 设备名 | 系统上报 | 如 `iPhone 17 Pro`、`MacBook Air M1`、`Chrome 152`（网页版用浏览器名） |
| 应用与版本 | 客户端上报 | 格式 `U8Chat <平台> <版本>`，如 `U8Chat iOS 12.8.1`；带渠道时拼接渠道，如 `U8Chat macOS 12.6 APP_STORE` |
| 位置 | IP 估算 | 格式 `城市,国家`（英文，与设计稿一致）；**必须同时展示免责说明** |
| 在线状态 | 服务端 | 此设备固定显示「在线」（蓝色）；活跃会话显示最后活跃时间 |
| 最后活跃时间 | 服务端 | 规则见 7.1 |

**排序规则**
- 此设备固定在最上（不参与排序）。
- 活跃会话按「最后活跃时间」倒序。
- **新登录的设备自然排在最前**（其最后活跃时间即「刚刚」）。
- **不额外打「新」标记**（决策 D7）—— 登录提醒统一由官方账号 U8 Chat 承担（见 6.9.1）。

**数量与滚动**
- 列表不做分页；全部展示，超出即可滚动。
- 设备数 > 20 时（同一账号极少出现），在列表底部追加「仅显示最近 20 台设备」的说明。

**交互**

| 操作 | 结果 |
|---|---|
| 点「此设备」卡片 | 打开此设备详情面板 `#E7` |
| 点「注销所有其它设备上的会话」 | 弹出确认弹窗 `#E2` |
| 点某台活跃会话 | 打开会话详情面板 `#E8` / `#N16` |
| 左滑某台活跃会话 | 露出红色「注销」按钮 → 点击后进确认弹窗 `#E9`（快捷路径，与详情页按钮**等价**） |
| 点右上角「编辑」 | 进编辑态 `#E3`：**其它设备每行出现红色减号** → 点减号进确认弹窗 `#E9`（**只支持逐个删**，见 6.5） |
| 点「添加设备」 | 直接进入扫码页 `#E5` |
| 下拉刷新 | 重新拉取列表 |

**异常与边界**

| 情况 | 处理 |
|---|---|
| 只有此设备 | **照常显示「此设备」卡片**（本机永远在，列表不会全空）；「活跃会话」区显示一行「暂无其它活跃会话 / 你只在这台手机上登录着 U8Chat」；「注销所有其它设备」行**隐藏**。**不单独出空态页** |
| 列表加载中 | **不做骨架屏**（已决策）：正常等待数据返回 |
| 加载失败 | 在设备列表页之上弹一个提示框「**网络连接已中断**」，**不带按钮**；**失败时不展示任何缓存数据**，避免用户基于旧数据做注销决策 |
| 扫码添加设备中 | 该设备以「等待确认」状态临时插入列表（可选，见 Q2） |

**埋点**：页面曝光、拉取成功/失败、点击「添加设备」/某会话/注销所有其它设备、左滑注销。

---

### 6.3 会话详情面板 `#E8` / `#E7` / `#N16`（P0）

**触发**：点击列表中的任一设备（含此设备）。

**结构**（自下而上的 Sheet）

1. 左上角关闭按钮 `✕`
2. 设备图标 + 设备名（大号）
3. 状态行：此设备→「在线」（蓝）；活跃会话→「最后活跃：3 分钟之前」（灰）
4. 信息卡（**本次补全的字段**）
   - 此设备：应用程序、位置、IP 地址、登录时间
   - 活跃会话：应用程序、位置、IP 地址、登录时间、最后活跃时间
5. 免责说明：该位置根据 IP 地址估算，可能并不准确
6. 底部红色按钮：**注销会话**（此设备详情面板中**不出现**此按钮）
   - 这是「一个一个删」的**可见入口**：列表左滑是隐形手势，此按钮保证用户一定找得到删除路径。编辑态取消后，它成为列表页之外唯一的单台删除入口，**不要砍**。

**必改项**
- 删除设计稿中的残留文案「预览兑换」。
- 修正占位数据：MacBook Air M1 的「应用程序」应为 macOS 版本，位置应与列表一致。
- 确认弹窗点名设备（见 6.4）。

**不做的（避免过度设计）**

- **不加会话级开关**。「允许接收通知 / 允许在此设备发起资产操作」是 U8 特有的设想；
  Telegram 的同类开关（新密钥聊 / 接听来电）与 U8 的场景对不上，**本期不引入**。

---

### 6.4 单会话注销 `#E9`（P0）

| 步骤 | 说明 |
|---|---|
| 1 | 用户点击详情面板底部「注销会话」 |
| 2 | 弹出确认弹窗。标题「提示」，正文 **「注销 MacBook Air M1 的会话？」**（**必须点名设备**） |
| 3 | 附一句后果：「该设备将立即退出登录，需要重新登录才能使用。」 |
| 4 | 按钮：`注销会话`（红色，主）/ `取消` |
| 5 | 成功 → 关闭面板、该设备从列表移除、Toast「已注销 MacBook Air M1 的会话」`#N08` |
| 6 | 失败 → 保持原样 + 红色 Toast「注销失败，请检查网络后重试」`#N09`，可在面板底部重试 |
| 7 | 若列表中已无其它设备 → 只在「活跃会话」区显示一行「暂无其它活跃会话」，**不出独立空态屏** |

**被注销端**：见第八章 / `#N15`。

---

### 6.5 编辑态（逐个删）`#E3`（P0）

**入口与形态**

| 项 | 说明 |
|---|---|
| 入口 | 主页 `#E1` 右上角「编辑」；**「活跃会话」为空时该入口隐藏** |
| 形态 | 进入后，**其它设备**（活跃会话）每行左侧出现**红色减号**（待删除态）；「此设备」卡片**不带减号** |
| 点红色减号 | 进**确认弹窗** `#E9`（与左滑注销等价），确认后该台从列表移除 |
| 退出 | 右上角「完成」（✓）回列表 |
| **不做** | 「已选 N 项」计数、**全选**、底部批量提交按钮 —— **只支持一台一台删** |

**设计意图**

进入编辑态只为**露出删除控件**（每行红色减号），**不做多选批量** —— 批量删与 6.6 的「注销所有其它设备上的会话」重复，且要多两步（编辑 → 全选 → 提交）。

**删除会话的全部路径**

| # | 路径 | 入口 | 覆盖场景 |
|---|---|---|---|
| ① | 左滑 | 列表页某台会话左滑 `#E4` → 确认 `#E9` | 只怀疑其中一台 |
| ② | 详情页按钮 | 进 `#E8` → 底部「注销会话」→ 确认 `#E9` | 想先看详情再决定 |
| ③ | 编辑态减号 | 主页「编辑」→ `#E3` → 点某台的红色减号 → 确认 `#E9` | 想在一屏里逐台清理 |
| ④ | **除本机外全删** | 主页「注销所有其它设备上的会话」`#E2` → 确认 → `#N19` | 发现陌生设备，一次清干净（场景 B、C） |

> ①②③ **等价**，都进同一个确认弹窗 `#E9`；④ 是唯一的批量路径。

**设计稿需回改**：`633:23990`（我的-设备-编辑）—— 去掉批量元素（不要「已选 N 项」、不要全选、不要底部操作条），减号点击进确认弹窗；`633:24117`（编辑-确定注销）—— 保留左滑、去掉编辑态外壳，见 `#E4`。

---

### 6.6 注销所有其它设备上的会话 `#E2`（P0）

| 项 | 说明 |
|---|---|
| 入口 | 列表页「此设备」卡片内的红色行 |
| 前置 | 至少存在 1 台活跃会话；否则该行隐藏 |
| 确认弹窗 | 标题「提示」；正文「你确定要注销所有其它设备上的会话吗？」+ **后果说明**「其它设备将立即退出登录，正在进行的加密会话与文件传输会被中断。」 |
| 按钮 | `注销所有其它设备上的会话`（红色）/ `取消` |
| 成功 | **一次清空**其它全部会话，回列表：活跃会话区显示一行「暂无其它活跃会话」；「注销所有其它设备上的会话」红色行同步隐藏。Toast「已注销其它 N 台设备」（报数量，不点名设备 —— 点名是单台路径的规则）。线框 `#N19` |
| 失败 | 保持原样 + 红色 Toast + 可重试（`#N09`）。**不引入 24 小时限制**，故不存在"暂时不允许注销"的业务失败原因 |

**埋点**：点击入口、确认、取消、成功、失败（含失败原因）。

---

### 6.7 自动终止旧会话 `#E6`（P1）

| 项 | 说明 |
|---|---|
| 入口 | 列表页底部「若我不上线」设置行 |
| 选项 | 1 周 / 1 个月 / 3 个月 / **6 个月（默认）** / 1 年 |
| 当前值 | 在弹层中**打勾高亮** |
| 生效 | **选择后立即生效，不另开确认页**：弹层关闭 → 设置行回填新值 → Toast「已设置：1 个月不上线自动终止」 |
| 说明文案 | 设置行下方补一句：「超过该时长未上线的设备将自动退出登录」 |
| 后端行为 | 服务端定时任务扫描 `last_active < now - 阈值` 的会话并注销；被注销端按第八章处理 |

> **待确认 Q5**：是否提供「从不」选项？提供等于允许会话无限期存在。

---

### 6.8 添加设备（扫码登录）完整闭环 `#E5`→`#N02`→`#N04`（P0）

> **这是本次补缺的重点**。原稿只有中间的「扫码取景」一屏，扫到码之后全断。

#### 6.8.1 步骤 1：扫码 `#E5` —— 手机端不做引导说明页（已决策 D6）

**产品已确认：手机端不设「添加设备-引导说明页」，点「添加设备」直接进相机。**

理由：扫码动作本身需要电脑端配合，用户一定是从电脑屏幕上的二维码进入这个流程的，
引导放在**电脑端的二维码页**更自然，不必让用户在手机上看一遍已知的操作步骤。

**但这意味着引导责任转移到了电脑端，电脑端二维码页必须补齐三件事（不可省略）：**

| # | 电脑端二维码页必须有的内容 | 作用 |
|---|---|---|
| 1 | 「用 U8Chat App 扫描此二维码登录」+ 明确的操作指向 | 用户知道下一步该拿手机做什么 |
| 2 | 「二维码 5 分钟内有效，过期将自动刷新」 | 避免用户拿着过期码反复扫 |
| 3 | 「请勿将此二维码截图或发送给他人」 | 扫码 = 授权登录，这是 QR 登录最大的诈骗入口，必须由展示二维码的一端提醒 |

> **注意**：这里说的「电脑端」包含**网页版与桌面端两种形态** —— 两种的二维码页都要有上面三条。文案里**不要写死"网页版"**（出二维码的设备可能是任意一种）。

**手机端只保留一行安全提示**（见 6.8.2 副标题）：传递「不要扫别人发来的码」这一条最关键的信息。

> **待确认 Q10**：电脑端二维码页由谁出稿？若与本期不同期上线，需明确手机端在这段时间内的替代提示。

#### 6.8.2 步骤 2：扫码 `#E5`（已有稿，需改）

**必改项**
- 副标题 `该功能仅支持设备登录二维码` 改为常驻正向文案 + 安全提示：
  **「对准电脑屏幕上的二维码，请勿扫描他人发来的二维码」**
  （前半句正向引导，后半句承接防 QR 诈骗提示 —— 这是手机端唯一保留的一句安全提示）。
- 原 `该功能仅支持设备登录二维码` 下沉为**识别失败时的错误文案**（见 6.10 `#N05`）。
- **不需要**「手电筒」，也**不加**「相册」入口（已决策）：设备登录二维码只可能出现在**电脑屏幕**上 —— 不存在暗光补光，也不存在扫纸质码 / 相册图片的场景。原稿底部的手电筒**去掉**。

**交互**
- 识别成功 → **不直接登录**，进入确认页 `#N02`。
- 识别失败 → `#N05`（见 6.10）。
- 相机权限未开启 → **弹窗引导**（`#N06`，不占整屏），分两种情况：
  1. **第一次授权**：进扫码页时系统弹原生授权弹窗 —— 点「允许」进相机；点「不允许」转入情况 2。
  2. **权限已被关闭**：在扫码页之上弹应用内弹窗 —— **沿用 Figma 原稿的文案与形态**（系统风、两个文字按钮）：标题「**请允许访问**」、副文案「**没有相机权限**」、按钮「**不是现在**」「**设置**」。「不是现在」= 关闭弹窗留在扫码页；「设置」= 跳系统设置，**返回后自动重查权限**，已打开就直接进相机。
  - 弹窗可「取消」关闭；关闭后停留在扫码页，页面上给一个「打开相机权限」的次级入口。
  - **不提供「从相册选择」** —— 设备码只可能在电脑屏幕上。

#### 6.8.3 步骤 3：确认授权 `#N02`（新增，**最关键**）

> 扫码 = 授权一台设备登录你的账号。U8 涉及加密钱包，必须让用户看清「正在给谁授权」。

| 元素 | 内容 |
|---|---|
| 标题 | 登录确认 |
| 设备信息 | 设备名（如 `MacBook Pro 16"`）+ 系统与浏览器（如 `macOS · Safari 浏览器`） |
| 安全提示（黄底） | 这台设备将可以查看你的聊天与资产。如果**不是你自己在电脑上发起的登录**，请点「取消」，并立即前往「我的 → 隐私和安全」修改密码。 |
| 主按钮 | **确认登录** |
| 次按钮 | 取消（**回设备首页** `#E1`，二维码作废） |
| 二次验证 | ❌ **本期不加**资金密码 / Face ID（已决策 D2）。点「确认登录」即授权 |

> **口径变更（2026-09-21）**：确认页**不展示**位置 / IP 地址 / 请求时间 —— 这三项只在本机「设备详情面板」（`#E7` / `#E8`）里看。本页只回答「要不要把这台设备授权登录」，**不承担「这台电脑是不是我的」的判断**。

#### 6.8.4 确认中的状态 —— 不单独出页面

点「确认登录」到电脑端真正登入之间有服务端往返，需要过渡态，但**不值得单独一屏**：

- 按钮进入 loading 并**禁用重复点击**，页面其余部分保持可见（或加一层浅遮罩）。
- 建议 15 秒超时。
- 超时 / 失败：**页面不变**，把按钮上的文案换成
  「登录确认失败，请在电脑端刷新二维码后重试」，并出现「重试」按钮。
- 用户取消：可中断，**回设备首页** `#E1`。

#### 6.8.5 步骤 5：结果反馈 `#N04`（新增）

- 成功 → 回到设备列表，Toast「设备已添加」；新设备插入列表顶部（不打标记，见 6.2）。
- 电脑端同步进入已登录状态。
- 同时触发安全通知（6.9）。

#### 6.8.6 二维码规则（后端）

| 规则 | 值 |
|---|---|
| 生成方 | 电脑端（网页版 / 桌面端）登录页 |
| 有效期 | 5 分钟（前端倒计时提示 + 过期自动刷新） |
| 一次性 | 一个二维码只能被成功授权一次 |
| 失效条件 | 超时、已被使用、用户在电脑端手动刷新 |
| 绑定 | 二维码需绑定发起设备的 UA / IP（服务端校验用）；**手机端确认页不展示位置与 IP** |

---

### 6.9 安全通知与限制（**本期做**）

#### 6.9.1 官方账号「U8 Chat」+ 本期 3 条消息 `#N17` / `#N20`

**它不是一条"服务通知"，而是一个官方账号** —— 名字就叫「**U8 Chat**」，带**官方认证标识**（蓝底对勾），像普通用户一样出现在会话列表里；用户可以点进去看资料页，也可以给它发消息。

**本期只有这 3 条消息**：

| # | 消息 | 触发场景 | 发给谁 |
|---|---|---|---|
| ① | 新用户首次登录 | 新注册用户登录**第一台设备**（账号下没有其它活跃设备） | 该设备自身 |
| ② | 登录验证码 | 新设备用「手机号 + 验证码」登录时。**扫码登录不需要**（扫码本身就是验证） | **已登录的活跃设备** |
| ③ | 新设备登录 | 账号产生**一次新的登录（新会话）** 就发 —— 含扫码、密码登录；**同一台设备退出后重新登录也算** | **所有其它在线端**（离线端下次打开可见） |

---

**① 新用户首次登录**（发给第一台设备自己）

> **欢迎使用 U8 Chat 👋**
> 你的账号已在本设备登录成功。
>
> 这里是 U8 Chat 官方的安全通知通道，账号安全相关的消息都会从这里发出，比如：
> · 账号从新设备登录
> · 有人请求登录验证码
>
> 请认准官方认证标识 —— 我们不会通过其它账号联系你，也永远不会向你索要验证码。

> 措辞用「比如 / 例如」这类**开放表述**，**不要写死「只发这几类消息」** —— 以后加消息时不必改这条老文案。

---

**② 登录验证码**（发到已登录设备）

> **登录验证码**
> **630831**
>
> 不要将此代码提供给任何人，即使他们声称来自 U8 Chat!
> 此验证码仅可用于登录你的 U8 Chat 账户，我们从不为此要求其他任何东西。
> 如果你没有尝试在其他设备上登录而请求此验证码，请忽略此消息。

**验证码走哪条通道**：

| 账号下的活跃设备 | 通道 |
|---|---|
| **有**活跃设备 | 只走**已登录设备的这个会话**，**不走短信** |
| **没有**活跃设备（新用户第一台） | 走**短信** |

**兜底**：登录页一直没收到应用内验证码时，提供「**改用短信**」入口。

> **本期没有两步验证（2FA）**：Telegram 的两步验证是**在验证码之后再加一步密码**，**不是跳过验证码**。U8 本期不做 2FA（见 2.2），因此**验证码是登录的必经步骤**。

---

**③ 新设备登录**（发给所有其它在线端）

> **新设备登录**
> 亲爱的用户，我们检测到你的账号从一台新设备登录。
>
> 设备：U8Chat Web 12.0.43 A · Chrome 144 · macOS 14.5
> 位置：中国, 北京
> 时间：2026 年 9 月 17 日 14:32:07（北京时间）
>
> 如果不是你本人操作，请立即前往「我的 > 设备」终止该会话。

**「设备」字段怎么组**（三段，`·` 分隔）：

| 段 | 内容 | 示例 | 来源 |
|---|---|---|---|
| 1 | **应用与版本** | `U8Chat Web 12.0.43 A` | 客户端上报，规则见 7.2 |
| 2 | **机型 / 浏览器** | `Chrome 144`、`MacBook Air M1`、`iPhone 17 Pro` | 系统上报，见 6.2 字段表 |
| 3 | **操作系统** | `macOS 14.5`、`iOS 18.2`、`Android 14` | 客户端上报 |


**「位置」字段**：`城市, 国家`（**中文** —— 面向用户的通知里不用英文；列表页仍按 7.3 用英文，见该节说明）。

**「时间」字段**：`2026 年 9 月 17 日 14:32:07（北京时间）`，**必须带时区标注**。

---

**官方账号的资料页** `#N20`（点头像进入）

| 项 | 规则 |
|---|---|
| 认证标识 | 名字后缀**蓝底对勾**；会话列表与资料页一致 |
| 「编辑」按钮 | **没有** —— 它不是你的资料，也不可编辑 |
| 状态位 | 显示「**客服**」两个字；**不显示**在线 / 最后上线时间，也不显示设备与位置 |
| 手机号 / 简介等信息卡 | **没有** —— 资料页只有头像、名字、状态与两个操作，**不放信息卡**（"未绑定"这类空值反而会让人以为可以绑定） |
| 加好友 / 拉黑 / 举报 | **没有**这些入口 |
| 静音 | **有** —— 可以关掉它的通知（消息仍留在会话里） |
| 发消息 | **可以**，入口在资料页与会话输入框 |

**通用规则**

- 同时给所有在线端发推送；离线端下次打开可见。
- 通知内**不展示完整 IP**（屏幕被旁人看到时 IP 属于敏感信息）。
- **可静音**（资料页提供），但消息本身**不可关闭、不可删除** —— 安全类消息必须留在会话里。
- 设备管理页**不再重复做「新」标记**（决策 D7）—— 登录提醒只由这 3 条消息承担。

**用户给这个号发消息走哪条通道**

- 用户发出的消息进入**系统后台的接收入口**（客服后台）；
- **后台管理员可选择是否回复** —— 回复时以「U8 Chat」官方账号的身份出现在这个会话里；
- 不回复也可以，用户的消息就留在会话中。

> 这条通道属于**聊天模块**，不在本 PRD（设备管理）的实现范围内，此处只约定它与官方账号的关系。

#### 6.9.2 新设备 24 小时安全限制 —— **本期不引入**（已决策 D3）

**Telegram 的这条规则**：新登录的设备在 24 小时内**不能终止其它会话**（只有「新设备」被冻结，从旧设备操作不受限）。

**U8 本期不引入**。原因：U8 在有活跃设备时，登录验证码只发到已登录设备（不走短信），攻击者原本就难登进来；而这条规则会挡住「丢手机后用新设备**立刻切断旧设备**」这一刚需 —— 旧设备上有**钱包**，等不起 24 小时。

**不引入带来的两个后果**（开发与测试都需要知道）：

1. 新设备登录后**立即可以**注销其它设备上的会话（`#E2` 与 `#E4` 都正常可用）。
2. 因此「注销失败」(`#N09`) 的原因里**不包含**任何"新设备不允许"这类业务限制；失败原因只剩网络异常、会话已失效等。

> 影响：被盗后的防护全部压在 **6.9.1 的「新设备登录」通知** 与 **6.8 扫码确认授权** 上，这两项不建议再砍。

---

### 6.10 状态与异常

| 状态 | 页面 | 规则 |
|---|---|---|
| 列表加载中 | — | **不做骨架屏**：正常等待数据返回（已决策，见第九节） |
| 列表加载失败 | — | 在设备列表页之上弹一个提示框「**网络连接已中断**」，**不带按钮**；不展示缓存数据。**不存在独立的「检查网络」页** |
| 活跃会话为空 | `#E1` | 「此设备」卡片照常显示；「活跃会话」区一行「暂无其它活跃会话 / 你只在这台手机上登录着 U8Chat」；隐藏「注销所有其它设备」行。**不单独出屏** |
| 扫码：不是设备登录二维码 / 已失效 | `#N05` | 取景框转红 + 震动 + 提示「该二维码不是设备登录二维码，或已失效。**请在电脑上的 U8Chat（网页版 / 桌面端）重新获取登录二维码并扫描新二维码。**」 |
| 扫码：二维码已被使用 | `#N05` | 提示「该二维码已被使用，请重新生成」 |
| 扫码：相机权限未开启 | `#N06` | **弹窗引导**（不占整屏）：**第一次授权**走系统原生弹窗；**权限已被关闭**时弹**原稿那版应用内弹窗**（「请允许访问」/「没有相机权限」/「不是现在」「设置」），**从设置返回后自动重查权限**。**不提供「从相册选择」** |
| 注销成功 | `#N08` | Toast + 列表移除 |
| 注销失败 | `#N09` | 红色 Toast + 保留原数据 + 可重试 |

---

## 七、规范

### 7.1 时间显示规则（**必须全站统一**）

| 时间差 | 显示 |
|---|---|
| < 1 分钟 | 刚刚 |
| < 60 分钟 | N 分钟之前 |
| < 24 小时 | N 小时之前 |
| 昨天 | 昨天 HH:mm |
| 2~7 天 | N 天之前 |
| > 7 天且当年 | MM 月 DD 日 HH:mm |
| 跨年 | YYYY 年 MM 月 DD 日 |

> 设计稿现状：`3 分钟之前` 与 `09/11/26`、`06/10/26` 混用，且是美式 MM/DD/YY。**必须回改。**

### 7.2 设备名与平台标识

| 平台 | 图标 | 应用名称示例 |
|---|---|---|
| iOS | 手机 | `U8Chat iOS 12.8.1` |
| Android | 手机 | `U8Chat Android 12.7.3` |
| macOS | 笔记本 | `U8Chat macOS 12.6 APP_STORE` |
| Windows | 笔记本 | `U8Chat Windows 12.6` |
| Web | 浏览器 | `U8Chat Web 12.0.43 A` |

> **设计稿问题**：MacBook Air M1、Chrome 152、Samsung 三台设备的图标全是绿色同款，无法区分平台。**必须按平台区分图标**。

### 7.3 位置与 IP

- 位置格式：列表页 / 详情页用 `城市,国家`（**英文**，与设计稿一致）；**面向用户的通知消息里用中文 `城市, 国家`**（见 6.9.1）。
- 位置为 IP 估算，**每次展示都必须带免责说明**。
- IP 地址只在详情面板展示，且**不在通知类文案中出现**。

### 7.4 文案规范

- 危险操作按钮用红色，且文案说明"注销/退出"，不用"删除"。
- 所有确认弹窗**必须点名对象**（哪台设备、几台设备）。
- 所有确认弹窗**必须说明后果**（掉线、需重新登录、加密会话中断）。
- 失败提示必须给下一步动作（重试 / 检查网络 / 改密码）。
- 涉及"在哪台设备操作"的提示，一律写「**电脑端**」；需要举例时写「电脑端（网页版 / 桌面端）」。**不要写死"网页版"** —— 出二维码的设备可能是网页版，也可能是桌面端。
- 官方账号的欢迎文案**不要写死「只发这几类消息」** —— 本期只发 3 条是**内部范围**，不是对用户的承诺；用「账号安全相关的消息都会从这里发出，比如……」这类**开放表述**。

### 7.5 设备信息字段总表（**一处看全**）

**字段构成与来源**

| 字段 | 含义 / 成分 | 来源 | 格式 | 示例 |
|---|---|---|---|---|
| **设备名** | 机型或浏览器名 | 系统上报 | 原样展示 | `iPhone 17 Pro`、`MacBook Air M1`、`Chrome 152`（网页端用浏览器名） |
| **应用与版本** | U8Chat 这个 **App** 的平台 + 版本（带渠道时拼渠道） | 客户端上报 | `U8Chat <平台> <版本>` | `U8Chat iOS 12.8.1`、`U8Chat macOS 12.6 APP_STORE` |
| **操作系统** | 设备本身的**系统**版本 | 客户端上报 | `<OS> <版本>` | `macOS 14.5`、`iOS 18.2`、`Android 14` |
| **位置** | IP 估算的城市 / 国家 | 服务端（IP 库） | 列表与详情：`城市,国家`（英文）；通知消息：`城市, 国家`（中文） | `Taipei,Taiwan` / `中国, 北京` |
| **IP 地址** | 完整 IP | 服务端 | 点分十进制 | `203.0.113.24` |
| **登录时间** | 本次会话的登录时刻 | 服务端 | `YYYY/MM/DD HH:mm` | `2026/09/11 09:12` |
| **最后活跃时间** | 最近一次活动时刻 | 服务端 | 见 7.1 | `3 分钟之前` |
| **在线状态** | 只有「此设备」有 | 服务端 | 固定显示「在线」（蓝色） | `在线` |

> ⚠️ **别把两个"平台"弄混**：「应用与版本」里的平台是 **U8Chat 这个 App 的**（`U8Chat macOS 12.6`）；「操作系统」是**设备本身的**（`macOS 14.5`）。两者不同，同时出现时不能只写一个。

**三个展示位分别显示什么**

| 展示位 | 显示哪些字段 | 版式 |
|---|---|---|
| **列表行**（`#E1` 每台一行） | 设备名 · 应用与版本 · 位置 + 最后活跃时间 | 三行紧凑：设备名 / 应用与版本 / `位置 · 时间` |
| **详情面板**（`#E7` / `#E8` / `#N16`） | 设备名（大号）· 在线状态或最后活跃 · 应用与版本 · 位置 · IP 地址 · 登录时间（活跃会话再加最后活跃时间） | 顶部图标 + 设备名，下面是信息卡逐行 |
| **通知消息**（`#N17`） | `应用与版本 · 机型或浏览器 · 操作系统` 合成一行，再加位置、时间 | 见 6.9.1 |

**各字段的展示约束**

- **IP 地址**：只在详情面板出现，**列表行与通知消息里都不出现**（旁人看到屏幕时 IP 属于敏感信息）。
- **位置**：每次展示都必须带免责说明「该位置根据 IP 地址估算，可能并不准确」。
- **设备图标**：按平台区分（手机 / 笔记本 / 浏览器），不能所有设备用同一个图标。



---

## 八、跨端行为约定

| 场景 | 各端表现 |
|---|---|
| A 端注销 B 端的会话 | B 端**立即**断开（WebSocket 推送），清掉本地会话数据，弹窗「你的账号已在其它设备注销，当前设备已退出登录」，点确定回登录页 |
| B 端离线时被注销 | 下次打开 / 下次请求时兜底：直接回登录页并给同一提示 |
| 扫码授权登录成功 | 电脑端立即进入已登录状态；手机端列表新增该设备；所有端收到安全通知 |
| 扫码被取消 | 电脑端二维码作废，提示「登录请求已取消，请刷新二维码」 |
| 密码被修改 | 所有会话作废，全部端回登录页（与第八章同一套提示文案体系） |

> **待确认 Q8**：B 端被注销时，是"实时踢出"还是"下次请求时才发现"？前者体验好但需要长连接可靠；后者实现简单但有延迟。建议：**实时踢 + 兜底**。

---

## 九、埋点需求

| 事件 | 触发时机 | 关键参数 |
|---|---|---|
| `devices_page_view` | 进入设备列表 | 来源（我的页 / 通知） |
| `devices_list_load` | 列表请求返回 | 结果（成功/失败）、设备数、耗时 |
| `device_item_click` | 点击某台设备 | 设备平台、是否此设备 |
| `device_session_terminate` | 注销单会话 | 入口（详情页按钮 / 列表左滑）、结果、失败原因 |
| `device_terminate_all` | 注销所有其它设备 | 会话数、结果、失败原因 |
| `device_auto_terminate_set` | 设置自动终止时长 | 原值、新值 |
| `device_link_start` | 进入扫码页 | — |
| `device_scan_result` | 扫码识别 | 结果（成功/非设备码/失效/已使用）、耗时 |
| `device_link_confirm` | 确认授权 | 结果（确认/取消）、耗时 |
| `device_link_success` | 电脑端登录成功 | 总耗时（从扫码页算起） |
| `device_security_notice_click` | 点击安全通知的「前往设备管理」 | — |

---

## 十、验收标准

**功能**
1. 列表能正确区分「此设备」与「活跃会话」，此设备不可被自己注销。
2. 单台注销后：该设备从列表消失，Toast 正确显示设备名，被注销端立即退出登录。
3. 列表左滑某台活跃会话 → 点「注销」→ 确认弹窗**点名该设备** → 完成后该行移除 + Toast。
4. 「注销所有其它设备」在活跃会话为空时自动隐藏。
5. 自动终止旧会话：5 个选项可选，当前值高亮，选择后回填 + Toast。
6. 扫码登录完整闭环：相机 → 扫到码 → **确认页展示正确的设备名与系统 / 浏览器**（**不展示**位置 / IP 地址 / 请求时间）→ 确认 → 电脑端登录成功 → 手机端列表新增 + Toast。
   （点「添加设备」应**直接进相机**，不再有中间引导页。）
7. 取消授权后二维码作废，电脑端提示重新生成。
8. 扫码失败 4 种原因分别有对应文案；相机权限被拒时有引导。
9. 列表加载失败时在列表页之上弹出「**网络连接已中断**」提示（不带按钮）且**不展示缓存数据**；加载中不做骨架屏。
10. 新设备登录后所有在线端收到安全通知；**账号下有活跃设备时，登录验证码通过官方账号「U8 Chat」会话送达（不走短信）**，没有活跃设备时才走短信。
11. **「注销所有其它设备」确认后：其它设备在列表里一次全部消失**，切空态；Toast 报数量（如「已注销其它 3 台设备」）；红色行同步隐藏。**不得只掉一台，也不得报单台设备名的文案**（单台与全删是两条不同路径，反馈文案不同）。
12. 主页点「编辑」进编辑态：**其它设备每行出现红色减号**，点减号进确认弹窗、确认后该台移除；**没有全选 / 没有批量提交**；「完成」退出编辑态。「活跃会话」为空时「编辑」入口隐藏。
13. 从「设备列表」到「注销完成」≤ 3 步。
14. 所有确认弹窗都点名了对象并说明了后果。
15. 时间格式全站符合 7.1。
16. 三端（iOS / Android / Web）的同类页面样式一致。

**性能**
17. 设备列表首屏（骨架 → 数据）≤ 1.5 秒（正常网络）。
18. 扫码识别到确认页出现 ≤ 1 秒。

---

## 十一、决策与待确认

### 11.1 已决策（产品已拍板，开发可直接依此执行）

| # | 问题 | 决策 | 落地说明 |
|---|---|---|---|
| **D1** | 扫码登录是否加手机端「确认授权」？ | ✅ **要加** | 本期必做的新页面：确认页 `#N02`；配套状态：结果 `#N04`、失败态 `#N05`（确认中的状态并入 `#N02`） |
| **D2** | 确认授权前是否再验资金密码 / Face ID？ | ❌ **本期不加** | 点「确认登录」即授权。安全兜底 = 新设备登录通知（6.9.1）+ 用户可随时在设备管理里注销该设备 |
| **D3** | 是否引入「新设备 24 小时内不能注销其它会话」？ | ❌ **不引入** | 新设备登录后即可立即注销其它会话；「注销失败」不含此类业务原因（详见 6.9.2） |
| **D4** | 底部说明是否包含 Linux？ | ❌ **不含 Linux** | 统一文案：「U8Chat 官方应用可用于 iPhone、iPad、Android、macOS、Windows。」 |
| **D5** | 编辑态是取消还是保留？ | ✅ **保留，但只支持一台一台删** | 主页「编辑」→ **其它设备**每行出现红色减号（待删除态）→ 点减号进确认弹窗 `#E9` → 删这一台；**不做全选 / 批量提交**。原稿 `633:23990` **需回改**（去掉批量元素）。「活跃会话」为空时「编辑」入口隐藏（见 6.5） |
| **D6** | 手机端是否要「添加设备-引导说明页」？ | ❌ **不要** | 点「添加设备」直接进相机；扫码前的引导由**电脑端二维码页**承担（见 6.8.1 的三条必补内容） |
| **D7** | 新登录的设备要不要在列表里打「新」标记？ | ❌ **不引入** | 该标记是补线框时自加的：**Figma 原稿没有**、**Telegram 也不这么做**（它靠登录通知）。且新登录设备最后活跃时间是「刚刚」，本来就在最上面，标记信息量低。提醒统一由 6.9.1 新设备登录通知承担（见 6.2 排序规则） |
| **D8** | 设备列表的「空态 / 加载中 / 加载失败」要不要各自出屏？ | ❌ **三屏都不出** | ①**空态**：本机永远在，列表不会全空 —— 「此设备」卡片照常显示，只在「活跃会话」区显示一行提示、红线隐藏；②**加载中**：不做骨架屏；③**加载失败**：在列表页之上弹提示框「**网络连接已中断**」，**不带按钮**、也**不存在独立的「检查网络」页**。规则写进 6.2 与 6.10 |
| **D10** | 相机权限未开启怎么处理？ | ✅ **弹窗引导，且区分两种情况** | ①**第一次授权**：进扫码页时系统弹**原生授权弹窗**；②**权限已被关闭**：在扫码页之上弹应用内弹窗（**沿用 Figma 原稿文案**：「请允许访问」/「没有相机权限」/「不是现在」「设置」），**从设置返回后自动重查权限**。`#N06` 由整屏改为弹窗；**不提供「从相册选择」** |

### 11.2 待确认（不阻塞本期开发）

| # | 问题 | 建议 | 影响范围 |
|---|---|---|---|
| **Q1** | 「我的」页「设备」入口是否做异常红点？ | 建议做，但可延后 | 入口 |
| **Q2** | 扫码后、电脑端确认前，新设备是否先以「等待确认」状态插入列表？ | 建议不做，成功后再插入 | 列表 |
| **Q3** | 会话详情是否加「允许接收通知 / 允许发起资产操作」两个开关？ | **不做** —— U8 特有设想，与 Telegram 的同类开关场景对不上 | 详情 |
| **Q5** | 「自动终止旧会话」是否提供「从不」？ | 不建议提供 | 设置 |
| **Q8** | 被注销设备是实时踢出还是下次请求才发现？ | 实时踢 + 兜底 | 跨端 |
| **Q10** | 电脑端二维码页（含引导文案）由谁出稿、是否与本期同期？ | 若不同期，需定手机端在这段时间的替代提示 | 扫码链路 |

## 十二、附录

### 12.1 页面清单与线框图索引（共 20 屏）

| 性质 | 屏 | 线框图锚点 | Figma |
|---|---|---|---|
| 已有设计稿 | 我的-设备（主页） | `index.html#E1` | 633:23747 |
| 已有设计稿 | 注销会话提示弹窗 | `#E2` | 633:23862 |
| 已有设计稿 | 左滑注销单台会话（原「编辑-确定注销」，编辑态外壳去掉） | `#E4` | 633:24117 |
| 已有设计稿 | 添加设备扫码 | `#E5` | 633:24240 |
| 已有设计稿 | 自动终止旧会话 | `#E6` | 633:24260 |
| 已有设计稿 | 查看此设备信息 | `#E7` | 633:24386 |
| 已有设计稿 | 查看活跃会话设备信息 | `#E8` | 633:24528 |
| 已有设计稿 | 活跃会话注销确认 | `#E9` | 633:24672 |
| 已有设计稿 | 我的-设备-编辑（**逐个删**，见 6.5） | `#E3` | 633:23990 |
| **新增页面** | 扫码成功-确认授权 | `#N02` | — |
| 同一页的状态 | 添加设备-成功反馈（`#N02` 之后） | `#N04` | — |
| 同一页的状态 | 扫码-识别失败（`#E5` 的异常态） | `#N05` | — |
| 同一页的状态 | 扫码-相机权限未开启（`#E5` 的权限**弹窗**） | `#N06` | — |
| 同一页的状态 | 注销会话-成功反馈（`#E1` 的结果态） | `#N08` | — |
| 同一页的状态 | 注销会话-失败（`#E1` / `#E9` 的失败态） | `#N09` | — |
| 同一页的状态 | 注销所有其它设备-成功反馈（`#E1` / `#E2` 的结果态，**一次清空**） | `#N19` | — |
| 设计稿回改 | 会话详情-字段补全（回改 `#E8`） | `#N16` | — |
| 其它模块 | 被注销设备端-退出登录（登录模块） | `#N15` | — |
| 其它模块 | 官方账号 U8 Chat（登录系统消息，聊天模块） | `#N17` | — |
| 其它模块 | 官方账号 U8 Chat-资料页（聊天模块） | `#N20` | — |

> **已取消的屏**（不在线框清单里）：N03 确认中、N11 编辑态未选中、N12 自动终止设置成功、N10 编辑态批量操作栏、N07 活跃会话-空态、N13 加载中、N14 加载失败。它们的要求已并入对应主屏与 6.2 / 6.10 的规则。

### 12.2 主流程演示顺序

`设备列表 #E1` → `扫码 #E5` → `确认授权 #N02` → `添加成功 #N04` → `会话详情 #E8` → `注销确认 #E9` → `注销成功 #N08` → `自动终止设置 #E6` → 回到 `设备列表 #E1`

**另一条路径（除本机外全删）**：`设备列表 #E1` → 点「注销所有其它设备上的会话」红色行 → `确认弹窗 #E2` → `全删成功反馈 #N19`（一次清空 + Toast 报数量）。

> 在 `index.html` 中点「▶ 走一遍主流程」可自动播放第一条顺序；第二条路径可在主页点那条红色行手动走一遍。

### 12.3 与设计稿的差异汇总（需回改设计稿）

1. 删除 Sheet 里的残留文案「预览兑换」（`#E7` `#E8` 对应稿）。
2. 修正 `#E8` 对应稿的占位数据（应用名、位置、时间）。
3. 统一底部说明文案为「U8Chat 官方应用可用于 iPhone、iPad、Android、macOS、Windows。」（**不含 Linux**）。
4. 扫码页副标题改为「对准电脑屏幕上的二维码，请勿扫描他人发来的二维码」（正向引导 + 安全提示）；原「该功能仅支持设备登录二维码」下沉为识别失败时的错误文案。
5. 扫码页**去掉手电筒**，且**不加「相册」入口** —— 设备登录码只可能出现在电脑屏幕上，补光/相册场景不存在。
6. 统一时间格式（见 7.1）。
7. **编辑态改为「逐个删」**：`633:23990` **保留**，但去掉批量元素（不要「已选 N 项」、不要全选、不要底部操作条）；`633:24117` 保留左滑、去掉编辑态外壳；主页 `633:23747` 右上角「编辑」入口**保留**（活跃会话为空时隐藏）。
8. 确认弹窗点名设备 + 补后果说明。
9. 自动终止弹层高亮当前值。
10. 设备图标按平台区分。
11. 删除重复稿（`iOS 2.0` 画板与「设备管理」画布两份完全相同的 9 屏）。
12. 「自动终止旧会话」选项补「1 年」（Telegram 有），并给当前选中值打勾。
13. **电脑端二维码页**补三条引导（操作指向 / 5 分钟有效期 / 请勿转发），见 6.8.1 —— 手机端已不做引导说明页（决策 D6）。
