5.2 KiB
5.2 KiB
[recycle] Mindmap 与 OnlyOffice 当前边界说明
更新时间:2026-04-14
主仓:
/mnt/Data1T/mnote
1. Mindmap 当前主链
1.1 主组件与嵌入链路
- 主组件:
/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx - BlockNote 注册入口:
/mnt/Data1T/mnote/wolai-frontend/src/components/editor/schema.ts - 独立全屏页:
/mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/page.tsx
当前事实:
MindmapBlockView同时服务文档内嵌块与独立全屏页。- 独立页通过
editorStub复用同一组件,不额外复制第二套思维导图主壳。 - 文档内嵌与独立页共用同一套工具栏、侧栏、导航器、缩略图与上下文菜单子组件。
1.2 数据入口与 ops 边界
- 本地读写入口:
/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmapLocalStore.ts - 节点操作入口:
/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmapOps.ts - 页面 API:
/mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/route.ts/mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts
当前拆分:
- 前端交互状态保留在
MindmapBlock.tsx及其子组件内。 - 本体数据读写由
mindmapLocalStore.ts提供本地文件落盘兼容接口。 - 节点增删改、引用、注释、链接等操作由
mindmapOps.ts统一描述为MindmapOp。 - 页面 API 当前通过 Convex
api.mindmaps.*承接get/put/restore/purge,保留现有前端形态不变。 - 当前 Mindmap API 已补统一元信息口径:
pageId = documentIdattachmentId = mindmapIdworkspaceId统一来自页面归属工作区requestId/traceId统一从请求头透传或在路由侧兜底生成
1.3 后续 adapter 目标
后续若进入 Rust adapter,只抽象以下边界,不复制历史仓 UI:
- 节点树结构
- 节点引用
refs - 节点操作日志
MindmapOp - mindmap 与 page/block 的绑定关系
2. OnlyOffice 当前主链
2.1 页面与 API 边界
- 页面入口:
/mnt/Data1T/mnote/wolai-frontend/src/app/onlyoffice/page.tsx/mnt/Data1T/mnote/wolai-frontend/src/app/onlyoffice/OnlyOfficeClientPage.tsx
- 页面侧面板:
/mnt/Data1T/mnote/wolai-frontend/src/components/onlyoffice/OnlyOfficeAiAgentPanel.tsx
- API 边界:
/mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/sign/route.ts/mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/proxy/route.ts/mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/callback/route.ts/mnt/Data1T/mnote/wolai-frontend/src/app/api/onlyoffice/forcesave/route.ts
当前拆分:
page.tsx负责页面级早期 DOM 补丁与容器加载。OnlyOfficeClientPage.tsx负责编辑器初始化、内部请求改写、代理地址适配与 callback URL 组装。sign负责 JWT 签名。proxy负责同源代理与回源 URL 安全限制。callback负责保存回写存储。forcesave负责触发文档服务器强制保存。
2.2 与正文和附件的关系
- Office 文件入口仍来自
MediaBlock:/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MediaBlock.tsx - 正文里只保留附件块与跳转入口,不在 BlockNote 内直接运行 OnlyOffice 编辑器。
- OnlyOffice 编辑器继续在独立
/onlyoffice页面运行。 - 当前 OnlyOffice 已稳定使用:
documentId作为页面业务标识assetId作为附件业务标识- 页面归属仍由文档/附件在 Convex 中的
workspace_id与document_id决定
2.5 与 Mindmap 对齐后的共享标识口径
- 页面标识:
- Mindmap 使用
pageId/documentId - OnlyOffice 使用
documentId
- Mindmap 使用
- 附件标识:
- Mindmap 使用
attachmentId/mindmapId - OnlyOffice 使用
assetId
- Mindmap 使用
- 页面归属:
- 两者都以 Convex 中的
workspace_id + document_id作为最终归属真相
- 两者都以 Convex 中的
- 追踪字段:
- Mindmap API 已返回
requestId/traceId - OnlyOffice 页面当前通过查询参数与调试上下文持有
assetId/documentId/userId,后续若接入统一 Rust adapter,继续沿用同一页面/附件口径
- Mindmap API 已返回
2.3 静态资源边界
- 根目录静态资源保留在
/mnt/Data1T/mnote/src/components/onlyoffice/ - 当前已确认存在:
onlyoffice-web-apps/onlyoffice-plugins/onlyoffice-data/
这些目录继续保留为运行所需静态资源、插件和数据目录,不做迁移式替换。
2.4 后续 adapter 目标
后续若进入 Rust adapter,只抽象以下边界:
- 对象解析与附件定位
- 签名生成
- callback 写回
- forcesave 触发
- 代理回源请求
3. 历史仓禁止误复制范围
以下历史仓路径只作为参考,不进入主仓主线:
/mnt/Data1T/mnote-rust/app/documents/[id]/mindmap/page.tsx/mnt/Data1T/mnote-rust/app/documents/[id]/office/page.tsx/mnt/Data1T/mnote-rust/components/sidebar/sidebar.tsx/mnt/Data1T/mnote-rust/app/page.tsx/mnt/Data1T/mnote-rust/app/onlyoffice/page.tsx
约束:
- 不复制第二套对象页壳。
- 不复制第二套 sidebar 壳。
adapter-onlyoffice、adapter-mindmap继续作为后置实现项,而不是本阶段直接迁入主线。