nex_docus/IMPLEMENTATION_PLAN.md

7.7 KiB
Raw Blame History

NexDocus 功能增强实现计划

Stage 1: 路由调整和项目成员管理

Goal: 调整路由结构,实现项目卡片上的成员管理功能 Success Criteria:

  • /projects/my 路由正常工作
  • /projects/share 路由正常工作
  • 项目卡片上可以打开成员管理弹窗
  • 可以添加/删除项目成员 Tests:
  • 访问 /projects/my 显示我创建的项目
  • 访问 /projects/share 显示我参与的项目
  • 点击项目卡片的成员图标打开成员管理弹窗
  • 成功添加用户到项目
  • 成功从项目删除用户 Status: Completed

Stage 2: 个人桌面统计增强

Goal: 在个人桌面增加"参加项目数"统计 Success Criteria:

  • 个人桌面显示参加项目数
  • 统计数据准确(我创建的项目 + 我参与的项目) Tests:
  • 创建新项目后,个人项目数 +1
  • 加入协作项目后,参加项目数 +1
  • 统计卡片正确显示两个数值 Status: Completed

Stage 3: 参与项目视图和权限控制

Goal: 实现参与项目单独视图,区分所有者和成员权限 Success Criteria:

  • /projects/share 页面单独展示我参与的项目(非所有者)
  • 项目卡片根据角色显示不同操作选项
  • 成员不能删除项目(删除按钮不显示)
  • 成员可以编辑项目内文档 Tests:
  • 参与者打开 /projects/share 只看到协作项目
  • 参与者看不到删除项目按钮
  • 参与者可以正常编辑文档 Status: Completed

Stage 4: 操作日志功能

Goal: 为文档编辑操作记录日志 Success Criteria:

  • 创建者编辑文档时记录到 operation_logs 表
  • 参与者编辑文档时记录到 operation_logs 表
  • 日志包含用户ID、操作类型、资源信息 Tests:
  • 编辑文档后operation_logs 表有新记录
  • 日志包含正确的用户ID和文档路径
  • 不同用户编辑生成不同日志 Status: Completed

Stage 5: 项目编辑功能

Goal: 在我的项目卡片上增加编辑功能 Success Criteria:

  • 项目卡片显示编辑按钮(仅所有者)
  • 点击编辑弹出表单
  • 可以修改项目名称、描述、公开性 Tests:
  • 项目所有者看到编辑按钮
  • 编辑项目信息成功保存
  • 非所有者不显示编辑按钮 Status: Completed

Stage 6: 全局搜索功能

Goal: 实现全局搜索文档内容 Success Criteria:

  • 后端提供搜索API搜索文档元数据+内容)
  • 前端增加全局搜索框
  • 搜索结果显示匹配的文档列表
  • 点击结果跳转到对应文档 Tests:
  • 搜索文档标题能找到对应文档
  • 搜索文档内容能找到包含关键词的文档
  • 搜索结果高亮显示关键词
  • 点击搜索结果正确跳转 Status: Completed

Stage 7: PDF文档混合模式

Goal: 支持项目中上传PDF文件并在Markdown和浏览模式下查看PDF

7.1 后端PDF文件上传支持

Goal: 后端支持PDF文件上传并存储到_assets/files目录

实现内容:

  1. 修改/files/{project_id}/upload-file接口支持PDF格式.pdf
  2. 扩展文件类型验证,允许application/pdf
  3. PDF文件存储到_assets/files/目录
  4. 返回PDF文件的访问路径

Success Criteria:

  • 可以通过API上传PDF文件
  • PDF文件正确存储到_assets/files目录
  • 返回可访问的文件路径
  • 上传其他格式文件时报错

Tests:

  • 使用Postman上传PDF文件验证返回路径
  • 验证文件确实存储在正确目录
  • 尝试上传非法格式,验证错误提示

Status: Completed


7.2 文件树显示PDF文件

Goal: 前端文件树能够识别和显示PDF文件

实现内容:

  1. 修改StorageService.generate_tree()包含_assets/files目录中的PDF文件
  2. 前端文件树组件识别.pdf文件
  3. PDF文件显示专用图标FilePdfOutlined
  4. 文件树节点携带文件类型信息

Success Criteria:

  • 文件树中显示PDF文件节点
  • PDF文件有独特的图标
  • 点击PDF文件能触发相应事件

Tests:

  • 在项目中上传PDF后刷新文件树查看是否显示
  • 验证PDF文件图标是否正确
  • 点击PDF文件查看是否有响应

Status: Completed


7.3 Markdown编辑器支持插入PDF链接

Goal: 在MD编辑器中可以方便地插入PDF文件链接

实现内容:

  1. 编辑器工具栏添加"插入PDF"按钮
  2. 点击按钮弹出上传对话框
  3. 上传成功后自动在光标位置插入Markdown链接[文件名.pdf](/_assets/files/xxx.pdf)
  4. 支持拖拽PDF文件到编辑器可选

Success Criteria:

  • 工具栏有"插入PDF"按钮
  • 可以上传PDF并自动插入链接
  • 插入的链接格式正确
  • 编辑器预览时显示PDF链接

Tests:

  • 点击"插入PDF"按钮,上传文件
  • 验证插入的Markdown链接格式
  • 保存后重新打开,验证链接是否保留

Status: Completed


7.4 PDF文件预览功能

Goal: 浏览模式下点击PDF链接或文件树中的PDF文件时可以在线预览PDF

实现内容:

  1. 安装PDF预览库react-pdf
  2. 创建PDFViewer组件支持
    • 分页显示
    • 缩放控制(放大/缩小/适应宽度)
    • 页码跳转
    • 下载功能
  3. 在浏览模式下点击PDF链接时打开预览器
  4. 从文件树点击PDF文件时也打开预览器
  5. 后端提供PDF文件访问接口权限校验

Success Criteria:

  • 可以在浏览器中预览PDF文件
  • 支持翻页、缩放等基本操作
  • 只有有权限的用户可以查看PDF
  • PDF预览界面美观易用

Tests:

  • 在浏览模式下点击PDF链接验证能否打开
  • 测试翻页、缩放、下载功能
  • 测试权限无权限用户访问PDF时返回403
  • 测试不同大小的PDF文件加载速度

Status: Completed


7.5 搜索集成PDF文件名

Goal: 全局搜索时可以搜索到PDF文件名

实现内容:

  1. 修改/search/documents接口添加对PDF文件的搜索
  2. 搜索结果中显示PDF文件带"PDF文档"标签
  3. 点击搜索结果中的PDF文件时打开预览

Success Criteria:

  • 搜索PDF文件名能返回结果
  • 搜索结果中PDF文件有明确标识
  • 点击搜索结果可以打开PDF预览

Tests:

  • 上传名为"产品说明书.pdf"的文件
  • 搜索"说明书",验证是否出现在结果中
  • 点击搜索结果验证是否打开PDF预览

Status: Completed


Stage 8: 全文内容检索增强 (Whoosh)

Goal: 引入 Whoosh 搜索引擎,实现基于文档内容的全文检索和高亮显示。

核心方案

  • 技术: Whoosh (纯Python搜索引擎) + Jieba (中文分词)
  • 存储: 本地文件系统 storage/search_index
  • 同步: 实时文件操作钩子 + 批量重建脚本

8.1 基础设施搭建

Goal: 引入依赖并创建搜索服务 Status: Not Started Implementation:

  1. 添加 Whoosh, jieba 到 requirements.txt
  2. 创建 backend/app/services/search_service.py
    • 定义 Index Schema (project_id, path, title, content)
    • 实现 Add/Remove/Update Document 方法
    • 实现 Search 方法(支持高亮)

8.2 索引同步机制

Goal: 确保文件修改实时反映到搜索结果 Status: Not Started Implementation:

  1. 修改 backend/app/api/v1/files.py
    • save_file 后调用 index.add_document
    • operate_file (rename/move) 后更新索引
    • operate_file (delete) 后删除索引
    • import_documents 后批量添加索引
  2. 创建初始化脚本/APIPOST /api/v1/system/rebuild-index

8.3 搜索接口升级

Goal: 升级搜索API支持内容搜索 Status: Not Started Implementation:

  1. 修改 backend/app/api/v1/search.py
  2. 调用 SearchService.search
  3. 返回包含 highlight 摘要的结果结构
  4. 前端展示优化(显示匹配片段)