feat(web): 下线自主注册与协议勾选,修复转发消息报错,转发选择器分组+全选

按产品决定移除面向国内客户不适用的自主注册入口:删除 /register 路由
及 RegisterPage、登录页"马上注册"链接、登录/注册共用的协议勾选组件
Agreement,以及仅注册流程使用的 registerAccount/queueAccExtra 等
死代码;登录不再依赖勾选协议才能提交。

修复转发消息报错(真实高频bug,不限于个别场景):`forwardMessage`/
`sendText` 发送前只是 `tinode.getTopic()` 取一个本地话题对象,从未
真正订阅——SDK 要求话题处于 attached 状态才允许发布,而只有当前正
打开的会话才满足这一点,一旦切换过/离开过某个会话(哪怕之前订阅过
预览),它就会变回未订阅状态。也就是说转发给"当前会话之外"几乎任何
一个联系人都会失败。新增 `ensureTopicAttached()`,在转发前按需临时
订阅目标话题,单条转发和多选批量转发两处都已接入,实机验证对未打开
过的好友/群转发均成功。

转发选择器(ForwardPickerModal)按好友/群聊分组显示(原来混在一个
列表里),并加了"全选/取消全选",避免多个接收方时逐条点选。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-09-10 19:04:59 +08:00
co-authored by Claude Sonnet 5
parent 1826d2906f
commit 46b3288880
13 changed files with 161 additions and 474 deletions
+2 -2
View File
@@ -28,8 +28,8 @@ interface SessionState {
* it, since a returning user's auto-login still needs it to build the {hi} packet and every REST
* call's X-Tenant-Code header. `myUserId` is *not* persisted here -- trusting a stale uid from a
* previous session without re-authenticating would be wrong. Instead, app/RequireAuth.tsx re-derives
* it on mount via `Tinode.loginToken()` against the reusable session token LoginPage/RegisterPage
* write to `sessionStorage`, which is the actual thing that should survive a same-tab reload.
* it on mount via `Tinode.loginToken()` against the reusable session token LoginPage writes to
* `sessionStorage`, which is the actual thing that should survive a same-tab reload.
*/
export const useSessionStore = create<SessionState>()(
persist(