# U8 Chat 2.0 · 聊天文件夹（会话分组）产品需求文档（PRD）

| 项目 | 内容 |
|---|---|
| 文档版本 | v1.0（2026-09-18）· 依据现有设计稿，补齐**交互口径、边界与判定规则**。补充清单见**第十二章**，需要拍板的点见**第十一章** |
| 功能模块 | 聊天 → 文件夹（会话分组） |
| 适用端 | iOS / Android（同一个 App，一套规则）。Web / Desktop 本期不做，原因见第八章 |
| 线框与演示 | 同目录 `index.html`（**19 屏可点击**：设计稿 9 屏 + 补齐 10 屏） |
| 设计稿 | Figma `NmbFHYOQaU4IFyiiwZPEaS` · 画布「文件夹设计图」`node 5667-99896`（9 屏，2026-09-18） |
| 参照产品 | Telegram「Chat Folders」· 本期为**阉割版**，砍掉的清单见 **2.2**（这一章是本文档最重要的部分） |

> **本 PRD 做了什么**：设计稿把「创建 → 挑聊天 → 保存」这条主线画清楚了，也画好了编辑态之外的绝大多数界面。
> 缺的是两类东西：① **设计稿没画但必须有的页面**（聊天列表上的文件夹标签栏、编辑态、移除确认弹窗、空态）；
> ② **开发无法自行决定的判定规则**（一个聊天能不能在多个文件夹、删除文件夹会不会丢聊天记录、新建的会话要不要自动进文件夹、
> 标签栏显示规则、重名怎么处理、上限多少）。
> 这两类**都不是新功能**，我把它们补齐在第六、七章；**没有**增加任何设计稿之外的 TG 能力（明确不做的清单见 2.2）。

---

## 一、背景与目标

### 1.1 背景

U8 Chat 的会话列表是一个**没有任何分组的平铺长列表**：所有的单聊、群聊、工作群、家庭群、砍价群全部混在一起，只按「新消息时间」排序。

会话数量上去之后，列表就变成了一个"什么都有、什么都要翻"的地方：

1. **重要的人被刷掉**：家人、老板的会话会被 20 个群聊顶下去，用户得一直往下翻。
2. **找不到那个群**：只记得群名头两个字，得靠搜索，而搜索是要"先想起来名字"的。
3. **工作与生活没法分开**：白天在工作群、晚上在生活群，但两边在同一个列表里互相干扰。

文件夹的作用是**给同一个会话列表加一个"筛选视图"**：用户把会话分到「工作」「家人」等文件夹，在聊天列表顶部点一下就能只看这一组。

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

| # | 问题 | 影响 |
|---|---|---|
| 1 | 会话列表只能整体浏览，无法只看某一组 | 高活跃用户（20+ 会话）每天多花大量时间上下翻找 |
| 2 | 重要会话会被新消息顶下去 | 漏看家人/上级的消息 |
| 3 | 工作与生活混在一个列表 | 休息时间被工作群占据注意力，反之亦然 |
| 4 | 只能靠搜索定位会话 | 必须想起名字；想不起来就找不到 |

### 1.3 目标

**业务目标**
- 提升高活跃用户的会话列表使用效率，降低"找会话"的失败率，提升会话打开数（而不是消息量）。

**用户目标**
- 建一次文件夹，之后**一次点击**就能切到自己要的那一组。
- 全程**不丢东西**：删掉文件夹、把聊天移出文件夹，聊天和聊天记录一条都不少。

**成功指标（上线首月，目标值需与数据侧对齐后锁定）**

| 指标 | 目标 |
|---|---|
| 有会话数 ≥ 10 的用户中，创建过文件夹的比例 | ≥ 20% |
| 创建了文件夹的用户，7 日内再次使用标签栏切换的比例 | ≥ 50% |
| 文件夹会话的打开率（相比未分组时同批会话） | 提升 ≥ 15% |
| 因「删了文件夹以为聊天记录也没了」产生的客诉 | ≈ 0 |
| 「聊天列表顶部多了一行」相关的负反馈 | ≈ 0 |

---

## 二、范围

### 2.1 本期做

| 模块 | 内容 | 演示屏 |
|---|---|---|
| 入口 | **我的 → 聊天文件夹**（底栏「我的」页，位于「设备」下面一行） | F0 |
| 文件夹列表 | 空态 / 有内容态；创建文件夹、所有聊天、自建文件夹（按用户顺序） | F1、F2 |
| 编辑态 | 拖拽排序、⊖ 移除、左滑删除、移除前二次确认 | F3、F4、F5 |
| 创建 / 编辑文件夹 | 整屏弹层：文件夹名称（支持 emoji）+ 包含的聊天 + 添加聊天 | F6、F7、F8 |
| 选择器 | 「包含聊天」：搜索 + 全部会话名单 + 圆形多选，可连选 | F11 |
| 已选管理 | 顶部 chip 展示、点 ✕ 移除、chip 超出三行滚动、单个 chip 高亮态 | F12、F13、F14 |
| 移除聊天 | 长按列表行 → 「从文件夹移除」 | F9 |
| **聊天列表标签栏** | 搜索框下方一行标签：**全部** + 自建文件夹；点标签就地过滤会话列表 | **F15、F16、F17** |
| 空态 | 文件夹里没有聊天时在聊天列表里的表现 | F18 |
| 边界 | 名称为空 / 未选聊天 / 重名 / 名称超长 / 数量上限 | F10 |

> 加粗的两行是**设计稿没有画、但不做就不闭环**的部分（建了文件夹无处可用）。这两处已与你确认：**标签栏采用 TG 同款**，**编辑态做完整三件事**。

### 2.2 本期不做（**TG 有、但我们明确不做，逐条划出**）

这张表的作用是**防止开发照着 Telegram 自由发挥**。以下能力**设计稿里没有，本期一律不做**：

| 不做的事 | 说明 / 原因 |
|---|---|
| **按「聊天类型」批量添加**（联系人 / 非联系人 / 群组 / 频道 / 机器人） | TG 有这一整块（对照截屏 `IMG_5957`），U8 的选择器里只有**具体聊天**一项，不做类型维度——U8 的会话类型比 TG 少，批量勾选的价值不足以覆盖理解成本 |
| **「显示文件夹标签」开关**（在每条会话下面显示它所属的文件夹名） | TG 有这个开关（对照截屏 `IMG_5962`），设计稿里**没有**，不做 |
| **排除类规则**（排除已静音 / 排除已读 / 仅显示未读） | TG 的高级筛选规则，设计稿没有，不做 |
| **文件夹级别的免打扰 / 隐藏未读 / 独立未读数开关** | 文件夹只是视图，不改通知行为；相关诉求走会话级的原有免打扰 |
| **文件夹内的批量操作**（批量置顶 / 已读 / 删除） | 与文件夹无关，属会话列表的独立能力 |
| **文件夹分享**（把一组会话分享给好友） | TG 有，U8 不做 |
| **智能文件夹 / 按规则自动归类**（如"所有群聊""所有未读"自动成组） | 设计稿没有，且会让"我选了谁"变得不可预期 |
| **新会话自动加入文件夹** | 新聊天一律只出现在「所有聊天」；用户手动加（见第七章 7.3） |
| **Web / Desktop 的文件夹**（侧边栏、快捷键） | 本期只做移动端（见第八章） |
| **文件夹数量超过 10 个** | 上限 10（与 TG 一致），需拍板（待确认 ③） |
| 深色模式、大字号无障碍适配 | 随全局一起排期 |

### 2.3 端一致性

本期**只有移动端**。同一 App 内 iOS 与 Android 的规则、文案、交互完全一致，**唯一差异是按系统习惯的按压时长与震动反馈**。

---

## 三、名词定义（**务必与开发对齐，避免和现有功能混名**）

| 名词 | 定义 |
|---|---|
| **聊天文件夹** | 本功能在「我的」页的**入口名**（实机口径，不叫「文件夹」）。进入后的页面标题设计稿写作「文件夹」，两处是否统一见待确认 ①。 |
| **文件夹**（本功能） | 用户自建的一组会话的集合。只是一个**视图**，不改变会话本身的任何属性。 |
| **所有聊天** | 系统内置项，等价于"不带筛选的全部会话"。**不可删除、永远排在标签栏第一位**。 |
| **标签栏** | 聊天列表里搜索框下方的**一行可横向滑动的标签**：`全部` + 自建文件夹。本功能的主入口。 |
| **文件夹列表页** | 从「我的 → 聊天文件夹」进入的管理页（F1 / F2），用来创建、排序、删除文件夹。 |
| **编辑态** | 文件夹列表页点右上「编辑」后的状态：可拖拽排序、可 ⊖ / 左滑移除（F3 / F4）。 |
| **创建 / 编辑弹层** | 从底部升起的整屏弹层（F6~F8），含「文件夹名称」与「包含的聊天」。 |
| **包含的聊天** | 某个文件夹里**装着的会话**。同一个会话可以同时在多个文件夹里。 |
| **选择器** | 点「＋ 添加聊天」后打开的「包含聊天」页面（F11），用来勾选会话。 |
| **chip** | 选择器顶部代表"已勾选会话"的小圆片（`头像 + 名字 + ✕`）。 |
| **所属文件夹提示** | 选择器列表里、会话名字下面那行灰色小字，列出该会话**已属于的其它文件夹**（不含当前正在编辑的文件夹）。用来提示"它已经在别的分组里了"。 |
| **移除** | 把某个会话**从这个文件夹里拿掉**。**不是**删除会话、**不是**删除聊天记录。 |
| 会话 / 聊天 | 已有的功能对象（单聊或群聊），本功能只是引用它。 |
| **阉割版** | 无类型筛选、无排除规则、无分享、无自动归类的文件夹。 |

> ⚠️ 开发注意：**「移除」≠「删除」**。UI 上凡是对会话的操作，按钮文字一律用「移除」；只有对整个文件夹的操作才用「删除 / 移除文件夹」。文案见第九章。

---

## 四、用户与场景

角色只有一个：**App 的普通用户**。没有管理员、没有群主权限、不涉及他人。

### 场景 A · 把工作群从生活里摘出去（高频，主场景）

> 用户有 30 个会话，其中 8 个是工作相关的群。他进「我的 → 聊天文件夹 → 创建文件夹」，命名「工作」，
> 在「包含聊天」里连勾 8 个群 → 保存。回到聊天列表，顶部多了一个「工作」标签，
> 之后每次点「工作」就只看这 8 个群，点「全部」回到完整列表。

### 场景 B · 快速找到那个想不起名字的群

> 用户只记得是"公司那个大群"，想不起全名。他点「工作」标签，在 8 个群里扫一眼就找到了——
> 不需要输入任何关键字。这是文件夹相对搜索的核心优势：**缩小范围，而不是要求精确输入**。

### 场景 C · 调整分组

> 建了「工作」和「家人」两个文件夹后，用户觉得顺序该反过来。他进文件夹列表 → 点「编辑」→
> 拖住右侧手柄把「家人」拖到「工作」上面 → 点「完成」。聊天列表标签栏的顺序**立刻**跟着变。

### 场景 D · 不想要这个文件夹了

> 用户不再需要「砍价群」。他进编辑态 → 点该行左侧的 ⊖ → 弹出「移除「砍价群」？」→
> 弹窗告诉他「你的聊天记录不会被删除」→ 点「移除」。文件夹消失，那 6 个群**原样留在「所有聊天」里**。

### 场景 E · 一个人只在某个文件夹里

> 「家人」这个文件夹里有 5 个会话。用户在里面点某个会话进去聊完返回，
> 还是停在「家人」标签下（不跳回「全部」）——避免每次返回都要重新点一次。

### 场景 F · 群被解散 / 好友被删

> 用户文件夹里的某个群被群主解散了。会话列表里这个群消失，**文件夹里也自动消失**，
> 不需要用户手动清理残留（见 7.3）。

---

## 五、功能总览

```
我的
 └─ 文件夹（F1 空态 / F2 有内容）
     ├─ 创建文件夹 ──▶ 新文件夹弹层（F6）
     │                   ├─ 文件夹名称（F7 已填 / F8 插表情 / F10 边界）
     │                   └─ 包含的聊天
     │                        ├─ 添加聊天 ──▶ 包含聊天选择器（F11 未选 / F12 已选 /
     │                        │                             F13 chip 溢出 / F14 chip 高亮）
     │                        └─ 长按某行 ──▶ 从文件夹移除（F9）
     ├─ 编辑（F3 排序 / F4 左滑 / F5 移除确认）
     └─ 点某个文件夹 ──▶ 回到该文件夹的编辑弹层

聊天列表（顶层页）
 └─ 搜索框下方：标签栏（F15 全部 / F16 切到某文件夹 / F17 标签过多横滑 / F18 空文件夹）
```

**一条主线（走一遍主流程）**：我的 → 聊天文件夹 → 创建文件夹 → 填名字 → 添加聊天 → 勾选 → 确定 →
保存 → 回文件夹列表 → 回聊天列表 → 点新标签 → 切回全部 → 编辑 → 左滑 → 移除 → 确认。
（演示页的「▶ 走一遍主流程」按钮就是这个顺序。）

---

## 六、功能详情

### 6.1 入口与页面结构

| 项 | 规则 |
|---|---|
| 入口位置 | **我的 → 聊天文件夹**。与「设备」上下相邻、同属一组 IM 相关条目（见 F0，按实机 1:1 还原） |
| 入口文案 | 「**聊天文件夹**」（实机口径，与 TG 同名） |
| 为什么不用聊天列表右上角 | 右上角已被「编辑」「＋」占用；文件夹是低频设置项，不应出现在高频操作区 |

> 设计稿从「文件夹」这一页开始画，**没有画入口**。入口的位置与样式已按**实机截图 1:1 确认**：演示屏 F0 完整还原了「我的」页（左上二维码按钮、右上「编辑」、头像 + 昵称 + 手机号、四组卡片、底部悬浮胶囊 Tab：聊天 / 联系人 / 资产 / 我的 四项、无搜索圆钮），**只新增「聊天文件夹」一行**，其余内容一律不动。

### 6.2 文件夹列表页（F1 / F2）

从上到下的固定结构：

| 顺序 | 内容 | 说明 |
|---|---|---|
| 1 | 说明图形 + 说明文字 | 「为不同聊天分组创建文件夹，并在它们之间快速切换」（固定文案，不随状态变化） |
| 2 | 分组标题「文件夹」 | 固定 |
| 3 | **创建文件夹** | 紫色（品牌色），永远第一行 |
| 4 | **所有聊天** | 内置项，**不可删除、不可改名**；可被拖拽排序吗？→ **不可以，它永远排在第 2 行**（见 6.3） |
| 5 | 自建文件夹 | 按用户拖拽后的顺序排列，每行右侧有 `›` |
| 6 | 底部说明 | 「点击"编辑"以更改顺序或删除文件夹」 |

**行为**

| 操作 | 结果 |
|---|---|
| 点「创建文件夹」 | 打开创建弹层（F6） |
| 点「所有聊天」 | 打开弹层，展示"所有聊天"的说明（它是内置项，不进入编辑，只有说明）。**不做成可编辑的文件夹** |
| 点某个自建文件夹 | 打开编辑弹层（F7 形态），可改名、加人、移人 |
| 点右上「编辑」 | 进入编辑态（F3）。**没有自建文件夹时「编辑」可点但列表里只有「所有聊天」一行** |

### 6.3 编辑态：排序与删除（F3 / F4 / F5）

**进入方式**：文件夹列表页点右上「编辑」。进入后：

| 元素 | 表现 |
|---|---|
| 右上按钮 | 由「编辑」变为**紫色圆形 ✓**（完成） |
| 「创建文件夹」行 | 编辑态下**不可拖动、不可删除**（它不是一个文件夹） |
| 「所有聊天」行 | **既没有 ⊖ 也没有拖拽手柄**（内置项：不可删、不参与排序，固定占标签栏第一格） |
| 自建文件夹行 | 左侧出现**红色 ⊖** + 右侧**拖拽手柄**（☰） |

**排序（拖拽）**

1. 按住右侧 ☰ 手柄上下拖动，行跟手移动，可插入到任意两行之间。
2. **「所有聊天」的位置固定不动**——它永远是标签栏的第 1 个，用户只能调整自建文件夹之间的先后（这与 TG 不同，TG 允许把「全部」排到末尾；我们简化，避免新手把「全部」藏到滑动区外面）。
3. **拖动即生效，不需要点「完成」保存**；点 ✓ 只是退出编辑态。
4. 松手后立即写本地并同步服务端（见 6.9 的同步说明）。

**删除（两条路径，同一个确认）**

| 路径 | 操作 |
|---|---|
| ⊖ | 点某行左侧的红色 ⊖ |
| 左滑 | 在该行上从右往左滑，露出红色「删除」按钮，再点它 |

两条路径都会弹出**同一个确认弹窗**（F5）：

> **移除「川一喜屋😊😎」？**
> 即将移除该文件夹，你的聊天记录不会被删除。
> 〔取消〕〔移除〕

| 规则 | 说明 |
|---|---|
| 标题带文件夹名 | 文件夹多的时候，用户必须能确认自己删的是哪一个 |
| 正文必须说明后果 | 「聊天记录不会被删除」这句是**必须保留的**，它决定用户敢不敢点 |
| 取消方式 | 点「取消」，或点弹窗外的遮罩区域 |
| 移除后 | ① 文件夹从列表和标签栏消失；② 里面的会话**原样回到「所有聊天」**（它们本来就在）；③ 会话本身与消息**一条都不动**；④ 若被删的是当前选中的标签，自动切回「全部」 |
| 是否可撤销 | **不提供撤销**（Toaster「已移除 / 撤销」不做）。确认弹窗已经是一次拦截 |

### 6.4 创建 / 编辑文件夹弹层（F6 / F7）

**形态**：整屏弹层，从底部升起，上方保留 62px 的可视区（能看到"底下是聊天列表"）。**不是**跳转到新页面。

| 元素 | 规则 |
|---|---|
| 左上 ✕ | 关闭弹层。**若有未保存的改动，直接丢弃、不提示**（与「新建」的心智一致：还没建成功，退出即放弃） |
| 标题 | 「新文件夹」（创建）/ 「编辑文件夹」（编辑已有，见下） |
| 右上 ✓ | 保存。**名称空、或「包含的聊天」为空时置灰**：点它只有一下按压反馈（按钮放大 → 变白 → 弹回，与 TG 一致），**不弹任何文字提示**，也不保存、不关弹层；两个条件都满足后变成紫色可点，点它保存并关闭弹层（F6 全空 / F10 只有名称 / F7 都满足，三屏对照） |
| 分组标题「文件夹」 | 固定 |
| 文件夹名称输入框 | 见 6.5 |
| 分组标题「包含的聊天」 | 固定 |
| ＋ 添加聊天 | 打开选择器（6.6）；**永远在列表第一行** |
| 已选聊天列表 | 每行一个会话（头像 + 名字），顺序＝**添加的先后顺序** |
| 底部说明 | 「选择将出现在此文件夹中的聊天和聊天类型」 |

**创建 vs 编辑的差异**

| | 创建（新文件夹） | 编辑（点已有文件夹进入） |
|---|---|---|
| 标题 | 新文件夹 | 编辑文件夹 |
| 初始内容 | 名称空、聊天空 | 带上该文件夹现有的名称与聊天 |
| 保存 | 新建一个文件夹 | 覆盖该文件夹 |

**保存后的落点**：回到**文件夹列表页**（F2），新文件夹出现在列表末尾（如果是编辑，位置不变）。

### 6.5 文件夹名称的规则

| 规则 | 判定 |
|---|---|
| 必填 | 去掉首尾空格后不能为空。为空时 **✓ 置灰**：点了只有按压反馈，**没有文字提示**，不保存、不关弹层（F6） |
| 聊天至少 1 个 | 「包含的聊天」不能为空。**名称 + 聊天两个条件必须同时满足**才能保存；只有名称、没选聊天时 ✓ 同样置灰（F10） |
| 长度上限 | **12 个字**（emoji 按 1 个字算）。达到上限后输入框**不再接受新字符**（即时截断），不弹提示 |
| 字符 | 允许中英文、数字、符号、emoji；**不做敏感词过滤**（与群名/昵称一致口径） |
| 重名 | **允许重名**（与 TG 一致）。不做重名校验，两个同名文件夹靠顺序和内容区分 |
| 前后空格 | 保存时自动去掉首尾空格 |
| emoji | 支持插入 emoji（F8），复用 App 现有的表情面板 |
| 改名 | 编辑态改名后立即生效；**标签栏上的文字同步变化** |

### 6.6 选择器「包含聊天」（F11）

| 项 | 规则 |
|---|---|
| 打开方式 | 创建/编辑弹层里点「＋ 添加聊天」 |
| 标题 | 「包含聊天」 |
| 搜索框 | 「搜索聊天」，**只在本名单内过滤**，不做全局搜索；大小写不敏感 |
| 名单范围 | 用户**当前所有会话**（单聊 + 群聊），**顺序＝聊天列表里的既有顺序**（新消息在上面），不按名字重排 |
| 名单里不出现 | 已删除的会话、已退出/被解散的群、被拉黑的会话（按会话列表的现有规则） |
| 勾选方式 | 每行一个圆形勾选圈，**点整行即勾选/取消**，可连续点多行，**点选后页面不关闭** |
| 右上 ✓ | 确定返回，把勾选结果写回「包含的聊天」列表 |
| 左上 ✕ | 放弃本次勾选，保持打开选择器之前的状态 |
| 一个会话可在多个文件夹 | **允许**：同一个会话可以同时待在多个文件夹里，文件夹之间没有互斥关系 |
| **已在其它文件夹的会话仍然可选** | **不禁用、不置灰、正常打勾**。名字下面有一行**灰色小字**列出它**已属于的其它文件夹**（逗号分隔，如「拼好饭，设计师」；**不含当前正在编辑的这个文件夹**），让用户一眼知道"再选进去＝它会同时出现在两个文件夹里" |
| 勾选不会影响原文件夹 | 在选择器里勾选一个已在别的文件夹里的会话，**不会把它从原文件夹挪走**，只是让它在两个文件夹里同时出现（见 7.3） |

> `IMG_5957` 是 TG 的这一页：多出一整块「聊天类型（联系人 / 非联系人 / 群组 / 频道 / 机器人）」批量勾选。**U8 不做**，名单里直接列全部会话。

### 6.7 已选管理：chip 区（F12 / F13 / F14）

选择器顶部是「已选 chip + 搜索框」的混合区域：

| 规则 | 说明 |
|---|---|
| chip 内容 | `小头像 + 名字`，已选时**高亮**（F14 的紫色态） |
| 与名单联动 | chip 与名单里的勾选是**同一份状态**，两边永远同步 |
| 移除 | 见下方「chip 的高亮态」：**点（或长按）chip 高亮 → ✕ 才可点**（设计稿画的就是这个两步态）。✕ 只在当前高亮的 chip 上出现，其余 chip 不带 ✕ |
| 搜索框位置 | 与 chip 在同一区域，**跟在 chip 后面**；chip 少时同行，chip 多时自动换行 |
| **超出三行滚动** | chip 区高度上限 **约 3 行（104px）**，超出后**区域内滚动**（右侧出现细滚动条），搜索框始终可见；**滚动的是 chip 区本身，名单不受影响** |

**chip 的高亮态（F14）**：设计稿里有一个 chip 是紫底白字。

| 建议口径 | 说明 |
|---|---|
| 点（或长按）某个 chip → 该 chip 变紫底白字，此时 ✕ 才可点 | **防误触**：手指划过一串 chip 时不会连带删掉一串人 |
| 同一时刻只有一个 chip 高亮 | 点别处即取消高亮 |

> 这是设计稿有意画出来的中间态，**是否保留需拍板**（待确认 ⑥）。若不保留，✕ 直接一步删除（与 TG 一致）。

### 6.8 从文件夹移除某个聊天（F9）

| 项 | 规则 |
|---|---|
| 触发 | 在「包含的聊天」列表里**长按**某一行（0.3~0.5 秒） |
| 表现 | 被长按的行**浮起**（阴影），其余内容压暗；右侧弹出菜单 |
| 菜单项 | **只有一项**：「从文件夹移除」（红色 + 垃圾桶图标） |
| 结果 | 该会话从这个文件夹里消失；**会话本身、聊天记录、未读、置顶全部不变** |
| 取消 | 点菜单外任意位置 |
| 其它入口 | 选择器里取消勾选、chip 上点 ✕，效果完全相同 |

> TG 的文件夹内长按菜单里还有「置顶 / 免打扰」等项，**U8 全部不做**，只留「从文件夹移除」。

### 6.9 聊天列表的文件夹标签栏（**F15 / F16 / F17，本功能的核心**）

这是设计稿缺的一环，也是文件夹真正被用起来的地方。

**位置**

```
[状态栏]
[导航栏]      编辑            U8 Chat            ＋
[搜索框]      搜索
[标签栏]      全部 | 川一喜屋😊😎 | 工作 | 家人朋友     ← 本功能新增，位置在搜索框与会话列表之间
[会话列表]    ...
[底部 Tab]     聊天 | 联系人 | 资产 | 我的   ← 本次改版：无搜索圆钮
```

**标签栏规则**

| 规则 | 说明 |
|---|---|
| 显示条件 | **有 ≥ 1 个自建文件夹时才显示**。一个文件夹都没有时，整条标签栏不占位（保证老用户升级后零变化） |
| 标签内容 | 第 1 个永远是「**全部**」，后面按文件夹列表页的顺序排列 |
| 「全部」 | 不可删除、不可改名、**位置固定在第一个、不参与排序** |
| 未读数 | 标签上显示该文件夹内的未读会话数（口径见待确认 ⑧）；无未读时不显示 |
| 选中态 | 白底 + 品牌紫文字 + 轻阴影（与搜索框同层的视觉语言） |
| 横向滚动 | **单行横向滑动**，不换行、不折叠、不放进「更多 ⌄」下拉；切到某个标签时自动把它滚进可视区 |
| 默认选中 | 冷启动默认「全部」（是否记住上次选择，见待确认 ⑨） |

**切换标签的行为**

| 规则 | 说明 |
|---|---|
| 就地过滤 | **不跳页**。导航栏、右上「编辑」「＋」、底部 Tab 全部不变，只有会话列表内容变化 |
| 排序 | 过滤后**仍按原有排序规则**（新消息置顶、置顶会话在最上），文件夹**不改变顺序**，只筛掉不在里面的会话 |
| 未读与通知 | 不在当前标签下的会话**照常收消息、照常通知、照常计未读**。文件夹只是"看不见"，不是"不打扰" |
| 已读 | 在当前标签下把会话滑掉/点开，与在「全部」下操作完全一致 |
| 点进会话 | 从文件夹点进会话，与从「全部」点进**完全一致**；返回后**停在原标签**（场景 E） |
| 空文件夹 | 显示空态（按实机 1:1）：**立体文件夹图标** + 标题「**文件夹为空**」+ 说明「该文件夹内暂无聊天。」+ 底部「**编辑文件夹**」主按钮（点了直接进编辑弹层加聊天 / 改名）；**标签栏与底部 Tab 照常显示**（F18）。注意空文件夹只可能来自「事后被清空」——创建时至少要选 1 个聊天 |
| 搜索与文件夹的关系 | 聊天列表的搜索**默认在「全部」范围内搜**，与当前标签无关（避免"搜不到以为没有"；如需按标签搜，见待确认 ⑩） |

**同步**：文件夹的新增、改名、排序、删除**立即写本地并同步服务端**，多设备登录时以最后一次操作为准（冲突时的合并规则沿用现有设置项的同步策略）。

### 6.10 与既有功能的关系（**逐条对照，避免误伤**）

| 既有功能 | 文件夹的影响 |
|---|---|
| 会话列表排序 | **不变**。文件夹不改变会话的排序权重，只是筛选视图 |
| 置顶会话 | **不变**。置顶会话在「全部」和各文件夹里都置顶（只要它在该文件夹里） |
| 未读红点 / 角标 | **不变**。会话级未读照常；App 图标角标仍是**全部**未读总数，不是当前标签的 |
| 新消息通知 | **不变**。不在当前标签下的会话，消息来了照常通知（这是与「免打扰」的本质区别） |
| 消息免打扰 | **不变**。免打扰是会话级设置，与文件夹无关 |
| 搜索会话 | 见 6.9 最后一行 |
| 长按会话（标记已读 / 删除） | **不变**。在任意标签下长按会话，行为与在「全部」下一致 |
| 新建会话 / 被拉进新群 | 新会话**只出现在「所有聊天」**，不会自动进任何文件夹（见 7.3） |
| 底部 Tab | **不变**（本次全局把底栏改成「**聊天 / 联系人 / 资产 / 我的**」四项、去掉搜索圆钮；文件夹功能自身不改底栏） |
| 「我的」页 | 只在 IM 相关的那一组里新增一行「聊天文件夹」 |

---

## 七、异常与边界

### 7.1 状态对照表（**验收时逐条走**）

| # | 场景 | 期望表现 | 演示屏 |
|---|---|---|---|
| 1 | 一个文件夹都没有 | 文件夹列表页只有「创建文件夹 / 所有聊天」；聊天列表**没有标签栏** | F1 |
| 2 | 有 1 个文件夹 | 标签栏显示 2 个标签「全部 / XX」 | F15 |
| 3 | 名称空着点 ✓ | ✓ 置灰：只有一下按压反馈（放大 → 变白 → 弹回），**没有任何文字提示**，不保存 | F6 |
| 4 | 名称填了但一个聊天都没选 | ✓ 同样置灰、点不动；**空文件夹在创建阶段造不出来** | F10 |
| 5 | 两个文件夹重名 | 允许，列表里出现两行同名 | — |
| 6 | 名称输入到 12 字后再输入 | 输入框不再接受新字符 | F10 |
| 7 | 名称里插 emoji | 允许，emoji 计 1 字；标签栏正常显示 | F8 |
| 8 | 已选 chat 超过 3 行 | chip 区出现滚动条，名单不被顶走 | F13 |
| 9 | 点 chip 的 ✕ | 该会话从已选消失，名单里勾也取消 | F12 / F14 |
| 9b | 会话已经在别的文件夹里，又在这里被勾选 | **允许**；名字下面的灰色小字照常显示它原来属于哪些文件夹 | F11 / F12 |
| 10 | 长按「包含的聊天」某行 | 行浮起 + 菜单「从文件夹移除」 | F9 |
| 11 | 编辑态点 ⊖ | 弹确认弹窗；点「移除」后文件夹消失、会话回到「所有聊天」 | F3 / F5 |
| 12 | 编辑态左滑 | 露出「删除」按钮，点了同样进入确认弹窗 | F4 / F5 |
| 13 | 删除正在看的文件夹 | 标签自动切回「全部」 | F5 |
| 14 | 打开一个空文件夹的标签 | 空态：图标 + 「文件夹为空」+「该文件夹内暂无聊天。」+「编辑文件夹」按钮；标签栏不消失 | F18 |
| 15 | 文件夹数量到达 10 个 | 「创建文件夹」置灰 + 提示「最多可以创建 10 个文件夹」（**待拍板**） | — |
| 16 | 文件夹名很长 | 列表页与标签栏都不截断（上限 12 字，够用） | F2 |
| 17 | 文件夹里的会话被删除/退群 | 会话消失时**自动从所有文件夹移除**，不出现空的占位行 | — |
| 18 | 无网络时创建/改名 | 允许本地先存，联网后同步（沿用现有设置项的离线策略） | — |

### 7.2 名称边界（汇总）

| 情况 | 处理 |
|---|---|
| 空 / 全空格 | 拦截 + 提示 |
| 超 12 字 | 输入框即时截断 |
| emoji | 允许，计 1 字 |
| 重名 | 允许 |
| 特殊符号 | 允许（与昵称口径一致） |
| 前后空格 | 保存时去掉 |

### 7.3 会话发生变化时

| 情况 | 期望表现 |
|---|---|
| **被拉进新群 / 新建单聊** | 新会话**不自动进入任何文件夹**，只在「所有聊天」；标签栏的未读数按 6.9 的规则计算 |
| **会话被删除 / 清空聊天记录** | 会话消失时自动从所有文件夹移除；清空记录只清消息，会话仍在文件夹里 |
| **退出群 / 被移出群 / 群被解散** | 同「会话被删除」 |
| **删除好友（拉黑）** | 会话仍在文件夹内（会话没消失）；拉黑后的通知规则沿用现有逻辑 |
| **同一会话在多个文件夹里** | 允许，互不影响；在任意一个文件夹里「移除」都不影响其它文件夹。选择器里勾选它**不会**把它从原文件夹挪走（F11 的名字下面会有灰色小字提示它已属于哪些文件夹） |
| **文件夹里的会话全部失效** | 文件夹本身保留，只是变空 → 显示 F18 空态 |

### 7.4 标签栏边界

| 情况 | 处理 |
|---|---|
| 0 个自建文件夹 | 标签栏整体隐藏 |
| 标签文字过长 | 不截断（≤12 字）；标签栏横向滑动 |
| 标签很多（10 个） | 仍单行横滑；切到的标签自动滚入可视区 |
| 用户把某个文件夹改名成超长 emoji 串 | 上限 12 字已经兜住 |

---

## 八、跨端差异（Web / Desktop）

本期**不做** Web 与 Desktop 的文件夹。原因：

1. 桌面端会话列表是**多栏布局**（会话栏 + 聊天区），文件夹的落点需要单独设计（TG 是把它放进会话栏顶部，与移动端同款），**现有设计稿只覆盖移动端**；
2. 桌面端的会话量大、窗口宽度变化范围大，标签栏的溢出策略需要单独定；
3. 先看移动端的使用数据，再决定桌面端的形态。

**保持一致的部分**：数据模型（同一个账号的文件夹、顺序、包含的会话必须跨端一致），所以**服务端的数据结构本期就要按跨端设计**，避免以后回改。

---

## 九、新增文案

| # | 位置 | 文案 | 备注 |
|---|---|---|---|
| 1 | 我的 → 入口 | 聊天文件夹 | 实机口径（F0 按实机还原） |
| 2 | 文件夹列表页标题 | 文件夹 | |
| 3 | 右上按钮 | 编辑 | |
| 4 | 列表页说明 | 为不同聊天分组创建文件夹，并在它们之间快速切换 | 固定文案（设计稿原文） |
| 5 | 列表第一行 | 创建文件夹 | |
| 6 | 列表第二行（内置） | 所有聊天 | |
| 7 | 列表底部说明 | 点击"编辑"以更改顺序或删除文件夹 | 设计稿原文 |
| 8 | 创建弹层标题 | 新文件夹 | |
| 9 | 编辑已有文件夹标题 | 编辑文件夹 | 新增 |
| 10 | 名称输入框占位 | 文件夹名称 | |
| 11 | 分组标题 | 包含的聊天 | |
| 12 | 添加入口 | 添加聊天 | 设计稿原文（带 ＋） |
| 13 | 选择器标题 | 包含聊天 | 设计稿原文 |
| 14 | 选择器搜索占位 | 搜索聊天 | |
| 15 | 弹层底部说明 | 选择将出现在此文件夹中的聊天和聊天类型 | 设计稿原文 |
| 16 | 长按菜单 | 从文件夹移除 | |
| 17 | 移除确认标题 | 移除「{文件夹名}」？ | 设计稿对照原文是「移除 Name1?」 |
| 18 | 移除确认正文 | 即将移除该文件夹，你的聊天记录不会被删除。 | 人称统一为「你」 |
| 19 | 移除确认按钮 | 取消 / 移除 | |
| 20 | ——（无文案） | 名称空 / 聊天空时 **不弹任何文字提示**，只做按钮按压反馈（放大 → 变白 → 弹回，与 TG 一致） | 这是设计口径，不是遗漏 |
| 21 | 数量上限提示 | 最多可以创建 10 个文件夹 | 新增（待拍板） |
| 22 | 聊天列表标签 1 | 全部 | **不是**「所有聊天」——标签栏用两字，管理页用四字 |
| 23 | 空文件夹标题（空态） | 文件夹为空 | 新增（F18） |
| 24 | 空文件夹说明（空态） | 该文件夹内暂无聊天。 | 新增（F18） |
| 25 | 选择器 · 会话副标题 | {文件夹A}, {文件夹B} | 半角逗号 + 空格分隔（与 TG 一致）；只列**其它**文件夹（不含当前编辑的）；该会话不属于任何其它文件夹时**不显示这一行** |
| 26 | 空文件夹按钮 | 编辑文件夹 | 新增（F18，实机口径） |

> ⚠️ 文案一致性：**管理页叫「所有聊天」，标签栏叫「全部」**（长度考虑）。两者指同一个东西，如果开发担心混淆，可以统一为「全部」。**需拍板**（待确认 ②）。

---

## 十、埋点与数据

| 事件 | 触发时机 | 关键参数 |
|---|---|---|
| `folder_create_click` | 点「创建文件夹」 | from（列表页 / 空态） |
| `folder_create_done` | 创建成功保存 | chat_count（0 / 1~5 / 6~20 / 20+）、name_len、has_emoji |
| `folder_pick_open` | 打开选择器 | current_selected |
| `folder_pick_done` | 选择器点 ✓ | added / removed 数量 |
| `folder_switch` | 点标签栏切换 | to_tag（all / folder）、folder_index、folder_chat_count |
| `folder_edit_enter` | 进入编辑态 | folder_count |
| `folder_reorder` | 拖拽排序完成 | from_index / to_index |
| `folder_delete_click` | 点 ⊖ 或左滑删除 | 方式（minus / swipe） |
| `folder_delete_confirm` | 确认弹窗点「移除」 | folder_chat_count |
| `folder_delete_cancel` | 确认弹窗点「取消」 | — |
| `folder_remove_chat` | 从文件夹移除某个会话 | — |

**要看的数**

1. 创建转化率：`folder_create_click → folder_create_done`；
2. 创建后是否真用：`folder_switch` 的 7 日留存；
3. 每个文件夹装多少会话（判断"默认要装谁"的引导是否必要）；
4. **`folder_delete_cancel` / `folder_delete_confirm` 的比值**——这个比例异常低，说明「聊天记录不会被删除」那句没让人放心，需要改文案；
5. 标签栏点「全部」的比例——如果极低，说明标签栏可能遮挡列表，需要评估位置。

---

## 十一、待确认（**需要产品拍板，开发据此实现**）

| # | 待确认项 | 建议 | 影响 |
|---|---|---|---|
| ① | **两处文案不一致**：入口叫「**聊天文件夹**」（实机），进去后的页标题设计稿写的是「**文件夹**」 | 建议统一为「聊天文件夹」（与入口、与 TG 同名） | 演示按各自主源呈现：入口＝聊天文件夹、页内标题＝文件夹；定了之后我统一改 |
| ② | **标签栏第一格叫「全部」还是「所有聊天」** | 建议标签栏用「全部」（两字更省横向空间） | 文案一致性 |
| ③ | **文件夹数量上限**：定 10 个？ | 建议 10（与 TG 一致），超限时「创建文件夹」置灰 + 提示 | 需要开发做上限拦截 |
| ④ | **删除路径是否两条都做**（⊖ + 左滑） | 建议都做：⊖ 是显式路径、左滑是快捷路径 | 少做一条可省工作量 |
| ⑤ | **chip 区高度上限**：3 行（104px）还是 2 行 | 建议 3 行 | 影响选择器首屏能看到几条名单 |
| ⑥ | **chip 的 ✕ 是一步删除还是两步（先高亮再删）** | 建议保留两步（防误删一串人） | 设计稿 F14 画的是两步 |
| ⑦ | **长按时长与震动**：跟 App 现有长按（0.4s）一致？ | 建议复用现有长按组件，不单独定 | 与本功能无关，但要与全局一致 |
| ⑧ | **标签上要不要显示未读数** | 建议显示（该文件夹内的未读会话数），无未读不显示 | 需要定口径：按"会话数"还是"消息数" |
| ⑨ | **是否记住上次选的标签** | 建议记住（TG 如此），冷启动回到上次的标签 | 影响冷启动逻辑 |
| ⑩ | **搜索与文件夹的关系**：搜索是全局，还是只搜当前标签 | 建议**全局搜**，避免"搜不到以为没有" | 影响搜索页的取数范围 |
| ⑪ | **文件夹是否计入 App 图标角标** | 建议**不计入**，角标永远是全部未读总数 | 角标口径 |
| ⑫ | **"所有聊天"能不能参与排序** | 建议不能，固定第一个（比 TG 更简单，避免藏到滑动区外） | 演示 F3 已按此实现 |
| ⑬ | **视觉走查**：「我的」页图标是彩色一套（蓝 / 绿 / 橙 / 红），而文件夹功能内部用的是品牌**紫**（创建文件夹、勾选圈、✓） | 建议保持现状（图标彩色 + 操作紫，与 TG 的做法一致），但需设计确认一次，避免评审时被当成「颜色不统一」 | 纯视觉，不影响开发 |

---

## 十二、相对设计稿补了什么（**逐条交代，没有偷偷加功能**）

设计稿共 **9 屏**，全部保留、未改动任何一屏的既定设计。在此基础上补了 **10 屏**：

| 补充屏 | 类型 | 为什么必须补 |
|---|---|---|
| F0 我的 → 聊天文件夹 | 入口位置 | 设计稿从「文件夹」页开始画，没说从哪进；已按**实机截图 1:1 还原**「我的」页（含底部 Tab：聊天 / 联系人 / 资产 / 我的，无搜索圆钮；「我的」图标＝用户头像） |
| F2 文件夹列表（有内容） | 状态屏 | 设计稿只有空态；有文件夹才是日常的样子（对照 TG `IMG_5963`） |
| **F3 编辑态（拖拽 + ⊖）** | **新页面** | 设计稿只有一句文案承诺"改顺序或删除"，没有画面 |
| **F4 左滑删除** | 状态屏 | 同上（对照 TG `IMG_5965`） |
| **F5 移除确认弹窗** | **新页面** | 删除不可逆，必须有一次反悔（对照 TG `IMG_5962`） |
| F10 边界：名称空 / 未选聊天 | 边界屏 | 不定义就会出现"无名文件夹"或静默失败 |
| **F15 聊天列表标签栏** | **新页面** | **最关键的一环**：文件夹建好后必须有地方用它，否则"在它们之间快速切换"无处落地 |
| F16 切到某文件夹 | 状态屏 | 过滤后的样子 |
| F17 标签过多横滑 | 规则屏 | 文件夹一多的必然情况 |
| F18 空文件夹空态 | 状态屏 | 创建时至少要选 1 个聊天，所以空文件夹只可能来自「**事后被清空**」（长按移除 / 会话失效），这个状态必须画；空态样式按**实机截图 1:1 还原**（图标 + 文件夹为空 + 该文件夹内暂无聊天。 + 编辑文件夹按钮） |

**没有做的事**（与 2.2 一致，再强调一遍）：没有加「聊天类型」批量选、没有加「显示文件夹标签」开关、没有加排除规则、没有加免打扰、没有加分享、没有加自动归类。**TG 的能力清单里，我们只用到了"分组 + 切换 + 排序 + 删除"这一层。**

---

## 附：演示页怎么用

打开同目录 `index.html`：

- 左侧列表按 4 组列出 **19 屏**，可按「设计稿已有 / 本次补齐」筛选；圆点颜色：蓝＝设计稿已有、红＝补齐的关键缺口、黄＝补齐的状态与规则屏；
- 中间是手机，**页面上的虚线框就是可点的地方**——鼠标**悬停会显示它会跳到哪一屏**，点它按真实流程跳下一屏；
  全案共 **170 个可点元素**（屏内热区：底部 Tab、导航栏按钮、标签栏、列表行、勾选圈、chip、空态按钮）；
- 有些元素在演示里没有对应页面（如「我的」页的「编辑」、聊天列表的「+」、底部的「聊天 / 联系人 / 资产 / 我的」），**点它们会弹一句话说明**，不会出现「点了没反应」
- 点「**▶ 走一遍主流程**」自动播放：我的 → 聊天文件夹 → 创建 → 挑聊天 → 保存 → 回聊天列表 → 切标签 → 编辑 → 删除；
- 右侧是每屏的「这屏解决什么 / 设计要点 / Telegram 对照 / 待确认」；
- 键盘 `←` `→` 切屏，`H` 显示全部热区。
