OneTHU · dev-explorer:从校园服务导航到个人校园工作空间¶
历史记录 / Historical record:本文保留当时的计划、研究或验收证据,不代表 0.11 当前能力全集。现行说明见 文档入口;英文入口见 English overview。
2026-10-12 立项。上一进程笔记:
docs/ball/PLAN.md(Ball 分支,task-1→22 已收口于 cf8dd13 + bdae9c1)。 本分支 = 交互架构革命:底栏三入口(标签页 | OH | OneGO)+ 顶栏标签条 + 侧边栏整体退役(桌面手机同一套)。
0. 用户拍板(原文要点,红线条目加粗)¶
- 左上角恒在首页按钮(点击回首页);右上角恒在设置按钮——点开是「个人设置 / 插件 / OneTHU Harness」三段合一浮层,它们不是任何标签页,高于任何标签页。
- OnePage 暂按普通收藏夹格式组织,可以有子收藏夹(OnePage 平级;在一个 OnePage 里放另一个 OnePage 的入口)→ 直接落在 favs 体系,FolderPage 即 OnePage 视图(已验证嵌套可用,零修改)。
- OH 胶囊条 = 搜索 + OH 二合一:点击/长按语音;「点击默认打开」「长按语音发送到」可设置默认值(搜索 or OH),弹出小窗内可随时切换;搜索保留最近 10 条跳转记录;小窗样子不变(能拖动、有气泡);搜不到时小窗内一键丝滑切换到 OH 对话。
- 悬浮球展开面板同样获得:默认设置、切换、普通搜索、搜索跳转记录。
- 电脑端完全删除侧边栏,与手机同一套交互("我们要革命")。
- 标签页语义 = 0.10 旧版一级子页面(信息/网络学堂)的实例化;可深链到具体栏目(信息-新闻),但 tab 主题不变,栏内可切换(信息-成绩)。
- OnePage 还没完全做好——直接移植当前页面组织模式(首页 = TodayPage 卡片系统原样 + 新增层)。
1. 架构(已落码)¶
状态机¶
state/explorer.ts:标签页/工作区/设置浮层唯一真源(模块级 store + localStorageonethu.explorer.v2)。- 首页 tab(id="home")单例恒在不可关;
openTab(入口级导航,同页可多开;dedupe供工作区恢复);navigateInTab(tab 内导航,工作上下文保留);explorerNavigate(全库 navigate() 的新实现:settings/plugins→浮层;活动 tab 是首页→开新 tab;否则 tab 内导航)。 - 工作区 = tab 快照数组(
saveWorkspace/openWorkspace/deleteWorkspace/renameWorkspace)。 - 设置浮层 store 即旧 Entry 状态机(
openSettings("settings"|"plugins"|"oh"));Layout.tsx薄重导出goEntry/useEntry/entrySnapshot/subscribeEntry保持全库调用点零改动。 - hash 由 explorer 统一写:自身写入对账消费;外部深链 = 开新标签页。
recordUse落账「最近使用」(旧 navigate 行为找回,动态 import 防模块环)。state/explorerPrefs.ts:胶囊默认动作(capsuleTap/voiceTarget)+ 最近 10 条搜索跳转记录(跨入口共享)。plugins/ohControl.ts:OH 命令总线(requestOhPanel/requestOhVoice/onOhCommand)——胶囊、悬浮球、首页搜索条都发命令,ChatDock 订阅执行。
渲染¶
components/explorer/TabHost.tsx:所有标签页常驻挂载、display 切换(keep-alive);页 tab 首次聚焦才挂载(防启动恢复的抓取风暴),挂过终身保留;页内导航 key=page 重挂保转场。components/explorer/renderPage.tsx:App.tsx 原页面开关原样抽出(含 PluginTabHost)。components/explorer/SettingsOverlay.tsx:设置浮层(手机全屏/桌面右侧推入),内嵌 SettingsPage/PluginsPage。components/explorer/HomeTab.tsx(explorer-home 交付):搜索条(唤起二合一窗)+ 继续上次恢复条 + 功能目录卡(NAV_REGISTRY 五组全量)+ TodayPage 原样。components/explorer/{TabStrip,TabDrawer,OneGoSheet,BottomBar}.tsx(explorer-ui 交付):顶栏标签条、标签抽屉、OneGO 抽屉(OnePage=收藏夹 + 工作区两段)、底栏三入口。components/{Layout,App}.tsx:重写。侧栏/抽屉/五格底栏退役;Shell = TopBar(Logo+TabStrip+搜索+齿轮)+ TabHost + BottomBar + CommandPalette + SettingsOverlay。
OH 链路(explorer-oh 交付中)¶
- OhCapsule(底栏中央,短按=按 prefs 开搜索/OH,长按=语音);ChatDock 加搜索模式(searchAll + 最近记录 + 零命中转 OH);GlobalOrb 同能力;ExplorerPrefsSection 设置分节。
2. 语义速查(新)¶
| 操作 | 行为 |
|---|---|
| 侧栏点击(已删) | — |
| 首页目录/快捷卡片/OneGO/搜索命中 | openTab:恒开新标签页(today→聚焦首页;settings/plugins→浮层) |
| 页内链接(列表→详情等) | 当前标签页内导航,tab 主题不变 |
| 底栏「标签页」 | TabDrawer:管理/排序/关闭/工作区 |
| 底栏 OneGO | OneGoSheet:OnePage(收藏夹)+ 工作区 |
| 底栏 OH / 悬浮球 | 二合一窗(搜索⇄OH 可切,prefs 决定默认) |
| 顶栏 Logo / 齿轮 | 回首页 / 设置浮层 |
3. 已知取舍(v1)¶
- 工作区恢复按 page+folderId/courseId 判同实例(params 深链恢复取近似)。
- 同页多开的各实例独立抓取(无共享缓存层)。
- 标签页休眠不冻结后台 effects(v1 靠懒挂载控制规模;冻结器后置)。
- 浮层关闭动画沿用 TabManageModal 手法;标签条拖拽排序后置(↑↓ 先顶)。
4. 验收清单(收口用)¶
- [ ] tsc 零错 +
pnpm -C apps/desktop build过 - [ ] 护栏:settings-search-coverage / search-landing / oh-routes-sync / plugin-action-style 全绿
- [ ] 手动:登录→首页;目录开三个作业 tab→各自独立;tab 内进详情→切走再回上下文保留;存工作区→关 tab→一键恢复;搜「音色」直达设置浮层行;搜不到→丝滑转 OH;重启→标签页恢复