# UI优化更新说明 (2025-01-22) ## ✅ 已完成的三项优化 ### 1. 删除首页"最近12小时无异常"文案 **修改文件**: `pages/index/index.vue` **修改内容**: - 删除了"最近 {{noAlarmHours}} 小时无异常"这行文案 - 保留了"厨房当前处于安全监测状态"主文案 - 界面更简洁清爽 **修改前**: ```vue 🟢 厨房当前处于安全监测状态 最近 {{noAlarmHours}} 小时无异常 ``` **修改后**: ```vue 🟢 厨房当前处于安全监测状态 ``` --- ### 2. 修改设置页面"Developer Options"为"Advanced setting" **修改文件**: `utils/simpleI18n.js` **修改内容**: - 中文: "开发者选项" → "高级设置" - 英文: "Developer Options" → "Advanced setting" **修改位置**: ```javascript // 中文翻译 developerOptions: '高级设置', // 英文翻译 developerOptions: 'Advanced setting', ``` **影响页面**: - `pages/kitchen/settings.vue` - 设置页面标题和卡片标题 --- ### 3. 报警历史添加解除状态信息 ⭐ **修改文件**: `pages/kitchen/history.vue` **新增功能**: 在报警历史卡片中添加解除状态显示,包括: - ✅ 是否已解除(自动/用户处理) - ⏰ 解除时间 - 🎨 绿色背景样式 #### 3.1 UI显示效果 **示例**: ``` 无人值守风险 热源持续升温,厨房无人5分钟 热点区域: 厨房区域 ✅ 已于 21:38 自动解除 ``` #### 3.2 数据结构扩展 在报警对象中新增三个字段: ```javascript { id: "alarm_001", title: "无人值守风险", desc: "热源持续升温,厨房无人5分钟", temp: 45.2, time: "21:30", location: "厨房区域", // 新增字段 resolved: true, // 是否已解除 resolvedTime: "21:38", // 解除时间 (HH:MM) resolvedType: "auto" // 解除类型: "auto"(自动) 或 "manual"(用户处理) } ``` #### 3.3 数据源兼容性 支持多种数据源字段格式: **解除状态判断**: - `alarm.resolved` (布尔值) - `alarm.resolvedAt` (时间戳) - `alarm.resolved_at` (时间戳) **解除时间解析**: - `alarm.resolvedAt` (优先) - `alarm.resolved_at` - `alarm.resolvedTimestamp` **解除类型判断**: - `alarm.resolvedType` / `alarm.resolved_type` (直接使用) - `alarm.resolvedBy` / `alarm.resolved_by` (system → auto, 其他 → manual) #### 3.4 样式设计 ```css .alarm-resolved { margin-top: 12rpx; padding: 8rpx 12rpx; background: rgba(39, 174, 96, 0.1); /* 绿色半透明背景 */ border-radius: 6rpx; display: flex; align-items: center; gap: 8rpx; } .resolved-icon { font-size: 24rpx; /* ✅ 图标 */ } .resolved-text { font-size: 22rpx; color: #27AE60; /* 绿色文字 */ font-weight: 500; } ``` --- ## 📊 数据流程说明 ### ESP32端需要提供的数据 如果ESP32端要支持解除状态显示,需要在报警历史API中返回以下字段: ```json { "alarms": [ { "id": 1, "title": "无人值守风险", "desc": "热源持续升温,厨房无人5分钟", "temp": 45.2, "timestamp": 1737548400000, "location": "厨房区域", // 新增字段(可选) "resolved": true, "resolvedAt": 1737548880000, // 解除时间戳(毫秒) "resolvedType": "auto", // "auto" 或 "manual" "resolvedBy": "system" // 或者用这个字段,system会被转为auto } ] } ``` ### 云端API需要提供的数据 云端报警查询接口也应该返回类似字段: ```json { "code": 200, "data": [ { "id": "alarm_001", "title": "无人值守风险", "message": "热源持续升温,厨房无人5分钟", "temp": 45.2, "occurredAt": "2025-01-22T21:30:00Z", "alarmType": "UNATTENDED", "level": "warning", "isRead": false, // 新增字段(可选) "resolved": true, "resolvedAt": "2025-01-22T21:38:00Z", "resolvedType": "auto", "resolvedBy": "system" } ] } ``` --- ## 🎨 UI效果预览 ### 首页优化 **优化前**: ``` 🟢 厨房当前处于安全监测状态 最近 12 小时无异常 ``` **优化后**: ``` 🟢 厨房当前处于安全监测状态 ``` ### 设置页面优化 **优化前**: ``` 🐛 开发者选项 Developer Options ``` **优化后**: ``` 🐛 高级设置 Advanced setting ``` ### 报警历史优化 **未解除的报警**: ``` ┌─────────────────────────────┐ │ 🔥 高温危险 45.2°C │ │ 21:30 │ │ │ │ 热源持续升温,温度超过阈值 │ │ 热点区域: 厨房区域 │ │ │ │ [标记已读] [删除] │ └─────────────────────────────┘ ``` **已解除的报警**: ``` ┌─────────────────────────────┐ │ 👤 无人值守风险 45.2°C │ │ 21:30 │ │ │ │ 热源持续升温,厨房无人5分钟 │ │ 热点区域: 厨房区域 │ │ ┌─────────────────────────┐ │ │ │ ✅ 已于 21:38 自动解除 │ │ │ └─────────────────────────┘ │ │ │ │ [标记已读] [删除] │ └─────────────────────────────┘ ``` --- ## 🔧 后续扩展建议 ### 1. ESP32端实现建议 在ESP32的报警管理模块中添加解除逻辑: ```cpp // AlarmManager.cpp struct AlarmRecord { int id; String title; String desc; float temp; unsigned long timestamp; String location; // 新增字段 bool resolved; unsigned long resolvedAt; String resolvedType; // "auto" or "manual" }; // 自动解除逻辑(温度恢复正常) void checkAndAutoResolveAlarms() { for (auto& alarm : alarmHistory) { if (!alarm.resolved && currentTemp < SAFE_TEMP) { alarm.resolved = true; alarm.resolvedAt = millis(); alarm.resolvedType = "auto"; } } } // 用户手动解除 void manualResolveAlarm(int alarmId) { for (auto& alarm : alarmHistory) { if (alarm.id == alarmId) { alarm.resolved = true; alarm.resolvedAt = millis(); alarm.resolvedType = "manual"; break; } } } ``` ### 2. 云端API扩展建议 在云端报警记录表中添加字段: ```sql ALTER TABLE alarm_records ADD COLUMN resolved BOOLEAN DEFAULT FALSE, ADD COLUMN resolved_at TIMESTAMP NULL, ADD COLUMN resolved_type VARCHAR(20) NULL, ADD COLUMN resolved_by VARCHAR(50) NULL; ``` ### 3. 更多解除类型 可以扩展更多解除类型: ```javascript const resolvedTypes = { 'auto': '自动解除', // 温度恢复正常 'manual': '用户处理', // 用户手动标记 'timeout': '超时解除', // 报警超时自动解除 'system': '系统解除', // 系统检测到安全 'confirmed': '已确认处理' // 用户确认已处理 } ``` --- ## 📝 测试建议 ### 1. 首页测试 - ✅ 检查无报警时只显示"厨房当前处于安全监测状态" - ✅ 确认不再显示"最近XX小时无异常" ### 2. 设置页面测试 - ✅ 中文环境下显示"高级设置" - ✅ 英文环境下显示"Advanced setting" ### 3. 报警历史测试 - ✅ 未解除的报警不显示解除状态 - ✅ 已解除的报警显示绿色解除状态条 - ✅ 自动解除显示"自动解除" - ✅ 用户处理显示"用户处理" - ✅ 解除时间格式正确(HH:MM) ### 4. 数据兼容性测试 - ✅ ESP32本地数据正常显示 - ✅ 云端数据正常显示 - ✅ 缺少解除字段时不报错 - ✅ 各种时间格式都能正确解析 --- ## 🎉 总结 本次优化主要聚焦于UI细节和用户体验: 1. **简化信息** - 删除冗余的时间提示 2. **专业化命名** - 将"开发者选项"改为更合适的"高级设置" 3. **增强信息** - 添加报警解除状态,让用户了解报警的完整生命周期 所有修改都保持了向后兼容性,不会影响现有功能。