|
|
8bce09a17a
|
功能:摄像头配置页面适配 cameraName
- 表格列:app+stream 改为摄像头名称
- 编辑弹窗:去掉应用名+流ID,改为摄像头名称(必填)
- app/stream 由后端自动处理,前端不再暴露
- Camera 类型新增 cameraName 字段
|
2026-03-19 11:42:17 +08:00 |
|
|
|
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 |
|
|
|
852be25413
|
功能:侧边栏菜单「告警汇总」重命名为「告警看板」
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-03-18 17:20:59 +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 |
|
|
|
58db3c7eb4
|
功能:算法绑定页增加告警等级选择器
支持在 ROI 算法绑定中配置告警等级(紧急/重要/普通/轻微),
等级保存在 params JSON 中,各算法有默认等级。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-03-18 16:32:58 +08:00 |
|
|
|
67085ffcfc
|
功能:告警级别调整为四级(轻微/普通/重要/紧急)并更新颜色
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-03-18 16:32:57 +08:00 |
|
|
|
8d5f2f138d
|
功能:隐藏 ROI 菜单项,ROI 配置已整合到摄像头管理中
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-03-18 16:32:33 +08:00 |
|
|
|
72b97453d3
|
修复:ROI Canvas 响应式对齐,精确覆盖图片内容区域
通过计算 object-fit: contain 下图片的真实渲染区域,让 Canvas 精确覆盖
图片内容而非整个容器(含黑边),解决不同屏幕/缩放下 ROI 偏移问题。
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-03-18 16:30:33 +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 |
|
|
|
4cd07c3fef
|
功能:前端支持车辆违停和车辆拥堵算法
- data.ts: ALERT_TYPE_OPTIONS新增车辆违停/拥堵选项
- AlgorithmParamEditor.vue: 新增违停和拥堵参数中英文名称及说明映射
- RoiAlgorithmBind.vue: 新增车辆算法帧率映射(1帧/秒)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-16 16:54:50 +08:00 |
|
|
|
0aa45be41f
|
修复:状态栏位置 + 导入顺序 + 移除多余token
1. 状态栏位置修正
- 正确位置:应用名 -> 流ID -> 拉流地址 -> 状态 -> ROI
- 之前错误地放在了流ID和拉流地址之间
2. 修复导入顺序
- useAppConfig应在script setup顶部导入
- 避免apiURL未正确初始化的问题
3. 状态检测优化
- /snap/image已免认证,移除access-token参数
- 简化HEAD请求逻辑
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-10 16:50:24 +08:00 |
|
|
|
0e73aa2b8d
|
修复:状态栏位置调整 + HEAD请求检测截图状态
1. 状态栏位置调整
- 列顺序改为:应用名 -> 流ID -> 状态 -> 拉流地址 -> ROI
2. 状态检测优化
- 使用 HEAD 请求替代 GET,避免下载完整图片
- 使用 fetch API 直接发送 HEAD 请求到 /snap/image
- 大幅提升状态检测性能
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-10 16:29:47 +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 |
|
|
|
eab4337a77
|
功能:ROI绑定算法时校验RTSP地址有效性
截图加载失败时阻止算法绑定并提示"RTSP拉流地址无效",
通过Canvas截图加载状态逐层传递到算法绑定组件实现校验。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-10 15:25:07 +08:00 |
|
|
|
d8e1ae5dab
|
refactor: 摄像头管理页面移除状态栏、拉流和导出按钮
- 删除"状态"列(拉流中/未拉流)
- 删除操作栏中"拉流"和"导出"按钮,保留ROI配置、编辑、删除
- 删除搜索栏中"拉流状态"筛选
- 清理无用import和方法(toggleStream/handleExport/startCamera/stopCamera/exportConfig)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-10 11:20:01 +08:00 |
|
|
|
f68b4e8b23
|
文档:创建 CLAUDE.md 开发指南
新增内容:
- 项目概述和生产部署信息(aiot-web-antd 容器)
- 常用命令(安装、开发、构建、测试、Docker 部署)
- 项目结构说明(Turborepo monorepo 架构)
- 关键页面路由(告警管理、设备管理、ROI 配置)
- 环境配置说明(开发和生产环境)
- API 集成指南(芋道网关、WebSocket)
- 开发工作流(添加页面、共享组件、API 接口)
- 常见问题排查
- Git 提交规范
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-03-05 16:29:17 +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 |
|
|
|
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 |
|