# 后端API文档 ## 文档信息 - **文档版本**: V1.0 - **创建日期**: 2026-01-26 - **文档类型**: 后端API文档 --- ## 1. API概述 ### 1.1 基础信息 - **API前缀**: `/api` - **API文档地址**: `/docs` - **认证方式**: JWT Token (Bearer Token) - **响应格式**: JSON - **错误处理**: 统一错误响应格式 ### 1.2 响应格式 #### 成功响应 ```json { "code": 200, "message": "操作成功", "data": {...} } ``` #### 错误响应 ```json { "code": 错误码, "message": "错误信息" } ``` ### 1.3 错误码 | 错误码 | 说明 | |--------|------| | 400 | 请求参数错误 | | 401 | 未授权 | | 403 | 禁止访问 | | 404 | 资源不存在 | | 500 | 服务器内部错误 | | 1001 | 用户名或密码错误 | | 1002 | 用户不存在 | | 1003 | 用户名已存在 | | 1004 | 密码不一致 | | 2001 | 项目不存在 | | 2002 | 无权限操作 | --- ## 2. 认证API ### 2.1 登录 **接口地址**: `/api/auth/login` **请求方法**: `POST` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | username | string | body | 是 | 用户名 | | password | string | body | 是 | 密码 | **请求示例**: ```json { "username": "admin", "password": "123456" } ``` **响应示例**: ```json { "code": 200, "message": "登录成功", "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "userInfo": { "userId": "admin001", "username": "admin", "realName": "系统管理员", "department": "ADMIN", "role": "ADMIN" } } } ``` ### 2.2 退出登录 **接口地址**: `/api/auth/logout` **请求方法**: `POST` **请求参数**: 无 **响应示例**: ```json { "code": 200, "message": "退出成功" } ``` ### 2.3 获取用户信息 **接口地址**: `/api/auth/userInfo` **请求方法**: `GET` **请求参数**: 无 **响应示例**: ```json { "code": 200, "message": "查询成功", "data": { "userId": "admin001", "username": "admin", "realName": "系统管理员", "department": "ADMIN", "role": "ADMIN" } } ``` --- ## 3. 用户API ### 3.1 创建用户 **接口地址**: `/api/user` **请求方法**: `POST` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | username | string | body | 是 | 用户名 | | password | string | body | 是 | 密码 | | realName | string | body | 是 | 真实姓名 | | department | string | body | 是 | 部门 | | phone | string | body | 否 | 联系电话 | | email | string | body | 否 | 邮箱 | | role | string | body | 是 | 角色 | **请求示例**: ```json { "username": "test", "password": "123456", "realName": "测试用户", "department": "技术部", "phone": "13800138000", "email": "test@example.com", "role": "OTHER" } ``` **响应示例**: ```json { "code": 200, "message": "创建成功" } ``` ### 3.2 更新用户 **接口地址**: `/api/user/{id}` **请求方法**: `PUT` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | id | string | path | 是 | 用户ID | | realName | string | body | 否 | 真实姓名 | | department | string | body | 否 | 部门 | | phone | string | body | 否 | 联系电话 | | email | string | body | 否 | 邮箱 | | role | string | body | 否 | 角色 | **请求示例**: ```json { "realName": "测试用户1", "department": "市场部", "role": "MARKETING" } ``` **响应示例**: ```json { "code": 200, "message": "更新成功" } ``` ### 3.3 删除用户 **接口地址**: `/api/user/{id}` **请求方法**: `DELETE` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | id | string | path | 是 | 用户ID | **响应示例**: ```json { "code": 200, "message": "删除成功" } ``` ### 3.4 获取用户列表 **接口地址**: `/api/user` **请求方法**: `GET` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | page | integer | query | 否 | 页码,默认1 | | size | integer | query | 否 | 每页数量,默认10 | | username | string | query | 否 | 用户名(模糊查询) | | department | string | query | 否 | 部门 | | role | string | query | 否 | 角色 | **响应示例**: ```json { "code": 200, "message": "查询成功", "data": [ { "userId": "admin001", "username": "admin", "realName": "系统管理员", "department": "ADMIN", "role": "ADMIN", "status": 1, "createTime": "2025-01-01 00:00:00", "lastLoginTime": "2025-01-15 10:00:00" } ], "total": 1 } ``` ### 3.5 重置密码 **接口地址**: `/api/user/resetPassword/{id}` **请求方法**: `PUT` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | id | string | path | 是 | 用户ID | | password | string | body | 是 | 新密码 | **请求示例**: ```json { "password": "123456" } ``` **响应示例**: ```json { "code": 200, "message": "密码重置成功" } ``` --- ## 4. 项目API ### 4.1 创建项目 **接口地址**: `/api/project` **请求方法**: `POST` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | projectName | string | body | 是 | 项目名称 | | status | string | body | 是 | 项目状态 | | leader | string | body | 是 | 负责人 | | phone | string | body | 否 | 联系电话 | | email | string | body | 否 | 邮箱 | | background | string | body | 否 | 项目背景 | | goal | string | body | 否 | 项目目标 | | scope | string | body | 否 | 项目范围 | | startDate | string | body | 是 | 开始日期 | | plannedEndDate | string | body | 是 | 预计结束日期 | | actualEndDate | string | body | 否 | 实际结束日期 | | totalBudget | number | body | 是 | 总预算 | | usedBudget | number | body | 否 | 已使用预算 | | members | array | body | 否 | 项目成员 | | milestones | array | body | 否 | 项目里程碑 | | risks | array | body | 否 | 项目风险 | | remarks | string | body | 否 | 备注 | **请求示例**: ```json { "projectName": "测试项目", "status": "NOT_STARTED", "leader": "张三", "phone": "13800138000", "email": "zhangsan@example.com", "background": "为了提升企业运营效率", "goal": "完成企业内部管理系统的全面数字化改造", "scope": "包括人力资源、财务管理、供应链管理等模块", "startDate": "2025-01-15", "plannedEndDate": "2025-06-30", "totalBudget": 500000, "usedBudget": 0, "members": [ { "name": "张三", "role": "项目经理", "department": "市场部" }, { "name": "李四", "role": "技术负责人", "department": "技术部" } ], "milestones": [ { "name": "需求分析完成", "plannedDate": "2025-02-15", "status": "NOT_STARTED" }, { "name": "系统设计完成", "plannedDate": "2025-03-15", "status": "NOT_STARTED" } ], "risks": [ { "description": "技术难度较高,可能影响进度", "level": "HIGH", "measure": "增加技术团队人员投入" } ], "remarks": "项目需要与现有系统进行数据对接" } ``` **响应示例**: ```json { "code": 200, "message": "创建成功", "data": { "projectId": "PRJ2025001" } } ``` ### 4.2 更新项目 **接口地址**: `/api/project/{id}` **请求方法**: `PUT` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | id | string | path | 是 | 项目ID | | projectName | string | body | 否 | 项目名称 | | status | string | body | 否 | 项目状态 | | leader | string | body | 否 | 负责人 | | phone | string | body | 否 | 联系电话 | | email | string | body | 否 | 邮箱 | | background | string | body | 否 | 项目背景 | | goal | string | body | 否 | 项目目标 | | scope | string | body | 否 | 项目范围 | | startDate | string | body | 否 | 开始日期 | | plannedEndDate | string | body | 否 | 预计结束日期 | | actualEndDate | string | body | 否 | 实际结束日期 | | totalBudget | number | body | 否 | 总预算 | | usedBudget | number | body | 否 | 已使用预算 | | members | array | body | 否 | 项目成员 | | milestones | array | body | 否 | 项目里程碑 | | risks | array | body | 否 | 项目风险 | | remarks | string | body | 否 | 备注 | **请求示例**: ```json { "projectName": "测试项目1", "status": "IN_PROGRESS", "usedBudget": 100000 } ``` **响应示例**: ```json { "code": 200, "message": "更新成功" } ``` ### 4.3 删除项目 **接口地址**: `/api/project/{id}` **请求方法**: `DELETE` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | id | string | path | 是 | 项目ID | **响应示例**: ```json { "code": 200, "message": "删除成功" } ``` ### 4.4 获取项目列表 **接口地址**: `/api/project` **请求方法**: `GET` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | page | integer | query | 否 | 页码,默认1 | | size | integer | query | 否 | 每页数量,默认10 | | projectName | string | query | 否 | 项目名称(模糊查询) | | status | string | query | 否 | 项目状态 | | leader | string | query | 否 | 负责人(模糊查询) | **响应示例**: ```json { "code": 200, "message": "查询成功", "data": [ { "projectId": "PRJ2025001", "projectNo": "PRJ2025001", "projectName": "测试项目", "status": "IN_PROGRESS", "leader": "张三", "createTime": "2025-01-15 00:00:00", "updateTime": "2025-01-20 10:00:00" } ], "total": 1 } ``` ### 4.5 获取项目详情 **接口地址**: `/api/project/{id}` **请求方法**: `GET` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | id | string | path | 是 | 项目ID | **响应示例**: ```json { "code": 200, "message": "查询成功", "data": { "projectId": "PRJ2025001", "projectNo": "PRJ2025001", "projectName": "测试项目", "status": "IN_PROGRESS", "leader": "张三", "phone": "13800138000", "email": "zhangsan@example.com", "background": "为了提升企业运营效率", "goal": "完成企业内部管理系统的全面数字化改造", "scope": "包括人力资源、财务管理、供应链管理等模块", "startDate": "2025-01-15", "plannedEndDate": "2025-06-30", "actualEndDate": null, "totalBudget": 500000, "usedBudget": 100000, "remainingBudget": 400000, "members": [ { "name": "张三", "role": "项目经理", "department": "市场部" }, { "name": "李四", "role": "技术负责人", "department": "技术部" } ], "milestones": [ { "name": "需求分析完成", "plannedDate": "2025-02-15", "actualDate": null, "status": "NOT_STARTED" }, { "name": "系统设计完成", "plannedDate": "2025-03-15", "actualDate": null, "status": "NOT_STARTED" } ], "risks": [ { "description": "技术难度较高,可能影响进度", "level": "HIGH", "measure": "增加技术团队人员投入" } ], "remarks": "项目需要与现有系统进行数据对接", "creator": "marketing", "createTime": "2025-01-15 00:00:00", "lastModifier": "admin", "updateTime": "2025-01-20 10:00:00" } } ``` --- ## 5. 历史记录API ### 5.1 获取项目历史 **接口地址**: `/api/history/{projectId}` **请求方法**: `GET` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | projectId | string | path | 是 | 项目ID | | page | integer | query | 否 | 页码,默认1 | | size | integer | query | 否 | 每页数量,默认10 | | operator | string | query | 否 | 操作人(模糊查询) | | startDate | string | query | 否 | 开始日期 | | endDate | string | query | 否 | 结束日期 | **响应示例**: ```json { "code": 200, "message": "查询成功", "data": [ { "historyId": "HIS2025001", "projectId": "PRJ2025001", "projectNo": "PRJ2025001", "operationType": "UPDATE", "operator": "admin", "operationTime": "2025-01-20 10:00:00", "fieldName": "status", "oldValue": "NOT_STARTED", "newValue": "IN_PROGRESS" } ], "total": 1 } ``` --- ## 6. 统计API ### 6.1 筛选项目 **接口地址**: `/api/statistics/filter` **请求方法**: `POST` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | projectNo | string | body | 否 | 项目编号 | | projectName | string | body | 否 | 项目名称(模糊查询) | | status | string | body | 否 | 项目状态 | | leader | string | body | 否 | 负责人(模糊查询) | | creator | string | body | 否 | 创建人(模糊查询) | | createStartDate | string | body | 否 | 创建开始日期 | | createEndDate | string | body | 否 | 创建结束日期 | | updateStartDate | string | body | 否 | 更新开始日期 | | updateEndDate | string | body | 否 | 更新结束日期 | | page | integer | body | 否 | 页码,默认1 | | size | integer | body | 否 | 每页数量,默认10 | **请求示例**: ```json { "projectName": "测试", "status": "IN_PROGRESS", "createStartDate": "2025-01-01", "createEndDate": "2025-12-31" } ``` **响应示例**: ```json { "code": 200, "message": "查询成功", "data": [ { "projectId": "PRJ2025001", "projectNo": "PRJ2025001", "projectName": "测试项目", "status": "IN_PROGRESS", "leader": "张三", "createTime": "2025-01-15 00:00:00", "updateTime": "2025-01-20 10:00:00" } ], "total": 1 } ``` ### 6.2 统计项目 **接口地址**: `/api/statistics/statistics` **请求方法**: `POST` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | dimension | string | body | 是 | 统计维度:status, department, leader, month | | startDate | string | body | 否 | 开始日期 | | endDate | string | body | 否 | 结束日期 | **请求示例**: ```json { "dimension": "status", "startDate": "2025-01-01", "endDate": "2025-12-31" } ``` **响应示例**: ```json { "code": 200, "message": "统计成功", "data": { "dimension": "status", "total": 10, "details": [ { "name": "NOT_STARTED", "value": 2 }, { "name": "IN_PROGRESS", "value": 5 }, { "name": "COMPLETED", "value": 2 }, { "name": "PAUSED", "value": 1 } ] } } ``` --- ## 7. 系统API ### 7.1 获取操作日志 **接口地址**: `/api/system/log` **请求方法**: `GET` **请求参数**: | 参数名 | 类型 | 位置 | 必填 | 说明 | |--------|------|------|------|------| | page | integer | query | 否 | 页码,默认1 | | size | integer | query | 否 | 每页数量,默认10 | | username | string | query | 否 | 用户名(模糊查询) | | operation | string | query | 否 | 操作内容(模糊查询) | | startDate | string | query | 否 | 开始日期 | | endDate | string | query | 否 | 结束日期 | **响应示例**: ```json { "code": 200, "message": "查询成功", "data": [ { "logId": "LOG2025001", "username": "admin", "operation": "登录系统", "ipAddress": "127.0.0.1", "userAgent": "Mozilla/5.0...", "operationTime": "2025-01-20 10:00:00" } ], "total": 1 } ``` --- ## 8. 认证与授权 ### 8.1 认证流程 1. 客户端发送登录请求到 `/api/auth/login` 2. 服务端验证用户名和密码 3. 验证成功后生成 JWT Token 4. 客户端保存 Token 到 localStorage 5. 后续请求在请求头中携带 Token: `Authorization: Bearer ` 6. 服务端验证 Token 的有效性 7. 验证通过后处理请求 ### 8.2 授权流程 1. 服务端从 Token 中解析出用户信息 2. 根据用户角色和权限判断是否有权限访问请求的资源 3. 有权限则继续处理请求,无权限则返回 403 错误 ### 8.3 角色权限 | 角色 | 权限 | |------|------| | ADMIN | 所有权限 | | MARKETING | 创建项目、编辑项目、查看项目、查看历史记录 | | OTHER | 编辑项目、查看项目、查看历史记录 | --- ## 9. 附录 ### 9.1 数据字典 #### 项目状态 | 值 | 说明 | |----|------| | NOT_STARTED | 未开始 | | IN_PROGRESS | 进行中 | | COMPLETED | 已完成 | | PAUSED | 已暂停 | | CANCELLED | 已取消 | #### 角色 | 值 | 说明 | |----|------| | ADMIN | 管理员 | | MARKETING | 市场部 | | OTHER | 其他部门 | #### 风险等级 | 值 | 说明 | |----|------| | HIGH | 高 | | MEDIUM | 中 | | LOW | 低 | #### 操作类型 | 值 | 说明 | |----|------| | CREATE | 创建 | | UPDATE | 更新 | | DELETE | 删除 | ### 9.2 开发规范 - **API设计**: 遵循 RESTful API 设计规范 - **参数验证**: 使用 Pydantic 进行参数验证 - **错误处理**: 使用统一的错误处理机制 - **日志记录**: 记录重要操作的日志 - **测试**: 为每个 API 编写单元测试 ### 9.3 变更记录 | 版本 | 日期 | 修改人 | 修改内容 | |------|------|--------|----------| | V1.0 | 2026-01-26 | - | 初始版本创建 |