133 lines
5.2 KiB
Markdown
133 lines
5.2 KiB
Markdown
# [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 = documentId`
|
|||
|
|
- `attachmentId = mindmapId`
|
|||
|
|
- `workspaceId` 统一来自页面归属工作区
|
|||
|
|
- `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 使用 `attachmentId/mindmapId`
|
|||
|
|
- OnlyOffice 使用 `assetId`
|
|||
|
|
- 页面归属:
|
|||
|
|
- 两者都以 Convex 中的 `workspace_id + document_id` 作为最终归属真相
|
|||
|
|
- 追踪字段:
|
|||
|
|
- Mindmap API 已返回 `requestId/traceId`
|
|||
|
|
- OnlyOffice 页面当前通过查询参数与调试上下文持有 `assetId/documentId/userId`,后续若接入统一 Rust adapter,继续沿用同一页面/附件口径
|
|||
|
|
|
|||
|
|
### 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` 继续作为后置实现项,而不是本阶段直接迁入主线。
|