# 产品化改进实施跟踪

## P0 — 交付底线

| # | 事项 | 状态 | 开始 | 完成 |
|---|------|------|------|------|
| 1 | 告警中心增强 | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 2 | 仪表盘重做（实时告警流+统计卡片） | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 3 | 一键配置向导（场景化部署 3 步流程） | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 4 | 基础登录鉴权 | ⬜ 待开始 | - | - |
| 5 | 监控页 HLS.js 本地化 | ✅ 已完成 | 2026-07-17 | 2026-07-17 |

## P1 — 体验改善

| # | 事项 | 状态 | 开始 | 完成 |
|---|------|------|------|------|
| 6 | 告警浏览器通知（SSE / 标题闪烁） | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 7 | 设备列表服务健康指示 | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 8 | 操作结果提示优化（toast 替代 URL 消息） | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 9 | 术语统一 | ✅ 已完成 | 2026-07-17 | 2026-07-17 |

| 16 | 通道部署页配置同步状态指示 | ✅ 已完成 | 2026-07-20 | 2026-07-20 |

## P2 — 长期优化

| # | 事项 | 状态 | 开始 | 完成 |
|---|------|------|------|------|
| 10 | 时序图表（告警趋势） | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 11 | 设备分组与标签 | ⏸️ 推迟 | - | - |
| 12 | 配置版本对比 | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 13 | 报告导出（CSV） | ✅ 已完成 | 2026-07-17 | 2026-07-17 |
| 14 | 模型管理简化 | 🔄 进行中 | 2026-07-20 | - |
| 14.1 | └ 上传新模型（文件上传→存盘→入库） | ✅ 已完成 | 2026-07-20 | 2026-07-20 |
| 14.2 | └ 设备兼容性矩阵（N/A vs 缺失） | ✅ 已完成 | 2026-07-20 | 2026-07-20 |
| 14.3 | └ 版本管理（时间戳替代 auto） | ✅ 已完成 | 2026-07-20 | 2026-07-20 |
| 14.4 | └ "更新全部"智能过滤（只推送给需要更新的设备） | ✅ 已完成 | 2026-07-20 | 2026-07-20 |
| 15 | 人脸库优化（搜索+同步+质量评分） | ✅ 已完成 | 2026-07-20 | 2026-07-20 |
| 15.1 | └ Build 产出自动注册为标准资源 | ✅ 已完成 | 2026-07-20 | 2026-07-20 |
| 15.2 | └ 人脸库页面接入 Resource 同步系统 | ⬜ 待开始 | - | - |
| 15.3 | └ 人员搜索与过滤 | ✅ 已完成 | 2026-07-20 | 2026-07-20 |
| 15.4 | └ 人脸质量评分展示 | ✅ 已完成 | 2026-07-20 | 2026-07-20 |

## 进行中

- **P2-14 模型管理简化** — 详见 [模型与人脸库改进方案](./模型与人脸库改进方案.md)
- **P2-15 人脸库优化** — 详见 [模型与人脸库改进方案](./模型与人脸库改进方案.md)

## 已完成事项

### 2026-07-20

- **新增：通道部署页配置同步状态指示**
  - `DeviceAssignmentBoardCard` 新增 `ConfigSynced` 字段
  - `pageDeviceAssignments`：查询 Edge `/v1/config/status` 的 sha256，与 `config_versions` 中最新的 config_id 对比
  - 每个设备卡片显示：✅ 配置已同步 或 ⚠ 配置待更新
  - 改动文件：`config_assets.go` (+1)、`ui.go` (+22)、`device_assignments.html` (+3)、`style.css` (+3)

- **P2-15.4 人脸质量评分展示**
  - `actionFaceGalleryBuild` 增强输出解析：提取 per_person_used、failure_reasons、failed_images 等诊断信息
  - Build 完成后写入 `build_meta.json`，供页面读取每人的通过数
  - 结果消息增强：显示 "生成成功，共 3 人，12 张通过，2 张失败（无人脸×2）"
  - 人脸库卡片：每人照片数旁显示绿色"N通过" pill（如 "3通过"）
  - 改动文件：`ui.go` (+48)、`face_gallery.html` (+1)

- **P2-15 人脸库优化 全部完成** ✅

- **P2-14.4 "更新全部"智能过滤**
  - `ModelStatusRow` 新增 `NeedsSync` 字段，`BuildModelStatusBoard` 在设备有缺失/不一致模型时设为 true
  - 模板"更新全部模型"表单改为只提交 `NeedsSync=true` 的设备，避免对已同步设备做无效推送
  - 改动文件：`model_management.go` (+2)、`models.html` (+1)

- **P2-14.3 版本管理**
  - 新增 `fileVersion` 辅助函数：基于文件修改时间生成 `YYYYMMDD-HHMMSS` 版本号
  - `SyncStandardModelsFromDirectory`、`SyncStandardResourcesFromDirectory`、`RegisterResource` 的 `Version` 字段从固定 `"auto"` 改为调用 `fileVersion`
  - `actionModelUpload` 的默认版本也改为统一格式
  - 改动文件：`model_management.go` (+11)、`resource_management.go` (+3)、`ui.go` (+1)

- **P2-14.2 设备兼容性矩阵**
  - `BuildModelStatusBoard` 新增 `deviceCapabilities` 参数，根据设备 `/v1/capabilities` 判断
  - `ModelTypeCapability` 函数映射模型类型→能力Key（`face_detection`→`face_det`、`face_recognition`→`face_recog`，其余不限制）
  - 设备不支持某类模型时，状态显示灰色「不适用」pill 而非红色「缺失」
  - `pageModels` handler 查询所有在线设备的能力信息，传给 `BuildModelStatusBoard`
  - Summary 计算：只有 ok/na 的设备算 Complete，合理
  - 改动文件：`model_management.go` (+22)、`ui.go` (+32)、`models.html` (+2)、`model_management_test.go` (+2)、`style.css` (+1)

- **P2-14.1 上传新模型**
  - 新增 `actionModelUpload` handler：multipart 接收 → 存盘 `models/standard_models/` → SHA256 hash → 写入 `standard_models` 表
  - 表单字段：名称、类型（下拉）、版本（可选，留空自动生成日期版号）、描述、文件
  - "自动分发"复选框：勾选后立即创建 `model_sync_all` 任务推送到全部在线设备
  - 路由：`POST /ui/models/upload`
  - 模板：死按钮改为弹出模态框，仿 face_gallery 风格
  - 改动文件：`internal/web/ui.go` (+82)、`models.html` (+38)

- **P2-15.3 人员搜索与过滤**
  - 人员列表上方新增搜索框，输入关键词实时过滤（前端 JS，无需后端）
  - 卡片增加 `person-card` class + `data-name` 属性用于匹配
  - 改动文件：`face_gallery.html` (+15)

- **P2-15.2 人脸库页面接入 Resource 同步系统**
  - `pageFaceGallery`：加载 `resource_type=face_gallery` 的标准资源，构建 `ResourceStatusBoard` 传给模板
  - 新增 `actionFaceGallerySync` handler：接收 `device_id[]`，创建 `resource_sync_all` 任务，跳转任务详情
  - 模板新增"设备同步状态"卡片：SHA256 对比矩阵 + "同步到全部设备"按钮 + 单设备"同步"按钮
  - 路由：`POST /ui/face-gallery/sync`
  - 改动文件：`internal/web/ui.go` (+41)、`face_gallery.html` (+49)

- **P2-15.1 Build 产出自动注册为标准资源**
  - `ResourceManagementService` 新增 `RegisterResource` 方法：对单个文件 hash + 写入 `standard_resources` 表
  - `actionFaceGalleryBuild`：Build 成功后自动调用注册，Resource 分发系统即刻感知新版本
  - 改动文件：`internal/service/resource_management.go` (+20)、`internal/web/ui.go` (+8)

### 2026-07-17

- **P2-12 配置版本对比**
  - DB 新表 `config_versions`，部署时自动保存配置 JSON 快照
  - 设备详情页"配置历史"按钮 → 版本列表 → 选两版并排对比
  - 差异行红/绿高亮

- **P0-3 一键配置向导**
  - 3 步引导：选设备 → 配检测（从设备读取运行通道，下拉选已有视频源或手动添加） → 一键下发
  - 标准模式可见，复用的 AutoConfigService 链路

- **P2-13 报告导出**
  - API：`/api/alarms/export?from=&to=&device=&rule_type=` 导出 CSV
  - Excel 兼容（BOM + UTF-8），支持筛选条件继承，告警页面一键下载

- **P2-10 告警趋势图**
  - 仪表盘新增 Canvas 柱状图：近 7 日告警数量
  - API：`/api/alarms/daily-count?days=7` 返回每日统计
  - 纯 Canvas 绘制，无外部图表库依赖

- **P1-9 术语统一**
  - "视频通道" → "检测通道"（5 个模板 + 菜单 + Handler 标题）
  - "场景" → "场景管理"（Handler 标题与菜单对齐）
  - "人脸库管理" → "人脸库"（与菜单对齐）

- **P1-8 操作结果提示优化**
  - JS 读取 URL 中 `?msg=` / `?error=` 参数，显示为右上角浮动 toast
  - 绿色成功 / 红色失败，4 秒自动滑出消失
  - 展示同时清理 URL，刷新不重复显示

- **P1-7 设备服务健康指示**
  - 模板本已有媒体服务状态（运行中/未运行/待确认）
  - 新增：在线但媒体服务异常的行背景变淡橙色警告

- **P1-6 告警浏览器通知**
  - 顶栏铃铛图标显示未处理告警数（红点+数字徽章）
  - 页面标题闪烁 `(N) SafeSight` 
  - 每 15 秒轮询 `/api/alarms/unacknowledged-count`
  - `render` 统一注入计数，所有页面生效

- **P0-2 仪表盘重做**
  - 统计卡片：今日告警/未处理告警/在线设备/检测路数
  - SSE 实时告警流：EventSource 连接 /api/alarms/stream，新告警实时推入

- **P0-1 告警中心增强**
  - DB 迁移：`alarm_records` 增加 `status`, `severity`, `acknowledged_at/by`, `resolved_at/by` 列
  - 服务层：`AlarmRecord` 扩展 + SSE 广播 + 确认/关闭/改等级 API
  - 页面：严重等级列 + 状态列 + 操作按钮 + 设备/规则类型下拉筛选

- **P0-5 监控页 HLS.js 本地化**
  - 改动：`monitor.html:18` — CDN 引用改为本地 `/ui/assets/vendor/hls.min.js`

---

**已完成：14/15（93.3%）** | **剩余：P0-4（登录）** | **推迟：P2-11（分组）**
