一个面向小规模内部使用场景的文档评审系统,支持文档上传、任务分配/认领、评审提交与日志追踪,采用前后端分离架构实现完整评审闭环。
- 前端:Vue 3、Vite、Element Plus、Axios、Pinia、Vue Router
- 后端:Spring Boot 3、Spring Security、JWT、MyBatis-Plus
- 数据与存储:MySQL、本地文件存储(Word 文档与头像)
- 其他:Maven、Hutool、Lombok、Mammoth.js(Word 在线预览)
- 前后端分离:前端负责页面交互与权限跳转,后端提供 RESTful API 与业务规则
- 权限模型:管理员(文档/用户/日志管理)与评审员(认领任务、评审文档)角色隔离
- 业务主线:文档上传 -> 任务分配/认领 -> 文档评审 -> 日志追踪与统计
- 业务边界:针对低并发、内部使用场景设计,强调流程完整性与可维护性
ReviewSystem/
├── frontend/ # 前端工程:页面、路由、状态管理、请求封装
├── backend/ # 后端工程:REST API、业务服务、权限认证、数据访问
├── file/ # 本地文件存储目录(文档与头像)
├── assets/ # README 图片
└── README.md
通用能力
- 用户注册/登录、账号设置(邮箱/用户名/密码/头像)
- 基于 JWT 的登录态维持与路由访问控制
评审员能力
- 查看已分配文档并提交评审意见
- 主动认领待分配文档,支持预览后领取
管理员能力
- 文档上传、文档信息维护、在线预览
- 多选文档与多评审员的任务分配(平均分配/负载均衡)
- 用户管理(角色修改、启用/禁用、批量创建)
日志能力
- 文档日志与用户日志查询、筛选、排序与追溯
认证与鉴权
- 后端通过
Spring Security + JwtAuthenticationFilter构建无状态认证链路,/login、/register放行,其余接口需认证 - 前端通过 Axios 请求拦截器透传 Token,响应拦截器处理登录失效;路由守卫限制未登录访问
- 密码采用 BCrypt 加密存储,JWT 包含用户标识与过期时间(1 天)
文档流转机制
- 文档状态按
UPLOADED -> ASSIGNED -> REVIEWED流转,并记录上传/分配/完成时间戳 - 评审提交时校验“文档存在 + 归属当前评审员 + 状态允许评审”,避免越权与重复处理
任务分配策略
average:按文档数对选中评审员做均匀切片balance:按评审员当前待审任务数优先分配给负载更低者
文件与校验策略
- 文档上传仅允许
docx且限制 5MB;头像仅允许jpg/jpeg/png且限制 2MB - 数据库仅保存文件名,文件内容落本地目录(
file.base-dir),避免大对象入库
一致性与可追溯
- Service 层事务控制(失败回滚),统一业务异常处理(
ServiceException + GlobalExceptionHandler) - 关键操作写入日志表,支持面向审计的检索与回溯
user:用户基础信息、角色、账号状态、密码哈希、头像文件名document:文档元数据、分配用户、状态、评审结果、流程时间字段log:操作人、操作对象、操作类型、描述、时间
约束与索引
user.email、document.title唯一约束document.assigned_to -> user.id、log.user_id -> user.id外键关联
- 认证与用户:
/login、/register、/user/info、/user/email|name|password|avatar - 文档与评审:
/document/add|all|unassigned|assigned|assign|claim|review|{id} - 管理与日志:
/user/all|reviewer|create-batch|enable|disable、/log/document、/log/user
- 环境:JDK 23、Maven、Node.js、pnpm、MySQL。
- 创建数据库(如
report),并完成表结构初始化。 - 修改
backend/src/main/resources/application.yml:数据库连接与file.base-dir。 - 启动后端:
cd backend
mvn spring-boot:run- 启动前端:
cd frontend
pnpm install
pnpm dev访问:http://localhost:5173(后端默认 http://localhost:8081)。

