|
|
65eb988905
|
fix: move form inside device panel, use display:contents to preserve tab layout
|
2026-05-12 16:50:17 +08:00 |
|
|
|
84b8b1c65a
|
fix: remove transactions causing SQLITE_BUSY, add coding rules
- persistTask: 去掉事务,每个 Exec 原子即可
- saveAsset(profiles): 去掉事务,profile 和 units 分步保存
- CLAUDE.md: 加两条规则——不用事务除非必要;调试只加日志不改代码
|
2026-05-12 16:43:44 +08:00 |
|
|
|
700b2246c7
|
fix: confirmation dialog fires only once (remove duplicate listener), remove debug log
|
2026-05-12 15:38:32 +08:00 |
|
|
|
1a15ab80d6
|
fix: clear URL params after showing status, so refresh doesn't repeat stale messages
|
2026-05-12 15:26:42 +08:00 |
|
|
|
49ab6ae688
|
fix: form element now wraps device panel so checkboxes are submitted
之前 <form> 只包裹按钮,checkbox/hidden input 在表单外,
导致 submit() 提交空数据。
|
2026-05-12 15:21:29 +08:00 |
|
|
|
418bf3c80b
|
fix: persist features only after pipeline success, not before
actionConsoleSave: 先跑流水线,成功后再存 DB。
空功能提交不再清空 DB,改为提示用户。
|
2026-05-12 15:16:49 +08:00 |
|
|
|
67e8c3617a
|
fix: console status display — task info overridden by msg
|
2026-05-12 15:10:34 +08:00 |
|
|
|
ea955eb265
|
revert: remove config_apply retry (500 is fatal)
500 是 agent 端 media-server reload 超时导致的致命错误,
不应在 managerd 端重试。根因在 agent 的 10s 超时过短。
|
2026-05-12 14:54:57 +08:00 |
|
|
|
f2b3941e4a
|
fix: console stays after deploy, auto-refresh, config retry
- 下发后留在控制台,显示状态提示,6秒自动刷新
- 任务页 SSE 自动连接(无需手动点击)
- 总览页有执行中任务时自动刷新
- config_apply 增加 3 次重试(agent 500 时)
|
2026-05-12 14:51:59 +08:00 |
|
|
|
15f6f91fb6
|
feat: task timestamps, dirty state, confirmation dialog
- Task 模型增加 CreatedAt/CompletedAt,DB 读取和快照同步
- 总览页最近任务显示时间,限制5条,增加"更多 →"链接
- 任务中心增加创建时间/完成时间列
- 管控台"保存并下发"按钮:修改功能或视频源后才激活
- 下发前弹出变更摘要确认对话框
- 下发后回到管控台并显示任务ID
|
2026-05-12 14:26:10 +08:00 |
|
|
|
7eca9454b0
|
feat: DB-agent feature sync with conflict detection
- ConsoleFeature 增加 Available/Conflict 字段
- pageConsole 显示 agent 全部能力(含不可用的),不可用项 disabled
- DB 已启用但 agent 不可用时标记为冲突 ⚠
- 不可用功能 hover 显示原因
|
2026-05-12 13:57:03 +08:00 |
|
|
|
700d964524
|
feat: device capabilities from agent /v1/capabilities
Agent 新增 /v1/capabilities 接口,返回设备检测能力列表。
Managerd 控制台查询此接口,仅显示设备真实支持的功能。
- Agent: capabilities.go — 根据插件节点类型映射能力
- Managerd: pageConsole 查询 /v1/capabilities 过滤可选功能
- ConsoleFeature 增加 Description 字段,hover 显示说明
- 旧 agent 无此接口时回退为显示已持久化的功能
|
2026-05-12 13:52:53 +08:00 |
|
|
|
286dcaa945
|
feat: persist device features to DB as source of truth
- device_features 表:持久化设备检测功能选择
- pageConsole 从 DB 读取功能选择(非从模板反推)
- actionConsoleSave 先存 DB 再从 DB 读取运行流水线
- 模板选择改为最精确匹配(单功能只用该功能模板)
- 修复内存指标解析(补充 memory 字段)
|
2026-05-12 13:40:37 +08:00 |
|
|
|
25cf456047
|
feat: console one-click auto-config pipeline
管控台一键自动配置:勾选检测功能 + 分配视频源 → 自动生成配置并下发
新增:
- FeatureRegistry: 功能→模板映射与选择算法
- template_composer: 多模板 DAG 浅合并
- AutoConfigService: 完整流水线
- console.html: 视频源分配交互
修改:
- actionConsoleSave: stub → 完整自动配置编排
- pageConsole: 修复功能勾选回显 + 内存指标解析
- main.go: 注入 AutoConfigService
- .gitignore: /managerd 只匹配根目录二进制
|
2026-05-12 13:26:49 +08:00 |
|
|
|
59de94bfae
|
把设备性能移到管控台
|
2026-05-12 11:26:36 +08:00 |
|
|
|
57b9ec3523
|
增加管控台
|
2026-05-12 10:13:20 +08:00 |
|
|
|
62d73f36e2
|
refactor: 合并第三方服务类型,去重字段
1. token_service 合并到 alarm_service
- 去掉重复的 username/password/tenant_code
- alarm_service 保留 get_token_url、put_message_url、tenant_code 三个有效字段
- token_service_main 槽位绑定类型改为接受 alarm_service
2. 第三方服务页支持按类型动态显示字段(JS控制)
- 添加自定义(custom)类型,使用 JSON 文本域
- custom 类型支持槽位解析(resolvedServiceBinding)
3. 后端代码清理
- 移除 token_service 类型相关逻辑
- integration_type_label 去掉认证服务
|
2026-05-09 12:31:09 +08:00 |
|
|
|
ce18c85eba
|
feat: 标准调试参数 & 克隆不立即保存
1. 新增标准调试参数
- templates/standard_overlays/ 目录下导入 std_face_debug、
std_test_sensitive、std_production_quiet 三个标准调试参数
- 启动时通过 ImportStandardOverlaysFromDir 自动导入 SQLite
- 支持 std_ 前缀只读保护,不可直接编辑/删除
2. 复制后不立即保存
- 调试参数克隆:重定向到新建页预填数据,点击保存才入库
- 识别模板克隆:重定向到模板编辑页预填,点击创建/进入可视化编辑才入库
- 可视化编辑也支持 clone_source 参数,编辑保存时创建新模板
3. 简化调试参数 JSON 结构
- 去掉 instance_overrides 层级,改为顶层 override 键
- 运行时渲染兼容新旧两种格式
- UI 去掉目标/目标数量字段
4. 清理死代码
- 移除从零新建空白调试参数/模板的代码路径
|
2026-05-09 11:39:02 +08:00 |
|
|
|
c6c38f1e5d
|
fix: keep system nav open for face-gallery, alarms, monitor
|
2026-05-08 20:22:09 +08:00 |
|
|
|
7ece6a04fb
|
fix: use --red instead of --danger-soft-text for metric bars
|
2026-05-08 20:16:22 +08:00 |
|
|
|
f0465049f2
|
feat: progress bars with color coding for device metrics
|
2026-05-08 20:13:12 +08:00 |
|
|
|
b7268212e3
|
chore: convert all tabs to spaces
|
2026-05-08 20:05:40 +08:00 |
|
|
|
1bcd9ae3a5
|
fix: add json tags to inner struct fields for metrics parsing
|
2026-05-08 20:04:15 +08:00 |
|
|
|
08712814d9
|
fix: add json tags for memory fields in metrics struct
|
2026-05-08 19:50:22 +08:00 |
|
|
|
807561b908
|
fix: use form POST instead of fetch for face gallery delete
|
2026-05-08 19:46:50 +08:00 |
|
|
|
c2588e7785
|
refactor: server-side device metrics, no JS
|
2026-05-08 19:45:26 +08:00 |
|
|
|
0dede50f9e
|
fix: proxy device metrics through backend to avoid CORS
|
2026-05-08 19:41:42 +08:00 |
|
|
|
0d55213101
|
feat: display NPU on dashboard metrics
|
2026-05-08 19:39:02 +08:00 |
|
|
|
4aab7135bc
|
fix: correct label for today alarm stat
|
2026-05-08 19:35:26 +08:00 |
|
|
|
ecb5a08d2d
|
feat: today alarm count on dashboard
|
2026-05-08 19:32:14 +08:00 |
|
|
|
12276a7acb
|
feat: dashboard device metrics card
|
2026-05-08 19:27:22 +08:00 |
|
|
|
6560eb565c
|
fix: always show attention devices card
|
2026-05-08 13:02:07 +08:00 |
|
|
|
bcd5da575e
|
fix: update dashboard test for new layout
|
2026-05-08 13:00:51 +08:00 |
|
|
|
c7da7c2290
|
feat: dashboard with real-time alarm feed
|
2026-05-08 12:59:44 +08:00 |
|
|
|
8a335b6f73
|
refactor: single loop for import, skip duplicate files and DB records
|
2026-05-08 12:55:04 +08:00 |
|
|
|
f8d1083b2d
|
fix: check duplicate photo in AddPhoto
|
2026-05-08 12:53:06 +08:00 |
|
|
|
f32fc41be3
|
fix: fetch-based photo delete with JSON response
|
2026-05-08 12:47:55 +08:00 |
|
|
|
f14ce9b255
|
fix: skip duplicate photos during import
|
2026-05-08 12:40:37 +08:00 |
|
|
|
291c3a97de
|
fix: clean JS confirm via delPhoto function
|
2026-05-08 12:38:46 +08:00 |
|
|
|
dda5e1ffd7
|
feat: add confirm before deleting photo in edit modal
|
2026-05-08 12:35:56 +08:00 |
|
|
|
cddde87a93
|
fix: capture person in variable to access PhotoIDs in range
|
2026-05-08 12:33:39 +08:00 |
|
|
|
99233e5e7f
|
fix: use .PhotoIDs instead of $.PhotoIDs in range
|
2026-05-08 12:31:35 +08:00 |
|
|
|
cb1ce4deaa
|
feat: real photo delete from DB and disk, pass photo IDs to edit modal
|
2026-05-08 12:29:10 +08:00 |
|
|
|
0751adb564
|
fix: clean rewrite, all JS via data-attrs and forEach
|
2026-05-08 12:23:10 +08:00 |
|
|
|
f16501544e
|
fix: escape quotes properly in modal confirm
|
2026-05-08 12:20:59 +08:00 |
|
|
|
21831af218
|
fix: use double quotes for confirm in edit modal JS string
|
2026-05-08 12:19:00 +08:00 |
|
|
|
a7caf483f9
|
fix: use data attributes for edit button to avoid onclick quoting issues
|
2026-05-08 12:16:41 +08:00 |
|
|
|
d5fee22e7a
|
fix: use HTML entities for quotes in onclick
|
2026-05-08 12:15:07 +08:00 |
|
|
|
f849df4540
|
fix: add confirm before deleting photo in edit modal
|
2026-05-08 12:12:11 +08:00 |
|
|
|
e7181bde7d
|
fix: use requestSubmit to trigger form onsubmit confirm
|
2026-05-08 12:10:53 +08:00 |
|
|
|
226196d90e
|
fix: clean rewrite with span icons, remove important
|
2026-05-08 12:08:35 +08:00 |
|
|
|
93a514b8ac
|
fix: use span instead of button for icon buttons
|
2026-05-08 12:05:36 +08:00 |
|
|
|
c16e9d94c4
|
fix: important on btn-icon sizing to override vendor CSS
|
2026-05-08 12:04:51 +08:00 |
|
|
|
9126bbcf4a
|
refactor: standalone btn-icon class, no btn inheritance
|
2026-05-08 12:02:49 +08:00 |
|
|
|
468abeeec0
|
fix: use important for btn-icon to force override
|
2026-05-08 12:01:33 +08:00 |
|
|
|
0ca2bd6d41
|
fix: use forEach for edit photos, cleaner JS no confirm
|
2026-05-08 11:55:06 +08:00 |
|
|
|
5c76022f58
|
fix: bump CSS cache version
|
2026-05-08 11:49:49 +08:00 |
|
|
|
9093cb39cc
|
fix: btn-icon min-height to 0
|
2026-05-08 11:47:58 +08:00 |
|
|
|
c816a7b99d
|
feat: add .btn-icon CSS class for compact icon buttons
|
2026-05-08 11:43:33 +08:00 |
|
|
|
3025175db5
|
style: zero padding for square icon buttons
|
2026-05-08 11:42:16 +08:00 |
|
|
|
7b56df5043
|
style: square small icon buttons
|
2026-05-08 11:40:27 +08:00 |
|
|
|
f3716e1a7d
|
style: icon buttons inline with name
|
2026-05-08 11:38:35 +08:00 |
|
|
|
b64db6b0f0
|
style: portrait aspect-ratio for face cards
|
2026-05-08 11:35:54 +08:00 |
|
|
|
5cc7396663
|
refactor: modal dialogs for face gallery, unified pattern
|
2026-05-08 11:32:57 +08:00 |
|
|
|
5c8ca581f4
|
chore: remove duplicate header and message from face gallery
|
2026-05-08 11:27:26 +08:00 |
|
|
|
d7bd252044
|
style: inline edit fields, X close button, confirm delete photo
|
2026-05-08 11:25:23 +08:00 |
|
|
|
aacf5c80f6
|
feat: photo count + smart nav button visibility
|
2026-05-08 11:21:58 +08:00 |
|
|
|
77b092d946
|
fix: add /ui prefix to face-photo URLs
|
2026-05-08 11:18:00 +08:00 |
|
|
|
96e94a1519
|
feat: edit modal with photo management for face gallery
|
2026-05-08 11:16:55 +08:00 |
|
|
|
b52db0b434
|
feat: portrait cards, photo storage, edit button for face gallery
|
2026-05-08 11:10:58 +08:00 |
|
|
|
f3ae1ba6f4
|
feat: card layout with photo carousel for face gallery
|
2026-05-08 11:04:12 +08:00 |
|
|
|
1f6d64ce0b
|
refactor: use fullFilename helper in both places
|
2026-05-08 10:57:43 +08:00 |
|
|
|
003d50bcc6
|
refactor: reusable fullFilename and personNameFromPath helpers
|
2026-05-08 10:56:25 +08:00 |
|
|
|
f10ec45590
|
fix: use Content-Disposition for DB registration too
|
2026-05-08 10:53:46 +08:00 |
|
|
|
71d789e69a
|
fix: register persons in app.db, async rebuild face gallery
|
2026-05-08 10:49:24 +08:00 |
|
|
|
d4fe5c8459
|
feat: manage persons in app.db, auto-rebuild face_gallery.db
|
2026-05-08 10:45:35 +08:00 |
|
|
|
c0fa9d0700
|
feat: auto-rebuild face gallery after import/add/delete
|
2026-05-08 10:35:38 +08:00 |
|
|
|
fe2c219db1
|
fix: simplify face gallery build success message
|
2026-05-08 10:29:38 +08:00 |
|
|
|
8d30192f02
|
feat: bundle face gallery tools and models locally
|
2026-05-08 10:23:14 +08:00 |
|
|
|
4cbc629a17
|
fix: register face-gallery build route
|
2026-05-08 10:20:42 +08:00 |
|
|
|
bfb8334379
|
fix: read filename from Content-Disposition header bypassing Go sanitization
|
2026-05-08 10:17:50 +08:00 |
|
|
|
ca6edafbce
|
fix: handle webkitdirectory paths with variable depth
|
2026-05-08 10:15:12 +08:00 |
|
|
|
1b018d1f5d
|
style: increase file button height within input
|
2026-05-08 10:11:25 +08:00 |
|
|
|
42a6063c8b
|
style: file input matches text input completely
|
2026-05-08 10:08:49 +08:00 |
|
|
|
24ddb49346
|
style: file input inherits text input sizing
|
2026-05-08 10:07:20 +08:00 |
|
|
|
6209f513e8
|
style: match file input button to .btn style
|
2026-05-08 10:05:52 +08:00 |
|
|
|
a676b6a3a4
|
style: proper file input styling to match theme
|
2026-05-08 10:04:05 +08:00 |
|
|
|
dfddae13fb
|
style: proper face gallery layout with separated sections
|
2026-05-08 10:01:08 +08:00 |
|
|
|
981731e2ce
|
feat: bulk import photos into face gallery
|
2026-05-08 09:58:22 +08:00 |
|
|
|
c65da1299e
|
feat: face gallery with photo upload and rebuild support
|
2026-05-08 09:50:56 +08:00 |
|
|
|
c77391e5c5
|
feat: face gallery management page with person CRUD
|
2026-05-08 09:42:32 +08:00 |
|
|
|
0c89dced36
|
chore: final cleanup for video monitoring
|
2026-05-07 15:34:25 +08:00 |
|
|
|
d804324e67
|
fix: correct proxy URL path in monitor page
|
2026-05-07 15:33:32 +08:00 |
|
|
|
f5df6b6da0
|
fix: use unit name for HLS path, matching graph name
|
2026-05-07 15:19:11 +08:00 |
|
|
|
d730413cba
|
feat: proxy HLS through backend to eliminate CORS issues
|
2026-05-07 15:03:52 +08:00 |
|
|
|
3930f014df
|
feat: use hls.js for HLS playback
|
2026-05-07 14:59:31 +08:00 |
|
|
|
cbc5f90b84
|
fix: use video tag with HLS URL, add open-in-new-window link
|
2026-05-07 14:43:17 +08:00 |
|
|
|
531581eb04
|
fix: use iframe hls_player for video wall
|
2026-05-07 14:41:22 +08:00 |
|
|
|
35726388ab
|
feat: auto-load all device channels as video wall
|
2026-05-07 14:26:06 +08:00 |
|
|
|
3a77449b4f
|
fix: show device list directly on monitor page
|
2026-05-07 14:23:14 +08:00 |
|