feat(voice-client): 双层配置持久化、精简手术号 UI 与 WS/服务端排查日志

- machine_config:系统级 + 用户级 voice_client.json 合并,界面失焦保存至用户目录
- 移除「当前手术号」表单项与占位文案;指派后仅在窗口标题显示手术号
- WebSocket 连接日志附带绑定/开录路径排查说明
- 开录未推送时服务端 WARNING(无站点绑定或 camera_ids 不匹配)
- 测试、README、.env.example 同步

Made-with: Cursor
This commit is contained in:
Kevin
2026-04-27 11:45:11 +08:00
parent 6b3adb4ad8
commit 9941e0d131
8 changed files with 352 additions and 53 deletions

View File

@@ -40,9 +40,20 @@ uv run --group voice-client voice-confirmation-client
**术间 / 摄像头 / 语音终端对应关系**只在服务端 `**OR_SITE_CONFIG_JSON_FILE`** 里维护一份(`voice_or_room_bindings`);桌面程序不读该文件。
本机要做的只有两件事:**服务端 Base URL**,以及 **本机语音终端 ID**(须等于 JSON 里某条 `voice_terminal_id`)。**手术号不在客户端输入**:勾选 **启用服务端自动指派** 后,开录/停录仅通过 **WebSocket** `voice_assignment` 下发(断线后自动重连,不用 HTTP 轮询);界面只读展示当前手术号;停录后自动停止。可用 **停止监控(本机)** 做本地紧急中断。
本机要做的只有两件事:**服务端 Base URL**,以及 **本机语音终端 ID**(须等于 JSON 里某条 `voice_terminal_id`)。**手术号不在客户端输入**:勾选 **启用服务端自动指派** 后,开录/停录仅通过 **WebSocket** `voice_assignment` 下发(断线后自动重连,不用 HTTP 轮询);当前手术号在**窗口标题**中显示;停录后自动停止。可用 **停止监控(本机)** 做本地紧急中断。
可选:用环境变量 `**VOICE_TERMINAL_ID`** 预填界面里的「本机语音终端 ID」仅客户端进程使用**不要**写进监控服务的 `.env`)。
### 配置文件(系统级 + 用户级)
字段均为 **UTF-8 JSON**`voice_terminal_id``http_base_url`,均可选)。启动时 **合并** 两层配置:**用户级覆盖系统级** 同名字段。
| 层级 | 用途 | 默认路径 |
|------|------|----------|
| **系统级** | 运维装机下发(只读亦可) | **Windows** `%ProgramData%\OperationRoomMonitor\voice_client.json`**macOS** `/Library/Application Support/OperationRoomMonitor/voice_client.json`**Linux** `/etc/operation-room-monitor/voice_client.json` |
| **用户级** | 在界面修改「服务端 Base URL」或「本机语音终端 ID」并 **离开输入框** 后自动保存 | **Windows** `%LOCALAPPDATA%\OperationRoomMonitor\voice_client.json`**macOS** `~/Library/Application Support/OperationRoomMonitor/voice_client.json`**Linux** `~/.config/operation-room-monitor/voice_client.json` |
测试或定制安装可用环境变量 **`VOICE_CLIENT_MACHINE_CONFIG_FILE`**、**`VOICE_CLIENT_USER_CONFIG_FILE`** 分别覆盖上述两个路径。
示例见 `voice_confirmation_client/resources/voice_client.sample.json`(通常用作系统级模板)。
## 日志loguru