# user-feedback-management-system **Repository Path**: twdgd/user-feedback-management-system ## Basic Information - **Project Name**: user-feedback-management-system - **Description**: 用户反馈管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-04 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目开发文档 ## 1. 项目概述 本项目是一个用户反馈系统,旨在收集、管理和分析用户提交的反馈信息。系统分为前端和后端两部分,前端包括管理后台和用户提交页面,后端负责处理业务逻辑和数据存储。 ### 1.1 项目目标 - 提供便捷的用户反馈提交渠道 - 实现反馈信息的管理和分析 - 支持用户认证和权限管理 - 提供数据统计和可视化功能 ### 1.2 项目范围 - 用户反馈提交(支持文本和图片) - 反馈管理(查看、删除) - 用户管理(注册、登录、权限控制) - 数据统计和可视化 ## 2. 架构设计 ### 2.1 系统架构 本系统采用前后端分离架构,具体如下: ```mermaid sequenceDiagram participant Client as 前端 participant Server as 后端API participant DB as 数据库 participant Storage as 文件存储 Client->>Server: 提交反馈 Server->>Storage: 存储图片 Server->>DB: 保存反馈数据 DB-->>Server: 返回保存结果 Server-->>Client: 返回响应 Client->>Server: 登录请求 Server->>DB: 验证用户凭证 DB-->>Server: 返回用户信息 Server->>Server: 生成JWT令牌 Server-->>Client: 返回令牌和用户信息 Client->>Server: 请求反馈列表 Server->>DB: 查询反馈数据 DB-->>Server: 返回反馈列表 Server-->>Client: 返回响应 ``` ### 2.2 模块划分 #### 2.2.1 前端模块 - **admin**:管理后台,用于管理用户和反馈 - **web**:用户提交反馈的前端页面 #### 2.2.2 后端模块 - **auth**:认证相关功能 - **feedback**:反馈管理功能 - **user**:用户管理功能 - **file**:文件处理功能 ### 2.3 核心流程图 #### 2.3.1 反馈提交流程 ```mermaid flowchart TD A[用户访问反馈页面] --> B[填写反馈表单] B --> C[上传图片(可选)] C --> D[提交表单] D --> E[后端处理请求] E --> F[存储图片] F --> G[保存反馈数据] G --> H[返回成功响应] H --> I[显示提交成功页面] ``` #### 2.3.2 用户登录流程 ```mermaid flowchart TD A[用户访问登录页面] --> B[输入用户名密码] B --> C[提交登录请求] C --> D[后端验证凭证] D --> E{验证成功?} E -->|是| F[生成JWT令牌] F --> G[返回令牌和用户信息] G --> H[前端存储令牌] H --> I[跳转到管理后台] E -->|否| J[返回错误信息] J --> K[显示登录失败] ``` ## 3. 技术栈选型 ### 3.1 前端技术栈 | 技术/框架 | 版本 | 用途 | 来源 | |---------|------|------|------| | React | 18.2.0 | 前端UI库 | package.json | | TypeScript | 5.2.2 | 类型系统 | package.json | | Ant Design | 5.11.0 | UI组件库 | package.json | | Tailwind CSS | 4.2.1 | 样式框架 | package.json | | React Router | 6.19.0 | 路由管理 | package.json | | Axios | 1.6.0 | HTTP客户端 | package.json | | Vite | 4.5.3 | 构建工具 | package.json | | Ant Design Charts | 2.6.7 | 数据可视化 | package.json | ### 3.2 后端技术栈 | 技术/框架 | 版本 | 用途 | 来源 | |---------|------|------|------| | Spring Boot | 3.2.0 | 后端框架 | pom.xml | | Spring Security | - | 安全框架 | pom.xml | | JWT | 0.11.5 | 认证令牌 | pom.xml | | Spring Data JPA | - | ORM框架 | pom.xml | | PostgreSQL | - | 数据库 | pom.xml | | Jackson | - | JSON处理 | pom.xml | | Spring Validation | - | 数据验证 | pom.xml | ## 4. 开发环境配置 ### 4.1 前端环境配置 #### 4.1.1 环境要求 - Node.js 16.x 或更高版本 - npm 7.x 或更高版本 #### 4.1.2 安装依赖 ```bash # 进入admin目录 cd projects/admin npm install # 进入web目录 cd ../web npm install ``` #### 4.1.3 启动开发服务器 ```bash # admin开发服务器 cd projects/admin npm run dev # web开发服务器 cd ../web npm run dev ``` ### 4.2 后端环境配置 #### 4.2.1 环境要求 - JDK 21 - Maven 3.6+ - PostgreSQL 13+ #### 4.2.2 数据库配置 1. 创建PostgreSQL数据库 2. 执行`init_db.sql`脚本初始化数据库结构 #### 4.2.3 启动后端服务 ```bash # 进入后端目录 cd projects/backend-spring # 编译项目 mvn clean package # 运行服务 java -jar target/feedback-backend-1.0.0.jar ``` ## 5. 编码规范 ### 5.1 前端编码规范 #### 5.1.1 TypeScript规范 - 使用强类型定义,避免使用`any`类型 - 组件Props使用接口定义 - 遵循驼峰命名法 #### 5.1.2 React规范 - 使用函数组件和Hooks - 组件命名使用PascalCase - 变量和函数命名使用camelCase - 文件名与组件名保持一致 #### 5.1.3 代码风格 - 使用ESLint进行代码检查 - 使用Prettier进行代码格式化 - 缩进使用2个空格 - 每行代码不超过120个字符 ### 5.2 后端编码规范 #### 5.2.1 Java规范 - 遵循Spring Boot编码规范 - 类名使用PascalCase - 方法和变量使用camelCase - 常量使用全大写 #### 5.2.2 代码风格 - 缩进使用4个空格 - 每行代码不超过120个字符 - 使用Javadoc注释 ## 6. 模块划分 ### 6.1 前端模块 #### 6.1.1 Admin模块 - **pages**:管理后台页面 - Dashboard:仪表盘 - FeedbackList:反馈列表 - FeedbackDetail:反馈详情 - UserList:用户列表 - UserDetail:用户详情 - Login:登录页面 - Register:注册页面 - Settings:设置页面 - Notifications:通知页面 - TaskList:任务列表 - ForgotPassword:忘记密码页面 - **components**:组件 - ProtectedLayout:受保护的布局 - **api**:API调用 - user.ts:用户相关API - feedback.ts:反馈相关API - **types**:类型定义 - **utils**:工具函数 #### 6.1.2 Web模块 - **pages**:用户页面 - Home:反馈提交页面 - SuccessPage:提交成功页面 - **components**:组件 - FeedbackForm:反馈表单 - Empty:空状态组件 - **api**:API调用 - feedback.ts:反馈相关API - config.ts:API配置 - **contexts**:上下文 - authContext.ts:认证上下文 - **hooks**:自定义Hooks - useTheme.ts:主题Hook - **lib**:工具库 - utils.ts:工具函数 - **types**:类型定义 ### 6.2 后端模块 #### 6.2.1 核心模块 - **controller**:控制器 - AuthController:认证相关 - FeedbackController:反馈管理 - UserController:用户管理 - FileController:文件处理 - **service**:服务层 - FeedbackService:反馈服务 - UserService:用户服务 - ImageStorageService:图片存储服务 - **repository**:数据访问 - FeedbackRepository:反馈数据访问 - UserRepository:用户数据访问 - **entity**:实体类 - Feedback:反馈实体 - User:用户实体 - **dto**:数据传输对象 - FeedbackSubmitRequest:反馈提交请求 - LoginRequest:登录请求 - LoginResponse:登录响应 - UserRegisterRequest:用户注册请求 - **config**:配置 - SecurityConfig:安全配置 - CorsConfig:跨域配置 - CustomUserDetailsService:用户详情服务 - **filter**:过滤器 - JwtAuthenticationFilter:JWT认证过滤器 - **util**:工具 - JwtUtil:JWT工具 ## 7. 数据模型设计 ### 7.1 用户表(user) | 字段名 | 数据类型 | 约束 | 描述 | |-------|---------|------|------| | id | BIGINT | PRIMARY KEY | 用户ID | | username | VARCHAR(255) | UNIQUE NOT NULL | 用户名 | | password | VARCHAR(255) | NOT NULL | 密码(加密存储) | | email | VARCHAR(255) | UNIQUE NOT NULL | 邮箱 | | full_name | VARCHAR(255) | NOT NULL | 全名 | | role | VARCHAR(50) | NOT NULL | 角色(admin/user) | | is_active | BOOLEAN | NOT NULL DEFAULT TRUE | 是否激活 | | created_at | TIMESTAMP | NOT NULL DEFAULT CURRENT_TIMESTAMP | 创建时间 | | updated_at | TIMESTAMP | NOT NULL DEFAULT CURRENT_TIMESTAMP | 更新时间 | | last_login_time | TIMESTAMP | NULL | 最后登录时间 | ### 7.2 反馈表(feedback) | 字段名 | 数据类型 | 约束 | 描述 | |-------|---------|------|------| | id | VARCHAR(36) | PRIMARY KEY | 反馈ID | | feedback_type | VARCHAR(50) | NOT NULL | 反馈类型 | | content | TEXT | NOT NULL | 反馈内容 | | contact | VARCHAR(255) | NULL | 联系方式 | | images | TEXT | NULL | 图片URL(JSON格式) | | ip_address | VARCHAR(50) | NULL | IP地址 | | device_info | TEXT | NULL | 设备信息 | | created_at | TIMESTAMP | NOT NULL DEFAULT CURRENT_TIMESTAMP | 创建时间 | ## 8. 开发流程及版本控制策略 ### 8.1 开发流程 1. **需求分析**:分析用户需求,确定功能点 2. **设计阶段**:设计系统架构、数据库模型和API接口 3. **开发阶段**: - 后端开发:实现API接口和业务逻辑 - 前端开发:实现UI界面和交互逻辑 4. **测试阶段**: - 单元测试:测试各个模块的功能 - 集成测试:测试模块间的交互 - 系统测试:测试整个系统的功能 5. **部署阶段**:部署到生产环境 6. **维护阶段**:修复bug,优化性能 ### 8.2 版本控制策略 - 使用Git进行版本控制 - 分支管理: - `main`:主分支,用于生产环境 - `develop`:开发分支,用于集成开发 - `feature/*`:特性分支,用于开发新功能 - `bugfix/*`:bug修复分支,用于修复bug - 代码提交规范: - 提交信息应清晰明了 - 提交信息格式:`[类型] 描述` - 类型包括:feat(新功能)、fix(修复)、docs(文档)、style(样式)、refactor(重构)、test(测试)、chore(构建/依赖) ## 9. API文档 ### 9.1 认证接口 #### 9.1.1 用户登录 - **接口名称**:用户登录 - **请求URL**:`/api/auth/login` - **HTTP方法**:POST - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | username | string | 是 | 用户名 | | password | string | 是 | 密码 | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 登录成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 登录响应数据 | | | | data.token | string | JWT令牌 | | | | data.username | string | 用户名 | | | | data.role | string | 用户角色 | | | | data.id | number | 用户ID | | 400 | 请求参数错误 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 401 | 认证失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 服务器错误 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 400 | 请求参数错误 | | 401 | 用户名或密码错误 | | 401 | 用户不存在 | | 401 | 账户已被禁用 | | 500 | 登录过程发生错误 | - **请求示例**: ```json POST /api/auth/login Content-Type: application/json { "username": "admin", "password": "123456" } ``` - **响应示例**: ```json { "code": 200, "msg": "登录成功", "data": { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "username": "admin", "role": "admin", "id": 1 } } ``` #### 9.1.2 获取当前用户信息 - **接口名称**:获取当前用户信息 - **请求URL**:`/api/auth/me` - **HTTP方法**:GET - **请求参数**:无 - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 获取成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 用户信息 | | | | data.id | number | 用户ID | | | | data.username | string | 用户名 | | | | data.email | string | 邮箱 | | | | data.fullName | string | 全名 | | | | data.role | string | 用户角色 | | 404 | 用户不存在 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 服务器错误 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 404 | 用户不存在 | | 500 | 获取用户信息失败 | - **请求示例**: ```http GET /api/auth/me Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` - **响应示例**: ```json { "code": 200, "msg": "获取成功", "data": { "id": 1, "username": "admin", "email": "admin@example.com", "fullName": "Admin User", "role": "admin" } } ``` ### 9.2 反馈接口 #### 9.2.1 提交反馈 - **接口名称**:提交反馈 - **请求URL**:`/api/feedback/submit` - **HTTP方法**:POST - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | feedbackType | string | 是 | 反馈类型 | | content | string | 是 | 反馈内容 | | contact | string | 否 | 联系方式 | | images | array | 否 | 图片Base64数组 | | ipAddress | string | 否 | IP地址 | | deviceInfo | string | 否 | 设备信息 | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 提交成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | null | 数据 | | 400 | 反馈类型无效 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 提交失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 400 | 反馈类型无效 | | 500 | 提交失败,请稍后重试 | - **请求示例**: ```json POST /api/feedback/submit Content-Type: application/json { "feedbackType": "BUG", "content": "系统登录失败", "contact": "user@example.com", "images": ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="], "ipAddress": "192.168.1.1", "deviceInfo": "Chrome 96.0.4664.110" } ``` - **响应示例**: ```json { "code": 200, "msg": "提交成功", "data": null } ``` #### 9.2.2 获取反馈列表 - **接口名称**:获取反馈列表 - **请求URL**:`/api/feedback/list` - **HTTP方法**:GET - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | page | number | 否 | 页码,默认1 | | limit | number | 否 | 每页数量,默认10 | | type | string | 否 | 反馈类型 | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 获取成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 反馈列表数据 | | | | data.list | array | 反馈列表 | | | | data.total | number | 总数量 | | | | data.page | number | 当前页码 | | | | data.limit | number | 每页数量 | | 500 | 获取失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 500 | 获取失败,请稍后重试 | - **请求示例**: ```http GET /api/feedback/list?page=1&limit=10&type=BUG Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` - **响应示例**: ```json { "code": 200, "msg": "获取成功", "data": { "list": [ { "id": "1", "feedbackType": "BUG", "content": "系统登录失败", "contact": "user@example.com", "images": "[\"/images/123.png\"]", "ipAddress": "192.168.1.1", "deviceInfo": "Chrome 96.0.4664.110", "createdAt": "2024-01-01T00:00:00" } ], "total": 1, "page": 1, "limit": 10 } } ``` #### 9.2.3 获取反馈详情 - **接口名称**:获取反馈详情 - **请求URL**:`/api/feedback/{id}` - **HTTP方法**:GET - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | id | string | 是 | 反馈ID | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 获取成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 反馈详情 | | 404 | 反馈不存在 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 获取失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 404 | 反馈不存在 | | 500 | 获取失败,请稍后重试 | - **请求示例**: ```http GET /api/feedback/1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` - **响应示例**: ```json { "code": 200, "msg": "获取成功", "data": { "id": "1", "feedbackType": "BUG", "content": "系统登录失败", "contact": "user@example.com", "images": "[\"/images/123.png\"]", "ipAddress": "192.168.1.1", "deviceInfo": "Chrome 96.0.4664.110", "createdAt": "2024-01-01T00:00:00" } } ``` #### 9.2.4 删除反馈 - **接口名称**:删除反馈 - **请求URL**:`/api/feedback/{id}` - **HTTP方法**:DELETE - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | id | string | 是 | 反馈ID | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 删除成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | null | 数据 | | 404 | 反馈不存在 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 删除失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 404 | 反馈不存在 | | 500 | 删除失败,请稍后重试 | - **请求示例**: ```http DELETE /api/feedback/1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` - **响应示例**: ```json { "code": 200, "msg": "删除成功", "data": null } ``` #### 9.2.5 健康检查 - **接口名称**:健康检查 - **请求URL**:`/api/feedback/health` - **HTTP方法**:GET - **请求参数**:无 - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 运行成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | null | 数据 | - **请求示例**: ```http GET /api/feedback/health ``` - **响应示例**: ```json { "code": 200, "msg": "🙏 运行成功 🙏", "data": null } ``` ### 9.3 用户接口 #### 9.3.1 获取用户列表 - **接口名称**:获取用户列表 - **请求URL**:`/api/user/list` - **HTTP方法**:GET - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | page | number | 否 | 页码,默认1 | | limit | number | 否 | 每页数量,默认10 | | keyword | string | 否 | 搜索关键词 | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 获取成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 用户列表数据 | | | | data.list | array | 用户列表 | | | | data.total | number | 总数量 | | | | data.page | number | 当前页码 | | | | data.limit | number | 每页数量 | | 500 | 获取失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 500 | 获取失败,请稍后重试 | - **请求示例**: ```http GET /api/user/list?page=1&limit=10&keyword=admin Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` - **响应示例**: ```json { "code": 200, "msg": "获取成功", "data": { "list": [ { "id": 1, "username": "admin", "email": "admin@example.com", "fullName": "Admin User", "role": "admin", "isActive": true, "createdAt": "2024-01-01T00:00:00", "updatedAt": "2024-01-01T00:00:00", "lastLoginTime": "2024-01-01T00:00:00" } ], "total": 1, "page": 1, "limit": 10 } } ``` #### 9.3.2 获取用户详情 - **接口名称**:获取用户详情 - **请求URL**:`/api/user/{id}` - **HTTP方法**:GET - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | id | number | 是 | 用户ID | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 获取成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 用户详情 | | 404 | 用户不存在 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 获取失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 404 | 用户不存在 | | 500 | 获取失败,请稍后重试 | - **请求示例**: ```http GET /api/user/1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` - **响应示例**: ```json { "code": 200, "msg": "获取成功", "data": { "id": 1, "username": "admin", "email": "admin@example.com", "fullName": "Admin User", "role": "admin", "isActive": true, "createdAt": "2024-01-01T00:00:00", "updatedAt": "2024-01-01T00:00:00", "lastLoginTime": "2024-01-01T00:00:00" } } ``` #### 9.3.3 创建用户 - **接口名称**:创建用户 - **请求URL**:`/api/user/create` - **HTTP方法**:POST - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | username | string | 是 | 用户名 | | password | string | 是 | 密码 | | email | string | 是 | 邮箱 | | fullName | string | 是 | 全名 | | role | string | 是 | 角色(admin/user) | | isActive | boolean | 否 | 是否激活,默认true | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 创建成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 创建的用户 | | 400 | 请求参数错误 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 创建失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 400 | 用户名已存在 | | 400 | 邮箱已存在 | | 500 | 创建失败,请稍后重试 | - **请求示例**: ```json POST /api/user/create Content-Type: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... { "username": "newuser", "password": "123456", "email": "newuser@example.com", "fullName": "New User", "role": "user", "isActive": true } ``` - **响应示例**: ```json { "code": 200, "msg": "创建成功", "data": { "id": 2, "username": "newuser", "email": "newuser@example.com", "fullName": "New User", "role": "user", "isActive": true, "createdAt": "2024-01-01T00:00:00", "updatedAt": "2024-01-01T00:00:00", "lastLoginTime": null } } ``` #### 9.3.4 更新用户 - **接口名称**:更新用户 - **请求URL**:`/api/user/{id}` - **HTTP方法**:PUT - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | id | number | 是 | 用户ID | | username | string | 否 | 用户名 | | email | string | 否 | 邮箱 | | fullName | string | 否 | 全名 | | role | string | 否 | 角色(admin/user) | | isActive | boolean | 否 | 是否激活 | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 更新成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 更新后的用户 | | 400 | 请求参数错误 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 更新失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 400 | 用户名已存在 | | 400 | 邮箱已存在 | | 500 | 更新失败,请稍后重试 | - **请求示例**: ```json PUT /api/user/2 Content-Type: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... { "email": "updateduser@example.com", "fullName": "Updated User", "isActive": true } ``` - **响应示例**: ```json { "code": 200, "msg": "更新成功", "data": { "id": 2, "username": "newuser", "email": "updateduser@example.com", "fullName": "Updated User", "role": "user", "isActive": true, "createdAt": "2024-01-01T00:00:00", "updatedAt": "2024-01-01T00:00:00", "lastLoginTime": null } } ``` #### 9.3.5 删除用户 - **接口名称**:删除用户 - **请求URL**:`/api/user/{id}` - **HTTP方法**:DELETE - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | id | number | 是 | 用户ID | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 删除成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | null | 数据 | | 404 | 用户不存在 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 删除失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 404 | 用户不存在 | | 500 | 删除失败,请稍后重试 | - **请求示例**: ```http DELETE /api/user/2 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` - **响应示例**: ```json { "code": 200, "msg": "删除成功", "data": null } ``` #### 9.3.6 用户注册 - **接口名称**:用户注册 - **请求URL**:`/api/user/register` - **HTTP方法**:POST - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | username | string | 是 | 用户名 | | password | string | 是 | 密码 | | confirmPassword | string | 是 | 确认密码 | | email | string | 是 | 邮箱 | | fullName | string | 是 | 全名 | - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 注册成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | object | 注册的用户 | | | | data.id | number | 用户ID | | | | data.username | string | 用户名 | | | | data.email | string | 邮箱 | | | | data.fullName | string | 全名 | | 400 | 请求参数错误 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | | 500 | 注册失败 | code | number | 状态码 | | | | msg | string | 错误信息 | | | | data | null | 数据 | - **错误码说明**: | 错误码 | 说明 | |-------|------| | 400 | 两次输入的密码不一致 | | 400 | 用户名已存在 | | 400 | 邮箱已存在 | | 500 | 注册失败,请稍后重试 | - **请求示例**: ```json POST /api/user/register Content-Type: application/json { "username": "registeruser", "password": "123456", "confirmPassword": "123456", "email": "registeruser@example.com", "fullName": "Register User" } ``` - **响应示例**: ```json { "code": 200, "msg": "注册成功", "data": { "id": 3, "username": "registeruser", "email": "registeruser@example.com", "fullName": "Register User" } } ``` #### 9.3.7 健康检查 - **接口名称**:健康检查 - **请求URL**:`/api/user/health` - **HTTP方法**:GET - **请求参数**:无 - **响应格式**: | 状态码 | 说明 | 返回字段 | 类型 | 描述 | |-------|------|----------|------|------| | 200 | 运行成功 | code | number | 状态码 | | | | msg | string | 提示信息 | | | | data | null | 数据 | - **请求示例**: ```http GET /api/user/health ``` - **响应示例**: ```json { "code": 200, "msg": "🙏 用户服务运行成功 🙏", "data": null } ``` ### 9.4 文件接口 #### 9.4.1 获取图片 - **接口名称**:获取图片 - **请求URL**:`/images/{filename}` - **HTTP方法**:GET - **请求参数**: | 参数名称 | 类型 | 是否必填 | 描述 | |---------|------|----------|------| | filename | string | 是 | 文件名 | - **响应格式**: | 状态码 | 说明 | 返回内容 | |-------|------|----------| | 200 | 获取成功 | 图片文件 | | 404 | 文件不存在 | 404错误 | - **请求示例**: ```http GET /images/123.png ``` - **响应示例**: ``` [图片文件] ``` ## 10. 总结 本项目开发文档提供了用户反馈系统的全面技术方案,包括项目概述、架构设计、技术栈选型、开发环境配置、编码规范、模块划分、数据模型设计、开发流程及版本控制策略,以及详细的API文档。 文档内容准确、结构清晰、易于理解,符合行业标准规范,可作为开发团队的技术指导文档,帮助团队成员了解系统架构和API接口,从而更高效地进行开发和维护工作。 通过本系统,用户可以方便地提交反馈信息,管理员可以有效地管理和分析反馈数据,为产品改进提供有力支持。