feat(database): 实现数据库功能并优化数据导出
- 新增数据库相关 API 和服务 - 实现数据导出功能,支持导出到 JSON 文件 - 优化数据导入流程,增加数据校验 - 新增数据库页面,展示解析数据和统计信息 - 更新捕获页面,支持导入数据到数据库
This commit is contained in:
95
README.md
95
README.md
@@ -7,7 +7,11 @@
|
||||
- 🎯 **TCP包抓取** - 实时抓取游戏客户端的TCP通信数据
|
||||
- 🔍 **数据解析** - 自动解析十六进制数据为可读的装备信息
|
||||
- 📊 **数据可视化** - 现代化的React界面展示装备数据
|
||||
- 💾 **数据导出** - 支持导出为JSON格式
|
||||
- 💾 **数据持久化** - 基于SQLite的本地数据存储,支持装备数据的增删改查
|
||||
- 📤 **数据导出** - 支持导出为JSON格式
|
||||
- 🔍 **数据搜索** - 支持装备数据的模糊搜索和筛选
|
||||
- 📈 **数据统计** - 提供装备数据的统计分析功能
|
||||
- ⚙️ **设置管理** - 应用设置的本地持久化存储
|
||||
- 🚀 **高性能** - 基于Go语言的高性能网络处理
|
||||
|
||||
## 技术栈
|
||||
@@ -17,6 +21,7 @@
|
||||
- **Wails v2** - 桌面应用框架
|
||||
- **gopacket** - 网络包抓取
|
||||
- **zap** - 结构化日志
|
||||
- **SQLite** - 本地数据存储
|
||||
|
||||
### 前端
|
||||
- **React 18** - 用户界面框架
|
||||
@@ -109,6 +114,56 @@ equipment-analyzer/
|
||||
|
||||
## 开发指南
|
||||
|
||||
### 常见问题解决
|
||||
|
||||
#### 1. React严格模式导致的重复调用
|
||||
在开发模式下,React严格模式会导致组件渲染两次,这可能导致:
|
||||
- useEffect被重复执行
|
||||
- 异步操作被重复调用
|
||||
- 用户提示消息重复显示
|
||||
|
||||
**解决方案:**
|
||||
- **全局消息去重配置**:在`frontend/src/utils/messageConfig.ts`中配置Antd message的全局设置
|
||||
- **防重复机制**:使用缓存机制防止2秒内相同消息重复显示
|
||||
- **最大显示数量限制**:设置`maxCount: 1`确保同时只显示一个消息
|
||||
|
||||
**全局配置:**
|
||||
```typescript
|
||||
// frontend/src/utils/messageConfig.ts
|
||||
import { message } from 'antd';
|
||||
|
||||
// 配置全局消息设置,防止重复显示
|
||||
message.config({
|
||||
maxCount: 1, // 最多同时显示1个消息
|
||||
duration: 3, // 消息显示3秒
|
||||
top: 24, // 距离顶部24px
|
||||
});
|
||||
|
||||
// 防重复消息函数
|
||||
const messageCache = new Map<string, number>();
|
||||
const DEBOUNCE_TIME = 2000; // 2秒内相同消息不重复显示
|
||||
|
||||
export const showMessage = (type: 'success' | 'error' | 'warning' | 'info', content: string) => {
|
||||
const messageId = `${type}:${content}`;
|
||||
const now = Date.now();
|
||||
|
||||
// 检查是否在防抖时间内
|
||||
const lastTime = messageCache.get(messageId);
|
||||
if (lastTime && now - lastTime < DEBOUNCE_TIME) {
|
||||
return; // 跳过重复消息
|
||||
}
|
||||
|
||||
// 更新缓存并显示消息
|
||||
messageCache.set(messageId, now);
|
||||
message[type](content);
|
||||
};
|
||||
```
|
||||
|
||||
**使用方法:**
|
||||
- 在`main.tsx`中导入配置:`import './utils/messageConfig'`
|
||||
- 在组件中正常使用`message.success()`、`message.error()`等
|
||||
- 全局配置会自动防止重复消息显示
|
||||
|
||||
### 添加新功能
|
||||
|
||||
1. **后端功能**
|
||||
@@ -121,6 +176,23 @@ equipment-analyzer/
|
||||
- 使用TypeScript确保类型安全
|
||||
- 遵循Ant Design设计规范
|
||||
|
||||
### 数据库操作
|
||||
|
||||
1. **添加新的数据表**
|
||||
- 在`internal/model/database.go`的`initTables()`方法中添加表结构
|
||||
- 在`Database`结构体中添加相应的CRUD方法
|
||||
- 在`DatabaseService`中添加业务逻辑方法
|
||||
- 在`App`中添加API接口方法
|
||||
|
||||
2. **数据迁移**
|
||||
- 数据库结构变更时,在`initTables()`方法中处理版本升级
|
||||
- 使用事务确保数据一致性
|
||||
|
||||
3. **性能优化**
|
||||
- 为常用查询字段添加索引
|
||||
- 使用批量操作减少数据库交互
|
||||
- 合理使用连接池和事务
|
||||
|
||||
### 测试
|
||||
|
||||
```bash
|
||||
@@ -147,8 +219,27 @@ make release
|
||||
make clean
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
## 数据存储
|
||||
|
||||
### 数据库存储
|
||||
应用使用SQLite数据库进行本地数据持久化,数据库文件位置:`~/.equipment-analyzer/equipment_analyzer.db`
|
||||
|
||||
#### 数据库表结构
|
||||
- **equipment** - 装备基本信息表
|
||||
- **equipment_operations** - 装备操作属性表
|
||||
- **capture_sessions** - 抓包会话记录表
|
||||
- **raw_packet_data** - 原始数据包表
|
||||
- **app_settings** - 应用设置表
|
||||
|
||||
#### 数据库功能
|
||||
- ✅ 装备数据的增删改查
|
||||
- ✅ 批量数据导入导出
|
||||
- ✅ 装备数据搜索和筛选
|
||||
- ✅ 数据统计分析
|
||||
- ✅ 应用设置持久化
|
||||
- ✅ 抓包会话历史记录
|
||||
|
||||
### 配置文件
|
||||
应用会在用户目录下创建配置文件:`~/.equipment-analyzer/config.json`
|
||||
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user