Skip to content

feat(workspace): 统一文档资源树,支持 Markdown / 富文本 / 脑图 / 轻量表格同级管理 #776

Description

@cropflre

用户反馈

用户希望 Nowen Note 不再把脑图做成独立入口,而是像一个轻量知识工作区一样,把不同类型内容放在同一目录树中管理:

脑图可以和 md 文档、富文本文档同级,不用单独用一个按钮;文档目录下可以有 md、富文本、脑图、简单的 excel,集中管理。脑图可以参考幕布。

并补充产品参考:

  • Markdown 编辑体验参考 Typora;
  • 脑图交互参考幕布;
  • 小记/随手记参考浮墨笔记;
  • 表格只需要基础能力,不要求完整 Excel 函数体系;
  • 希望整体比飞书更轻、更适合个人知识管理。

合理性分析

该方向合理,而且比继续增加顶部/侧栏“独立中心”更符合个人知识库产品长期演进。

当前 release/v1.5.0 的结构是:

  • ViewModemindmaps 是独立一级模式;
  • App.tsx 把 MindMapCenter 作为独立工作区;
  • Markdown / 富文本属于 notes
  • 脑图使用独立 mindmaps 表和接口;
  • 脑图也有自己独立的文件夹体系 mindmap_folders

因此用户现在会感知为:

笔记目录是一套
脑图又是一套
文件又是一套
任务又是一套

对个人知识管理来说,内容类型越多,这种“功能中心式导航”越容易变重。

不过实现时 不建议简单把所有内容硬塞进 notes 表。更稳妥的方向是增加统一资源树 / 文档节点抽象,底层仍保留各自领域模型。


产品目标

最终用户看到的是一棵统一目录树:

我的知识库
├── 产品方案
│   ├── PRD.md                 [Markdown]
│   ├── 需求说明               [富文本]
│   ├── 产品结构               [脑图]
│   └── 功能清单               [轻量表格]
│
├── 学习
│   ├── React.md
│   ├── React 知识图谱          [脑图]
│   └── 学习进度               [轻量表格]
│
└── 随手记

不同内容类型在同一个目录中:

  • 可创建;
  • 可重命名;
  • 可拖动排序;
  • 可拖到其他文件夹;
  • 可收藏;
  • 可搜索;
  • 可移动;
  • 可复制;
  • 可删除 / 回收站;
  • 可在工作区权限模型下共享。

建议架构:统一 Resource Tree

不要把脑图 / 表格内容全部改造成 note JSON。

建议增加一层统一资源节点,例如:

type ResourceType =
  | "richtext"
  | "markdown"
  | "mindmap"
  | "sheet";

interface ResourceTreeItem {
  id: string;
  parentId: string | null;
  workspaceId: string | null;
  ownerId: string;
  resourceType: ResourceType;
  resourceId: string;
  title: string;
  sortOrder: number;
  createdAt: string;
  updatedAt: string;
}

或在现有 notebook / knowledge-tree 抽象上扩展 resource type,避免重复建设第三套树。

底层业务数据仍各自保存:

notes
  ├── markdown
  └── tiptap-json

mindmaps

sheets

统一树只负责:

  • 父子层级;
  • 排序;
  • 标题 / 图标;
  • 打开哪个 renderer;
  • 工作区归属;
  • 通用生命周期。

这样可以避免:

  • mindmap 被 notes schema 限制;
  • sheet 数据污染富文本内容;
  • 不同编辑器互相耦合;
  • 后续新增白板、数据库等类型时再次重构导航。

P0:先统一导航与目录模型

第一阶段不需要马上做 Excel。

目标:

文件夹
├── Markdown
├── 富文本
└── 脑图

要求:

  • 脑图从独立 mindmaps 一级入口降级为可选快捷入口;
  • 主知识树中可直接“新建脑图”;
  • 脑图可以和笔记同级;
  • 脑图可以拖到任意目录;
  • 从目录点击脑图直接在主编辑区打开;
  • 不再强制跳到独立 MindMapCenter;
  • 原 MindMapCenter 可以保留为“全部脑图 / 专注视图”,但不是唯一入口。

新建菜单

目录右键 / +

新建
├── 富文本
├── Markdown
├── 脑图
└── 轻量表格(后续)

移动端使用 Bottom Sheet。


P1:脑图体验向幕布“结构化”靠拢

参考幕布的是交互原则,不要求 1:1 模仿 UI。

建议优先:

  • Enter:同级主题;
  • Tab:子主题;
  • Shift+Tab:提升层级;
  • 拖拽主题调整父子关系 / 顺序;
  • 折叠 / 展开;
  • 键盘方向键移动;
  • 快速编辑主题文字;
  • 大纲 ↔ 脑图视图切换(后续);
  • 从 Markdown 标题结构生成脑图;
  • 脑图可关联原笔记,但不是必须依附笔记。

不建议优先投入自由画布、复杂形状、无限连线,把核心保持在“结构化脑图”。


P1/P2:轻量表格文档

用户明确表示不需要完整 Excel 函数体系,因此建议产品名不要直接叫“Excel”,可叫:

  • 表格文档;
  • 轻量表格;
  • Sheet。

一期能力控制在:

✓ 文本 / 数字 / 日期
✓ 行列新增删除
✓ 行列拖动排序
✓ 调整列宽 / 行高
✓ 基础文字格式
✓ 对齐
✓ 冻结首行(可选)
✓ 简单排序
✓ 简单筛选
✓ CSV/XLSX 导入导出(可选分阶段)

✗ 公式引擎
✗ 宏
✗ 数据透视表
✗ VBA
✗ 复杂图表

建议独立 sheets 数据模型,不在富文本中用 HTML table 模拟整个电子表格。

数据模型一期可以非常简单:

interface SheetDocument {
  id: string;
  rows: number;
  cols: number;
  cells: Record<string, {
    value: string | number | null;
    type?: "text" | "number" | "date";
  }>;
}

后续如需求增长再演进为稀疏矩阵 / row-column entity。


搜索与全局能力

统一资源树后,搜索不能只搜 notes。

建议统一搜索结果:

[MD] React Hooks
[富文本] 项目复盘
[脑图] AI Agent 架构
[表格] 服务器清单

脑图搜索:

  • 标题;
  • 所有主题文本。

轻量表格搜索:

  • 文档标题;
  • 单元格文本(可做二期)。

数据迁移策略

必须无损兼容现有用户数据。

现有 notes

生成对应统一 resource tree item,保持原 notebook / hierarchy 不变。

现有 mindmaps

将现有:

mindmaps.folderId
mindmap_folders

映射/迁移到统一资源树。

不要直接删除旧 folder 数据:

  1. 先双读 / migration;
  2. 校验数量和归属;
  3. 稳定后再决定是否废弃 mindmap_folders。

旧客户端

如果旧客户端仍依赖独立 MindMapCenter,应保证:

  • API 至少一段版本周期兼容;
  • 不因树迁移导致旧客户端脑图“全部消失”;
  • 必要时提供 compatibility view。

权限模型

统一树不等于统一权限绕过。

  • 个人空间 resource 仅本人;
  • 工作区沿用 workspace member / role;
  • resource move 前后重新校验目标目录权限;
  • 不允许把无权限脑图拖到有权限目录实现越权;
  • 删除文件夹要定义子资源行为;
  • share / publication 是否支持 mindmap/sheet 可分阶段实现。

UI / UX 原则

目标不是做成飞书,而是保持 Nowen Note 的轻量感。

建议:

  • 左侧只有一棵主要知识树;
  • 图标区分资源类型,不增加多套导航;
  • 点击立即打开,不先进入“资源管理页”;
  • 常用动作通过右键 / + 完成;
  • MindMap / Files / Tasks 等专属中心可作为高级视图存在,但不阻塞主路径;
  • 避免为了集成功能把顶部 toolbar 堆满。

分阶段建议

Phase 1

统一 Markdown / 富文本 / 脑图目录树。

Phase 2

完善脑图结构化编辑,减少独立中心依赖。

Phase 3

加入轻量表格资源类型。

Phase 4

统一搜索、分享、导入导出和移动端体验。

这比一次性把 Typora + 幕布 + Excel 全部重做风险更低。


验收标准(Phase 1)

  • Markdown、富文本、脑图可以存在于同一目录;
  • 目录内可直接创建脑图;
  • 脑图可拖动到其他目录;
  • 脑图可和普通笔记手动排序;
  • 点击目录中的脑图直接在主内容区打开;
  • 不必须进入独立“脑图”按钮才能找到脑图;
  • 原 MindMapCenter 仍可作为聚合视图使用;
  • 现有 notes 数据无损;
  • 现有 mindmaps / mindmap_folders 无损迁移;
  • 个人空间 / 工作区数据隔离正确;
  • 回收站 / 删除行为定义清晰;
  • 搜索至少可按脑图标题找到资源;
  • Web / Electron / Android / iOS 树结构一致;
  • 大目录性能不明显下降;
  • 补 migration、tree ordering、跨类型 drag/drop、权限测试。

验收标准(轻量表格阶段)

  • 可在目录中新建“轻量表格”;
  • 支持基础单元格编辑;
  • 支持增删行列;
  • 支持列宽 / 行高调整;
  • 支持基础排序;
  • 不实现完整公式引擎也能满足清单类笔记;
  • 表格数据不依赖 HTML 富文本存储;
  • 可正常备份 / 恢复;
  • 后续可以扩展 CSV / XLSX import/export。

当前相关代码

  • frontend/src/types/index.ts(当前 ViewMode 将 mindmaps 作为独立一级模式)
  • frontend/src/App.tsx
  • frontend/src/components/NavRail.tsx
  • frontend/src/components/Sidebar.tsx
  • frontend/src/components/MindMapEditor.tsx
  • frontend/src/components/EditorPane.tsx
  • backend/src/routes/mindmaps.ts
  • backend/src/routes/mindmap-folders.ts
  • notes / notebooks / knowledge-tree 相关模型与 repository

优先级:P2 / Epic(产品架构演进,不建议和当前 P0 Bug 混在一次提交中)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions