1. 需求说明
- 目的:用户可一次处理当前 `訊息` 列表全部未读会话,不需逐条进入。
- 作用范围:入口位于 `訊息` 页签;点击后更新本地数据库,并刷新 `訊息`、`聯絡`、`群組` 中对应会话的未读状态。
- 展示规则:起始静止与下滑不展示;上滑时展示,上滑停住后持续展示。
- 完成反馈:本地处理完成后显示成功 toast,文案中的数量取本次实际标记为已读的消息数。
本需求包含两个独立功能:`一键已读` 用于处理当前 `訊息` 列表全部未读会话; `群聊 icon` 用于在群聊头像右下角增加群组标识,个聊不展示该标识。
原型图与本功能 PRD 连续展示;左侧为上滑过程,右侧为一键已读入口与处理完成后的成功 toast。
| 字段名称 | 交互 | 说明 |
|---|---|---|
| 起始静止 | 不展示 | 进入 `訊息` 列表且未执行手势时,不展示一键已读提示条。 |
| 下滑 | 不展示 | 列表向下滑动时不展示一键已读提示条。 |
| 上滑 | 展示 | 本地未读总数大于 `0` 时,列表向上滑动即展示提示条,不设置像素阈值。 |
| 上滑停住 | 持续展示 | 上滑后停止操作时保留提示条,直到点击 `X`、点击 `一键已读`、切换页签或离开页面。 |
| 提示文案 | 展示本地未读总数 | `当前有 {list_unread_total} 条未读消息`;大于 `999` 仍展示实际数值。 |
| 关闭 | 点击 `X` | 仅关闭当前提示条,不修改本地未读;再次上滑可重新展示。 |
| 提交 | 点击 `一键已读` | 在单次本地数据库事务中,将当前消息列表既有未读会话标记为已读;不发起网络请求,不展示 loading。 |
| 完成 | 同步刷新未读状态 | 读取本地数据库最新结果,并刷新 `訊息`、`聯絡`、`群組` 中对应会话、提示条及底部聊天角标。 |
| 成功 toast | 展示 2 秒或点击 `X` | 文案为 `已将 {read_all_success_count} 条消息标记为已读`;左侧展示成功 icon,右侧展示 `X`。2 秒后自动关闭;点击 `X` 立即关闭,不回滚本地已读状态。 |
| 底部角标 | 同步更新 | 小于等于 `999` 展示实际数值;大于 `999` 展示 `999+`。 |
list_unread_total 缺失、不合法时,不展示入口。原型图与本功能 PRD 连续展示;用于区分 `訊息` 列表中的群聊与个聊。
conversation_type 为准,前端不得推断。conversation_type。
group 进入群聊样式;direct 进入个聊样式。
| 字段名称 | 交互 | 说明 |
|---|---|---|
| 识别范围 | `訊息` 页签会话行 | 不改变 `聯絡`、`群組` 页签与既有排序。 |
| 类型来源 | 读取 conversation_type | group 为群聊;direct 为个聊。 |
| 群聊 icon | 头像右下角展示 | 使用原型群组标识;不得覆盖头像主体、未读角标或会话文字。 |
| 个聊 | 不展示群聊 icon | 沿用既有头像、昵称、摘要、时间与在线状态。 |
| 未读角标 | 沿用头像左上角 | 可与群聊 icon 同时展示,二者不得重叠。 |
| 点击区域 | 点击整行 | 群聊进入对应群聊天室;个聊进入对应一对一聊天室。 |
| 更新字段 | 随列表刷新 | 使用 conversation_type_version 避免旧类型覆盖新类型。 |
conversation_type 缺失或不合法时不展示群聊 icon。| 版本 | 日期 | 作者 | 说明 |
|---|---|---|---|
| V1.0 | 2026-09-08 | Tilly |
|
| V1.1 | 2026-09-10 | Tilly |
|