本文档描述当前已经运行的块编辑器集成方式。项目不再通过 Feature Flag 在 MDXEditor 和 BlockEditor 之间切换,也不需要额外安装编辑器框架、拖拽库或虚拟滚动库。
App
-> ResizableLayout
-> ChatPanel
-> ExportRecordList 或 EditorPanel
-> EditorWithOutline
-> BlockEditor
-> MainToolbar
-> BlockCanvas
-> BlockRenderer
-> HeadingBlock / ParagraphBlock / TableBlock / ImageBlock / TOCBlock
打开文档的流程:
uiStore 保存 previewDocumentId 和文档名称。App.tsx 根据 previewDocumentId 切换右侧面板。EditorPanel 将参数传给 EditorWithOutline。BlockEditor 调用 editorStore.loadDocument 加载 blocks。import EditorPanel from './components/EditorPanel/EditorPanel';
<EditorPanel documentId={documentId} initialDocumentName={documentName} onClose={closeEditor} />;
EditorPanelProps:
| 属性 | 类型 | 说明 |
|---|---|---|
documentId |
string |
必填,后端文档 ID |
initialDocumentName |
string \| null |
可选,优先作为工具栏标题 |
onClose |
() => void |
必填,关闭编辑器回调 |
只读场景可直接使用 BlockEditor,但当前 EditorPanel 默认使用可编辑模式。
表格结构操作必须复用 src/utils/blockOperations.ts 的视觉坐标算法。不要直接按原始 cells 数组索引插入合并单元格,否则会破坏 rowspan 和 colspan 同时存在时的布局。
npm install
npm run dev
npm run build
npm run lint
npm run format:check
生产预览使用 npm run serve:prod。开发端口为 5173,生产预览端口为 4173。
@dnd-kit 或 react-window,当前实现不依赖它们。EditorPanel 外壳,它仍由 App.tsx 动态加载。VITE_*_API_KEY 会进入浏览器构建产物,生产环境应使用后端代理。