继续进行法律文书智能摘要系统的开发
概述
本次开发围绕"文档创作"功能展开,系统从原先仅支持分析输出,扩展至支持用户输入与创作管理。整个项目分为两个主要阶段:第一阶段完成了文档管理的基础架构,包括数据库表设计(文档、文件夹、版本、权限、分享、操作日志)、CRUD API开发、文件夹层级管理、前端控制台与TipTap富文本编辑器的集成,实现了文档的增删改查、软删除、批量操作、视图切换和自动保存等核心能力。第二阶段引入了模板管理与版本历史功能,新增模板表、变量表和标签表,预置了法律意见书、合同等系统模板,支持模板渲染、复制和使用统计;同时实现了基于内容哈希的版本快照、版本对比、还原与清理功能,并在编辑器中集成版本历史面板,提升了文档创作的规范性与可回溯性。
此外,系统还增加了不同用户间的文档"@"功能,通过通知表、WebSocket实时推送和前端通知铃铛组件,实现了批注中的提及与回复的即时提醒。针对文书管理界面,优化了整体交互逻辑,修复了批注删除、回收站显示、搜索功能失效等问题,新增了文档对照查看模式(支持Word、PDF、TXT,两栏同步、全屏批注),并优化了文件目录的点击跳转、悬停展开及高亮样式。整个系统从后端存储、API层到前端状态管理和界面组件,形成了完整的文档创作与管理闭环。
文档创作功能
阶段1
问题:之前系统只能分析输出,不能输入创作
1. 数据库表结构设计与迁移 (后端)
新增表结构(在 connection.py 的 _migrate_document_management() 中):
- documents_new - 文档主表(支持笔记和文本文档,内容存储为TipTap JSON格式)
- folders - 文件夹表(支持嵌套层级结构)
- document_versions - 文档版本表(版本控制和历史回溯)
- document_permissions - 文档权限表(owner/edit/comment/view)
- document_shares - 文档分享表(用户分享和链接分享)
- document_activity_logs - 文档操作日志表
索引优化:为所有常用查询字段创建了索引,包括 created_by, updated_at, folder_id, doc_type 等
2. 文档CRUD API开发 (后端)
新建文件:backend/app/api/docs_mgmt.py
- POST /api/docs-mgmt/documents - 创建文档
- GET /api/docs-mgmt/documents/{doc_id} - 获取文档详情
- PUT /api/docs-mgmt/documents/{doc_id} - 更新文档
- DELETE /api/docs-mgmt/documents/{doc_id} - 删除文档(支持软删除)
- POST /api/docs-mgmt/documents/{doc_id}/restore - 恢复文档
- GET /api/docs-mgmt/documents - 文档列表(分页、筛选、排序)
- GET /api/docs-mgmt/documents/recent - 最近打开文档
- POST /api/docs-mgmt/documents/batch_delete - 批量删除
- POST /api/docs-mgmt/documents/batch_move - 批量移动
- GET /api/docs-mgmt/documents/stats - 文档统计
数据库操作层:backend/app/db/docs_mgmt.py
- 完整的文档增删改查功能
- 权限控制(所有者检查)
- 操作日志记录
- 字数统计(自动计算中文字符+英文单词)
3. 文件夹管理功能 (后端)
新建文件:backend/app/api/folders.py
- POST /api/folders/ - 创建文件夹
- GET /api/folders/{folder_id} - 获取文件夹详情
- GET /api/folders/tree - 获取文件夹树
- GET /api/folders/root - 获取根文件夹
- PUT /api/folders/{folder_id} - 更新文件夹
- DELETE /api/folders/{folder_id} - 删除文件夹
- POST /api/folders/{folder_id}/move - 移动文件夹
- GET /api/folders/{folder_id}/documents - 获取文件夹内文档
数据库操作层:backend/app/db/folder_mgmt.py
- 文件夹层级结构管理(递归查询)
- 循环引用检测(防止)
- 级联删除支持
- 默认根文件夹创建
4. 前端API层
新建文件:frontend/src/api/docs-mgmt.ts
- 完整的文档和文件夹API调用函数
- TypeScript类型定义
- 自动获取当前用户身份
5. 前端Pinia Store
新建文件:frontend/src/stores/docsMgmt.ts
- 文档状态管理(列表、当前文档、选中状态)
- 文件夹树状态管理
- 视图模式切换(网格/列表)
- 分页和筛选状态管理
- 批量操作支持
6. 文档管理控制台页面
新建文件:frontend/src/views/DocsMgmtConsole.vue
- 左侧侧边栏(导航 + 文件夹树)
- 顶部工具栏(搜索、筛选、视图切换、新建菜单)
- 新建菜单(空白笔记、文本文档、新建文件夹)
- 网格视图(文档卡片,悬停显示操作)
- 列表视图(表格形式,支持列头排序)
- 批量操作栏(批量删除、批量移动)
- 分页控件
7. TipTap编辑器页面
新建文件:frontend/src/views/DocumentEditor.vue
- TipTap富文本编辑器集成(StarterKit + Underline + Highlight + Placeholder)
- 自动保存(30秒定时 + 2秒防抖)
- 手动保存(Ctrl+S / 按钮)
- 保存状态显示(已保存/保存中/未保存)
- 编辑工具栏(加粗、斜体、下划线、标题、列表、撤销/重做)
- 编辑/只读模式切换
- 文档标题编辑
- 字数统计
- 版本信息显示
8. 路由配置
更新文件:frontend/src/main.ts
- 添加文档管理系统路由:
- /docs - 文档管理控制台
- /docs/editor/:id - 文档编辑器
- /docs/recent - 最近打开
- /docs/starred - 星标文档
- /docs/trash - 回收站
阶段2
- 模板管理数据库表结构 (后端)
新增表结构 :
-
document_templates - 模板主表(支持系统模板和用户自定义模板)
-
template_variables - 模板变量表(支持text/number/date/select四种变量类型)
-
template_tags - 模板标签表
预置系统模板 :
-
📝 空白笔记
-
📄 空白文档
-
📜 法律意见书(含案件名称、委托人、出具日期变量)
-
合同模板(含甲方、乙方、合同金额、签署日期变量)
- 模板管理 API (后端)
新建文件 : backend/app/api/templates.py
接口 方法 功能 /api/templates/ POST 创建模板 /api/templates/ GET 模板列表(分页/筛选/搜索) /api/templates/{id} GET 获取模板详情 /api/templates/{id} PUT 更新模板 /api/templates/{id} DELETE 删除模板 /api/templates/{id}/render POST 渲染模板(变量替换) /api/templates/{id}/duplicate POST 复制模板 /api/templates/categories GET 获取分类列表 /api/templates/types GET 获取类型列表
数据库操作层 : backend/app/db/template_mgmt.py
-
模板增删改查
-
模板变量管理
-
模板标签管理
-
模板渲染( {{变量名}} 占位符替换)
-
模板复制功能
-
使用次数统计
- 文档版本历史 API (后端)
新建文件 : backend/app/api/versions.py
接口 方法 功能 /api/docs-mgmt/documents/{id}/versions/ POST 创建版本快照 /api/docs-mgmt/documents/{id}/versions/ GET 获取版本列表 /api/docs-mgmt/documents/{id}/versions/latest GET 获取最新版本 /api/docs-mgmt/documents/{id}/versions/{num} GET 获取指定版本详情 /api/docs-mgmt/documents/{id}/versions/restore POST 还原到指定版本 /api/docs-mgmt/documents/{id}/versions/compare POST 对比两个版本 /api/docs-mgmt/documents/{id}/versions/before/{ver} DELETE 清理历史版本 /api/docs-mgmt/documents/{id}/versions/count GET 获取版本数量 /api/docs-mgmt/documents/{id}/versions/major GET 获取主要版本列表
数据库操作层 : backend/app/db/version_mgmt.py
-
版本快照创建(基于内容哈希去重)
-
版本列表查询(分页)
-
版本还原(创建新版本记录还原操作)
-
版本对比(行级差异对比)
-
历史版本清理
-
主要版本标记
- 前端 API 层
新建文件 :
-
frontend/src/api/templates.ts - 模板API调用函数
-
frontend/src/api/versions.ts - 版本API调用函数
- 前端模板中心页面
新建文件 : frontend/src/views/TemplateCenter.vue
功能特性:
-
模板卡片式展示
-
搜索模板(按名称/描述)
-
按类型和分类筛选
-
新建模板(支持设置变量和标签)
-
使用模板创建文档(自动填充变量表单)
-
复制模板
-
删除自定义模板
- 前端版本历史面板
新建文件 : frontend/src/components/VersionHistoryPanel.vue
功能特性:
-
版本时间线列表
-
当前版本高亮
-
主要版本标记
-
版本选择器(A/B选择用于对比)
-
版本还原功能
-
版本对比(显示新增/删除行数和具体行内容)
-
历史版本清理
-
分页支持
- 编辑器页面集成版本历史
更新文件 : frontend/src/views/DocumentEditor.vue
新增功能:
-
底部"版本历史"按钮
-
右侧滑出版本历史面板
-
版本还原后自动更新编辑器内容
-
版本还原后更新当前版本号
- 路由配置
更新文件 : frontend/src/main.ts
新增路由:
- /docs/templates - 模板中心
更新文件 : frontend/src/views/DocsMgmtConsole.vue
侧边栏新增"模板中心"导航项

优化
1.新建空白笔记和空白文档效果一样,或者直接合并
2.新建文件的时间不正确
3.建立的文件夹无法删除
4.几个文件夹置顶功能
5.新建文件自动编号,防止混乱

6.星标文件没有加星标的地方(星标的符号用文书管理界面中的星标的样式)
7.模板的内容暂时是空白的,而且无法预览(鼠标放在上面就可以预览到文件的内容格式)
8.文档创作最近打开页面不起作用
9.目前的文件无法移动到文件夹,放大版的文件页面应该也能移动;移动的时候,形成文件夹的下拉选项列表
10.对于文件的操作,打开和编辑是一种,重复了

不同用户间文档的@功能
新增文件(6 个)
| 文件 | 说明 |
|---|---|
| backend/app/db/notifications_db.py | 通知数据访问层(CRUD + 未读计数) |
| backend/app/api/notifications.py | 通知 REST API(查询/已读/全部已读) |
| backend/app/services/ws_notify.py | WebSocket 实时推送管理器 |
| frontend/src/api/notifications.ts | 前端通知 API 客户端 |
| frontend/src/composables/useWebSocket.ts | WebSocket 连接/心跳/重连组合函数 |
| frontend/src/components/NotificationBell.vue | 通知铃铛 + 下拉面板 UI 组件 |
修改文件(3 个)
| 文件 | 改动 |
|---|---|
| backend/app/db/connection.py | 新增 notifications 表 + 2 个索引 |
| backend/app/db/annotations.py | save_annotation_db() 和 add_reply_to_annotation() 中,@提及 / 回复时自动写入通知 + 实时推送 |
| backend/app/main.py | 注册通知 API 路由 + WebSocket 端点 /ws/notify |
| frontend/src/App.vue | 导航栏集成通知铃铛,WebSocket 连接后自动刷新通知 |
功能流程
用户A在文档中@用户B 或 回复用户B的批注
→ annotations.py 写入
notifications 表
→ WS 实时推送 → 用户B浏览器收到通知
→ 导航栏铃铛显示红点 + 未读数
→ 点击通知 → 跳转到对应文档
→ 标记已读
文书管理界面优化
1.优化文书管理界面的总体逻辑,有些冗余,优化用户使用的逻辑
2.文书管理的文书详情页面,批注(已解决和未解决)都无法删除(lxj)
3.对比查看
文书可以原文和文字对比查看,两栏同步,可以放大到全屏,右侧是批注。
这里加入对照查看按钮,点击后进入全屏,原文word、pdf、txt都满足

4.问题修复
修复frontend/src/views/DocsMgmtConsole.vue这个文件的问题
确认已经解决
5.修复搜索功能
每个页面右上角的搜索,要求能够搜索文书管理和文档创作中的文件,目前搜索能力失效

6.回收站修复
文档创作界面,回收站没有正常显示;而且点击其他功能后无法回到"全部文档"
7.文件目录优化
加入点击跳转的功能;加入鼠标放在上面然后自动展开的功能;最开始的工作台不要自动展开
点击具体的项目后,要跳转到具体的位置,比如点击法智助手下的文档检索,要直接跳转到相应界面的文档检索选项。并且此时左侧目录中,法智助手下的"文档检索"要单独颜色变深(目前的颜色变化并不好看,需要美化)
小结
通过两阶段迭代,系统已具备完整的文档创作管理能力:用户可创建笔记或文本文档(TipTap JSON格式),组织到多级文件夹中,利用系统模板快速生成结构化文档,并通过版本历史回溯任意修改记录。权限控制(所有者/编辑/评论/查看)、操作日志、字数统计和自动保存等细节保证了数据安全与用户体验。前端采用网格/列表双视图、批量操作栏、分页控件及实时搜索筛选,文件夹树支持递归查询和循环引用检测。技术实现上,后端使用FastAPI + SQLite(带迁移机制),前端基于Vue 3 + Pinia + TipTap,WebSocket确保通知实时性,整体架构清晰且可扩展。
| 优化项 | 问题描述 | 解决方案 | 状态 |
|---|---|---|---|
| 笔记与文档合并 | 空白笔记和空白文档效果重复 | 统一为"新建文档",减少冗余 | ✅ 已解决 |
| 新建文件时间 | 创建时间显示不正确 | 修复时间戳生成逻辑 | ✅ 已解决 |
| 文件夹删除 | 无法删除文件夹 | 增加级联删除选项和循环引用检测 | ✅ 已解决 |
| 文件夹置顶 | 缺少置顶功能 | 在文件夹树中加入置顶标记与排序 | ✅ 已解决 |
| 自动编号 | 新建文件名称重复混乱 | 实现"新建文档X"自动递增编号 | ✅ 已解决 |
| 星标文件 | 无加星标入口(样式未复用) | 在文档卡片/列表行集成星标按钮,复用设计样式 | ✅ 已解决 |
| 模板预览 | 模板内容空白且无法预览 | 增加鼠标悬停卡片预览(展示TipTap纯文本摘要) | ✅ 已解决 |
| 最近打开 | 路由下的最近打开页面无效 | 修复前端路由与store中最近打开文档的记录逻辑 | ✅ 已解决 |
| 文件移动 | 无法移动文件到文件夹;放大页面也无移动功能 | 在文档详情页和列表批量操作中增加文件夹下拉树选择器 | ✅ 已解决 |
| 打开与编辑重复 | 操作菜单中"打开"和"编辑"功能重叠 | 合并为"打开编辑",单击卡片即进入编辑模式 | ✅ 已解决 |
| 批注删除 | 文书详情页中已解决/未解决批注无法删除 | 增加批注删除API和前端确认弹窗,仅允许本人或管理员删除 | ✅ 已解决 |
| 对照查看 | 缺乏原文与批注对照模式 | 新增"对照查看"按钮,全屏两栏显示(左侧原文,右侧批注),支持同步滚动 | ✅ 已解决 |
| 全局搜索 | 页面右上角搜索无法搜到文档创作中的文件 | 重构搜索接口,统一检索文档、模板及文书内容 | ✅ 已解决 |
| 回收站 | 回收站显示异常且无法返回"全部文档" | 修复回收站列表视图,增加面包屑导航返回根目录 | ✅ 已解决 |
| 目录跳转与高亮 | 左侧目录点击后无跳转,高亮样式不佳 | 实现点击目录项自动跳转对应路由(如"文档检索"),并优化选中态背景色与圆角样式 | ✅ 已解决 |
