Commit Graph

20 Commits

Author SHA1 Message Date
617cdc8c15 功能:告警列表摄像头搜索改为下拉选择+输入搜索
- 新增 getCameraOptions API(从 WVP 获取摄像头列表)
- 搜索框改为 ApiSelect 组件,支持下拉选择和输入前缀匹配
- 选中后用 cameraCode 查询后端
2026-03-19 11:36:56 +08:00
4c287ca690 性能:看板改为单次请求加载,从5个并发请求优化为1个
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 17:31:21 +08:00
d2a77079af 功能:告警数据看板替换原告警汇总页
- 5 个 KPI 卡片(今日告警/待处理/已处理/平均响应/在线设备)
- 告警趋势面积图(7天/30天切换,按类型堆叠)
- 告警类型分布环形图(中心显示总数)
- 设备告警 Top10 横向条形图
- 告警级别分布柱状图
- 24小时时段分布图(高亮高峰时段)
- 最近告警滚动列表
- 60秒自动刷新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 17:11:02 +08:00
694c5c7af1 功能:边缘节点页面重写为卡片列表
- VxeGrid 表格改为 Card 卡片布局
- 新增 getDeviceList() 调用 WVP list 接口
- 每张卡片展示:设备ID、状态Tag、最后心跳、运行时长、摄像头数、配置版本
- data.ts 精简为状态配置和 formatUptime 工具函数

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 17:47:31 +08:00
fae585f5e9 功能:摄像头状态指示器 + 截图缓存优化 + 截图预热
1. 摄像头列表状态指示器(绿/红点)
   - 新增状态列显示摄像头截图可用性
   - 绿色=截图正常,红色=截图失败,灰色=加载中
   - 使用 /snap/image 代理端点检测状态

2. 截图缓存优化(getSnapUrl 重写)
   - 非强制模式:返回稳定URL(无时间戳),浏览器缓存5分钟
   - 强制模式:先触发边缘截图,再返回带时间戳URL破缓存
   - 使用 /snap/image 代理端点,避免COS预签名URL过期问题

3. 截图预热(新增摄像头时)
   - 添加摄像头成功后自动触发首次截图
   - 预热失败不影响主流程(非阻塞)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:02:41 +08:00
284f2b8d87 fix(aiot): 回退告警 API 到 Service 后端,修复截图 URL 端点
告警问题:
- 告警数据存储在 FastAPI Service 的 alert_platform.db 中
- 之前错误地切换到 wvpRequestClient(WVP 后端的 wvp_ai_alert 表)
- 回退到 requestClient + /aiot/alarm/alert/* 路径恢复数据

截图问题:
- /snap/image 代理端点在 Redis+DB 都无缓存时返回 404
- 回退到 /snap 端点,利用其 Accept: image/* 自动 302 重定向逻辑
- 保留 force 参数支持手动刷新截图

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 11:05:03 +08:00
0d56b2f221 fix(aiot): 截图持久化适配 + 告警 API 切换到 WVP + 图片代理
截图 / ROI:
- getSnapUrl: 非 force 模式直接返回 /snap/image 代理 URL(从 DB 读持久化截图,
  不触发 Edge),force 模式先请求 Edge 截图再返回代理 URL
- RoiCanvas: 添加 ResizeObserver 确保容器尺寸变化时重新初始化 canvas,
  onImageError 兜底初始化 canvas(截图失败仍可绘制/查看 ROI),
  snapUrl watcher 触发 canvas 重初始化

告警:
- alarm/index.ts: requestClient → wvpRequestClient,路径从
  /aiot/alarm/alert/* 切换到 /aiot/device/alert/*(走 WVP 后端)
- Alert 类型新增 imagePath、receivedAt、extraData 字段
- alarm list: 缩略图和详情图片通过 WVP /alert/image 代理端点显示,
  避免 COS presigned URL 过期问题
- device/index.ts: 新增 getAlertImageUrl() 构造告警图片代理 URL

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 09:21:48 +08:00
71fd2a8576 fix(aiot): 边缘设备API切换到WVP直调,ROI下拉框改为动态加载
- edge/index.ts: requestClient → wvpRequestClient,路径改为 /api/ai/device/*
- roi/index.vue: 移除硬编码 edge-001 选项,从 WVP 动态加载设备列表
- 新建 ROI 默认 deviceId 取设备列表第一项,兜底 edge

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 16:49:08 +08:00
dcb8217a78 fix(aiot): 截图刷新添加force参数,绕过WVP 5分钟缓存
getSnapUrl新增force参数,refreshSnap时传force=true,
使WVP后端跳过Redis缓存重新向Edge请求截图。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 16:27:30 +08:00
3d34c3f57f feat(aiot): 告警详情显示ROI名称
- Alert接口添加roiName字段
- 详情页显示'检测区域:{roiName}'
- 删除'(bbox)'英文提示
- 移除bbox坐标显示

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:49:31 +08:00
2583ed5335 feat(aiot): Camera接口增加cameraCode字段,getSnapUrl改用cameraCode
- Camera interface 增加 cameraCode?: string 字段
- getSnapUrl 函数参数从 (app, stream) 改为 (cameraCode)
- 截图URL查询参数从 app/stream 改为 cameraCode
- 配合后端 camera_code 重构计划

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:24:31 +08:00
a2284d8991 feat(aiot): 告警列表-持续时长格式化 + 创建时间改为结束时间
API类型定义:
- Alert接口新增durationMs、lastFrameTime字段

列表展示优化:
- 持续时长列改为读取durationMs,自适应格式化(秒/分/时)
- "创建时间"列替换为"结束时间"列,显示lastFrameTime或handledAt
- 详情弹窗持续时长同步使用formatDuration格式化
2026-02-11 17:56:17 +08:00
e54fcf1f8c feat(aiot): 告警截图展示 + 全局配置同步 + API兼容修复
- 告警列表新增截图缩略图列,支持预览大图
- 告警详情显示截图 URL 链接
- 摄像头管理页新增「同步全局配置」按钮
- 告警 API 路径修正: camera-summary → device-summary
- 告警 ID 兼容 alarmId 字符串格式
- Vite 代理新增 /uploads、/captures、/aiot/storage 路由

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 09:57:29 +08:00
777e52986e fix(aiot): 修复摄像头保存失败 + 标题改为摄像头管理系统
- saveCamera 拆分为 addCamera/updateCamera 匹配WVP实际接口
- .env 标题改为"摄像头管理系统"
- 告警列表字段适配新三表结构
- preferences 配置调整

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:22:31 +08:00
4b54a50d8c fix(aiot): 删除实时视频模块
删除 views/aiot/video 和 api/aiot/video 目录,
撤回 auth.ts 中的菜单过滤逻辑。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:40:56 +08:00
eb11e7ed1f refactor(aiot-device): 规范整理设备 API 层和类型定义
- 按功能分区:摄像头管理、ROI 区域、算法管理、算法绑定、配置推送
- Camera 接口扩展完整字段(streamKey、createTime 等)
- 新增 PageResult、MediaServer 类型定义
- getSnapUrl 改为 async,通过 query param 传递 access-token 支持认证截图
- 所有 API 函数添加精确的泛型返回类型

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:25:03 +08:00
184bb863b0 fix(aiot): 修复 WVP 认证机制,实现自动登录和 token 管理
- WVP 使用独立 JWT 认证(access-token 头),与芋道 Authorization Bearer 不同
- 实现 WVP 自动登录:首次请求时自动调用 /api/user/login 获取 token
- 缓存 token 防止重复登录,401 时自动续期
- 响应拦截器自动解包 WVP {code:0, data:...} 格式
- Vite 代理新增 /aiot/device/user 和 /aiot/device/server 路由规则
- 移除已废弃的 aiot/video 代理规则

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:24:47 +08:00
f7bfde0135 feat(aiot-device): 摄像头管理增加增删改功能
- Camera 接口扩展完整字段(type、timeout、rtspType、enable 等)
- 新增 saveCamera、deleteCamera、getMediaServerList API
- 摄像头管理页面增加添加/编辑弹窗(表单含代理类型、拉流地址、RTSP方式等)
- 增加删除确认对话框
- Vite 代理增加媒体服务器 API 转发规则

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:51:37 +08:00
fc56ea0f75 feat(aiot-device): 完善设备模块 API 层,对接 WVP 实际接口
从 WVP 项目迁移全部设备管理 API:
- 摄像头管理:列表查询、开始/停止拉流
- ROI 区域:增删改查、按摄像头查询、截图
- 算法绑定:绑定/解绑/更新参数
- 配置推送:推送到边缘端、导出配置
- 移除未使用的 PageParam 导入

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 23:24:12 +08:00
159a82aaa9 feat(aiot): 搭建 aiot 前端模块路由和 API 层
- 新增 router/routes/modules/aiot.ts:6 个页面路由
  告警列表、摄像头汇总、摄像头管理、ROI配置、实时视频、边缘节点
- 新增 api/aiot/alarm/:告警 API(分页、详情、处理、删除、统计、汇总)
- 新增 api/aiot/edge/:边缘设备 API(分页、详情、统计)
- 新增 api/aiot/device/:摄像头和 ROI API(调用 WVP 后端)
- 新增 api/aiot/video/:视频播放 API(playStart/playStop)
- 新增 api/aiot/request.ts:WVP 专用请求客户端(跳过芋道响应拦截器)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 16:40:26 +08:00