Commit Graph

4054 Commits

Author SHA1 Message Date
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
c7afa34f03 fix(aiot): 告警截图 Image 组件添加 fallback 兜底显示
列表缩略图和详情弹窗的 Image 组件均添加 fallback SVG,
当图片 URL 无效或加载失败时显示友好占位符而非损坏图标。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 14:21:13 +08:00
b9d146c58f fix: ROI 创建时 deviceId 默认值改为 edge,与边缘端一致
原值 edge-001 与 Edge 端 EDGE_DEVICE_ID=edge 不匹配,导致 Redis
Stream 事件被 Edge 过滤跳过,配置推送无法到达边缘端。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 17:05:51 +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
2e0efc7c8c fix(aiot): 修改应用名时自动重新分配流ID,从001开始按序分配 2026-02-25 14:14:02 +08:00
6ac978a2ac fix(aiot): 修复应用名多选问题,使用AutoComplete替代Select tags模式 2026-02-25 14:08:21 +08:00
286f4a1a03 feat(aiot): 添加应用名下拉选择功能,支持选择已有或输入新名称 2026-02-25 13:55:29 +08:00
bf3ca08d7b feat(aiot): 允许编辑摄像头应用名,保留流ID不变
修改内容:
- 移除应用名的 disabled 限制,允许在编辑模式下修改
- 流ID保持不可编辑(避免复杂的唯一性冲突)
- 更新提示文字:应用名可修改,流ID不可修改

用户场景:
- 用户创建摄像头时可能输错应用名
- 或者后期需要调整摄像头的场景分类
- 修改应用名后,流ID保持不变(如:大堂/001 → 停车场/001)
- 后端会验证新的 app+stream 组合是否冲突

注意事项:
- 修改应用名可能导致 app+stream 组合冲突
- 后端已添加唯一性验证,会提示用户冲突
2026-02-25 13:49:27 +08:00
dc71da002e feat(aiot): 摄像头管理 - 应用名场景化和流ID自动编号
- 应用名提示优化:"场景分类,如:大堂、停车场、入口"
- 流ID提示优化:"在当前场景下的唯一标识,如:001(系统会自动编号)"
- 新增摄像头时,流ID自动填充为场景下的顺序编号(001, 002, 003...)
- 监听应用名变化,动态更新流ID编号
- 自动编号逻辑:查找当前场景下已用的纯数字编号,填充下一个可用编号
- 用户可手动修改自动填充的编号(支持语义化命名)

实现:
- autoFillStreamId() 函数:根据应用名计算下一个可用编号
- watch监听 editForm.app 变化,触发自动编号
- handleAdd() 时自动填充流ID

示例:
- 应用名=大堂,已有001、002 → 自动填充003
- 应用名=停车场,首次创建 → 自动填充001
- 用户可修改为语义化名称:B1_entrance
2026-02-25 13:27:02 +08:00
d6d7549df4 feat(aiot): ROI配置界面优化 - 边缘设备绑定和优先级说明
- 新增ROI时默认关联 edge-001 边缘设备
- ROI属性中添加边缘设备选择框(支持修改)
- 优先级字段添加最大值限制(0-100)
- 优先级字段添加说明文本:"数值越大优先级越高,多个ROI重叠时优先处理高优先级区域"
- 边缘设备字段添加说明文本:"关联的边缘推理节点,默认 edge-001"

修复问题:新增ROI时缺少device_id导致单独推送配置失败
现在所有新建ROI都自动关联edge-001,用户可在属性中修改

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 11:26:54 +08:00
4201df2246 feat(aiot): 添加周界入侵新参数说明
- 入侵确认时间:持续检测到人5秒触发告警
- 消失确认时间:持续无人180秒自动结束告警
- 详细说明:消失确认期间短暂有人不影响倒计时
2026-02-25 09:14:18 +08:00
e86ba5e7b3 feat(aiot): 告警列表和详情显示摄像头名称
- 列表摄像头列优先显示cameraName
- 详情页摄像头字段优先显示cameraName
- 降级显示cameraId或'-'

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 22:55:04 +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
3b65e27212 fix(aiot): 修复confirm_seconds描述格式 - 统一标点符号风格
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:44:43 +08:00
95354e09a7 feat(aiot): 更新周界入侵参数说明 - 支持自动告警处理
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:41:32 +08:00
8375d3c8a1 refactor(aiot): 算法抽帧频率改为固定展示,不允许用户配置
- 在算法绑定列表中显示固定帧率标签(绿色Tag)
- 离岗检测:3帧/秒
- 周界入侵:1帧/秒
- 其他算法:默认5帧/秒
- 删除参数配置界面的帧率选择器
- 帧率由算法类型决定,不允许用户修改

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 09:01:55 +08:00
b0ea479493 feat(aiot): 添加算法抽帧频率选择器
功能特性:
- 新增抽帧频率参数映射和选择器
- 7个预设选项:10帧/秒到1帧/30秒
- 每个选项带有场景说明和适用描述
- 美观的下拉选择界面,清晰展示频率和用途

抽帧频率选项(物业场景优化):
1. 10帧/秒 - 高频检测,快速移动场景
2. 5帧/秒 - 中高频,正常人员活动
3. 3帧/秒 - 中频,人员离岗、聚集(离岗推荐)
4. 1帧/秒 - 标准频率,周界入侵(入侵推荐)
5. 1帧/3秒 - 低频,慢速场景
6. 1帧/10秒 - 极低频,车辆检测
7. 1帧/30秒 - 超低频,垃圾堆放等静态检测

界面优化:
- 下拉选项采用双行显示(频率+说明)
- 参数说明提示算法处理频率的影响
- 自动显示默认值对应的频率标签

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 17:15:10 +08:00
e90ffec8c8 refactor(aiot): 简化离岗检测参数显示,只展示核心配置项
用户只需配置:
- 离岗倒计时(秒):人员离开后多久触发告警(默认300秒)
- 工作时间段:监控时间配置

移除前端显示的技术细节参数:
- confirm_on_duty_sec(固定10秒)
- confirm_leave_sec(固定30秒)

优点:
- 界面简洁清晰,只显示用户关心的参数
- 避免用户困惑,降低配置难度
- 保留其他算法的参数映射不受影响

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 17:01:49 +08:00
0a3658dc57 refactor(aiot): 删除离岗检测的cooldown_sec参数映射
- 移除 cooldown_sec 参数(状态机已保证必须回岗才能再次告警)
- 保留 cooldown_seconds 用于其他算法(周界入侵等)
- 简化参数配置,减少用户困惑

离岗检测现在只需配置3个关键参数:
1. 离岗确认时间(30秒)
2. 离岗倒计时(300秒)
3. 在岗确认时间(10秒)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:59:25 +08:00
bddae7367a fix(aiot): 修正离岗检测参数标签和说明
- 添加 leave_countdown_sec(离岗倒计时)参数映射
- 修正 confirm_leave_sec 标签:离岗倒计时 → 离岗确认时间
- 明确三个参数的区别:
  1. 离岗确认时间(30秒):持续离开多久确认为离岗
  2. 离岗倒计时(300秒):确认离岗后倒计时多久触发告警 
  3. 告警冷却期(600秒):触发告警后多久内不再重复告警

- 在说明中标注"您要找的参数!"帮助用户识别

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:56:18 +08:00
37af7ea117 feat(aiot): 改进算法参数标签和说明
- 修改参数标签更易理解:
  - confirm_leave_sec: 确认离岗时间 → 离岗倒计时
  - cooldown_sec: 冷却时间 → 告警冷却期
  - confirm_on_duty_sec: 确认在岗时间 → 在岗确认时间
  - confirm_seconds: 确认时间 → 触发确认时间

- 添加参数说明功能:
  - 每个参数下方显示详细说明
  - 解释参数的具体作用和用途
  - 避免用户混淆参数含义

- 优化用户体验:
  - 离岗倒计时:持续离开X秒才触发告警(避免误报)
  - 告警冷却期:触发后X秒内不再重复告警(避免骚扰)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:53:12 +08:00
6b096862b2 refactor(aiot): 调整工作时间快捷模板
- 删除三班制模板
- 修改两班制时间为 08:30-11:00 和 12:00-17:30
- 保留全天监控和单班制模板

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:45:43 +08:00
5f04a3c401 refactor(aiot): 使用原生time input替换TimePicker组件
- 移除 ant-design-vue TimePicker 和 dayjs 依赖
- 使用原生 HTML5 <input type="time"> 实现时间选择
- 更简单、更稳定、浏览器原生支持
- 添加 Ant Design 风格的样式适配
- 简化代码逻辑,直接使用字符串格式 HH:mm
- 完美支持编辑、添加、模板功能

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:37:37 +08:00
e163bf5152 fix(aiot): 重构时间选择器为两个独立的TimePicker
- 将 TimePicker.RangePicker 改为两个独立的 TimePicker
- 使用 startTime 和 endTime 分别控制开始和结束时间
- 添加时间分隔符"至"提升可读性
- 修复编辑功能,现在可以正常编辑模板时间段
- 解决时间选择器无法显示和选择的问题

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:35:50 +08:00
fd6ac90b67 fix(aiot): 修复时间选择器placeholder语法错误
- 将 placeholder 字符串改为数组绑定 :placeholder
- 修复 Vue 编译错误:Attribute name cannot contain quotes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:31:08 +08:00
d70ce2fa79 feat(aiot): 工作时间段增加编辑功能
- 添加时间段编辑功能,点击编辑按钮可修改时间
- 快捷模板生成的时间段现在可以编辑调整
- 编辑模式下显示保存和取消按钮
- 正在编辑的时间段高亮显示
- 改进 TimePicker 提示文本,更清晰易用
- 删除、清空、切换模板时自动取消编辑状态
- 更新使用说明,添加编辑功能提示

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:26:59 +08:00
10701468c8 chore: 更新.gitignore排除诊断文档和开发辅助文件
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:17:59 +08:00
fd4673d661 fix(aiot): 修复算法参数保存失败 + 添加中文参数标签
- 修复 Column 'priority' cannot be null 错误
- AlgorithmParamEditor 增加 priority/enabled props 并在保存时传递
- RoiAlgorithmBind 提取绑定的 priority/enabled 并传递给编辑器
- 添加中文参数名映射 (working_hours -> 工作时间段等)
- 添加参数验证逻辑和详细错误日志

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:15:15 +08:00
5d43b46155 debug(aiot): 添加工作时间参数保存的详细日志
问题:用户保存工作时间参数时提示"参数保存失败"
调试:添加详细console日志帮助排查问题
- 显示保存前的原始数据
- 显示参数验证过程
- 显示working_hours格式检查
- 显示请求payload
- 显示完整的错误响应

使用:打开浏览器F12控制台查看日志
2026-02-13 16:07:25 +08:00
792424717a fix(aiot): ROI配置页面显示应用名而不是camera_code
问题:ROI配置页面显示camera_code(技术标识符),用户体验差
修复:
- 摄像头选择器显示应用名
- 页面标题显示应用名(如:测试区域A - ROI配置)
- camera_code仅作为后台标识符使用,不暴露给用户

影响页面:/aiot/device/roi
2026-02-13 15:52:58 +08:00
bf93a1afec fix(aiot): 恢复摄像头管理页面应用名显示和输入 - 改善用户体验
- 表格恢复显示应用名和流ID列,移除用户看不懂的摄像头编码列
- 表单恢复应用名输入框,用户可输入有意义的名称(如:大堂、停车场等)
- 恢复应用名必填验证
- camera_code在后台自动生成,前端只在编辑时只读显示
- 改善用户体验:用户看到的是可理解的应用名,而不是技术编码
2026-02-13 13:29:58 +08:00
ac345a4728 feat(aiot): ROI配置页面改用cameraCode参数和截图调用
- 路由参数:从query读取cameraCode替代cameraId
- 移除app/stream状态变量,统一使用cameraCode
- 截图调用:getSnapUrl(cameraCode)替代getSnapUrl(app, stream)
- loadCameraOptions:使用cameraCode作为选项value和label
- onCameraSelected:直接设置cameraCode,移除app/stream赋值
- 配置推送/导出:使用cameraCode参数
- 页面标题:显示cameraCode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:34:59 +08:00
4bbc4b16dd feat(aiot): 摄像头管理页面改用cameraCode,隐藏app输入
- 表格列:将"应用名"改为"摄像头编码",显示cameraCode字段
- loadRoiCounts:使用cameraCode替代app/stream拼接
- handleRoiConfig:路由query使用cameraCode替代cameraId
- handleExport:使用cameraCode导出配置
- 表单:隐藏app输入框,编辑模式显示cameraCode(只读)
- 删除确认:显示cameraCode而非app/stream
- 验证逻辑:移除app字段必填验证

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:34:34 +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
92a6031e72 fix(aiot): 修复告警列表自动计时 - duration_ms为NULL时显示进行中
问题描述:
- 前端告警列表对于新触发的告警(duration_ms=null)仍然显示"5分"等具体时长
- 这是因为前端在显示时没有正确处理null值

解决方案:
- 修改 formatDuration 函数,显式检查 duration_ms 是否为 null/undefined
- 当 duration_ms 为 null 时,返回"进行中"而不是"--"
- 简化模板代码,直接调用 formatDuration 函数处理所有情况

影响范围:
- 告警列表表格的持续时长列
- 告警详情弹窗的持续时长字段

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 10:29:26 +08:00
b6217a8b02 feat(aiot): 优化算法参数配置界面 - 修复保存失败+精美时间选择器
问题修复:
1. 修复算法参数保存失败问题
   - working_hours 数据格式错误(字符串数组 → 对象数组)
   - 添加参数校验逻辑
   - 改进错误提示(显示后端具体错误信息)

2. 全新时间段选择器组件
   - WorkingHoursEditor.vue(精美可视化界面)
   - 快捷模板:全天/单班制/两班制/三班制
   - 可视化时间选择(TimePicker.RangePicker)
   - 智能校验(时间段不重叠、结束>开始)
   - 实时预览已配置时间段

核心改进:
1. AlgorithmParamEditor.vue
   - 引入 WorkingHoursEditor 组件
   - 特殊处理 working_hours 字段
   - validateParams() 参数校验
   - 改进错误提示(catch块显示详细错误)
   - 增加帮助提示

2. WorkingHoursEditor.vue(新建)
   - 快捷模板区域:
     * 全天监控(空数组)
     * 单班制(09:00-18:00)
     * 两班制(09:00-12:00, 14:00-18:00)
     * 三班制(08:00-16:00, 16:00-00:00, 00:00-08:00)
   - 自定义时间段:
     * TimePicker.RangePicker 可视化选择
     * 时间段卡片展示
     * 一键删除、清空全部
     * 显示时长(小时+分钟)
   - 智能校验:
     * 结束时间 > 开始时间
     * 时间段不重叠
     * 实时错误提示
   - 帮助说明:使用提示

UI设计亮点:
- 卡片式布局,清晰直观
- 快捷模板一键应用
- 时间段自动排序
- 空状态优化
- 响应式设计
- 精美的图标和颜色

数据格式:
before: ["09:00-18:00"]  //  字符串数组
after:  [{"start": "09:00", "end": "18:00"}]  //  对象数组

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 17:31: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
649d9e2a76 fix(aiot): 前端过滤 visible=false 的菜单项
在 fetchUserInfo 中对后端返回的菜单做递归过滤,
移除 visible=false 的菜单项,确保隐藏菜单不会显示。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 11:29:01 +08:00
f78eaa2ae1 refactor(aiot-device): 规范整理摄像头管理和 ROI 配置页面代码
- 摄像头管理:代码按功能分区(列表状态/编辑弹窗/数据加载/增删改/拉流控制/配置导出)
- ROI 配置:代码按功能分区(摄像头选择/截图/数据加载/绘制/选择/编辑/删除/推送)
- getSnapUrl 适配 async 调用,截图 URL 携带 access-token 认证参数
- 统一中文注释风格

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:25:19 +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
e59eb5fe65 fix(aiot): 删除静态路由文件,消除重复菜单
accessMode 为 backend 模式时菜单由后端接口返回,
静态路由文件 aiot.ts 导致出现两个重复的 AIoT 菜单。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:33:34 +08:00
e2bde76f20 feat(aiot-device): 重写 ROI 配置页面,迁移 WVP 画布式交互
从 WVP 的 roiConfig 整套组件迁移至 Vue3 + Ant Design:

ROI 配置主页面 (roi/index.vue):
- 无参数时显示摄像头选择器,有参数时直接进入配置
- 左侧画布面板 + 右侧 ROI 列表/属性/算法侧边栏
- 画矩形(拖拽)、画多边形(点击+双击完成)
- ROI 属性编辑:名称、颜色、优先级、描述
- 推送配置到边缘端

RoiCanvas 组件 (roi/components/RoiCanvas.vue):
- Canvas 叠加在摄像头截图上,归一化坐标 (0-1)
- 矩形拖拽绘制、多边形逐点绘制
- ROI 选中高亮、点击选择、右键删除
- 窗口 resize 自适应

RoiAlgorithmBind 组件 (roi/components/RoiAlgorithmBind.vue):
- 算法列表加载、绑定/解绑操作
- 启用/禁用开关、参数配置入口

AlgorithmParamEditor 组件 (roi/components/AlgorithmParamEditor.vue):
- 根据 JSON Schema 动态生成表单
- 支持 int(数字输入)、list(标签列表)、string(文本输入)
- 参数保存到后端

删除旧的 data.ts(VxeGrid 列定义,已不再使用)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 23:24:48 +08:00
b72839622e feat(aiot-device): 重写摄像头管理页面,迁移 WVP 功能
从 WVP 的 cameraConfig/index.vue 迁移至 Vue3 + Ant Design:
- 搜索过滤:支持名称/地址搜索和拉流状态筛选
- 摄像头列表:显示应用名、流ID、拉流地址、状态
- ROI 数量徽标:异步加载每个摄像头的 ROI 数量
- 操作按钮:ROI 配置(跳转)、拉流/停止、导出配置
- 配置导出:JSON 文件下载

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 23:24:27 +08:00