Files
zyt/app
2026-08-11 17:43:31 +08:00
..
2026-08-11 17:39:41 +08:00
2026-08-11 17:39:41 +08:00
2026-08-11 09:12:51 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:43:31 +08:00
2026-08-11 17:39:41 +08:00
2026-08-11 17:39:41 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 09:12:51 +08:00
2026-08-11 09:12:51 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:39:41 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:42:53 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:39:41 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:42:53 +08:00
2026-08-10 17:29:05 +08:00
2026-08-10 17:29:05 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:42:53 +08:00
2026-08-10 17:29:05 +08:00
2026-08-11 17:42:53 +08:00

甄养堂医生工作站

一个以 Python + PySide6 编写的跨平台医生桌面端,面向 Windows 10/11 与 macOS 13+。项目按现有 admin 源码的真实接口契约实现,覆盖登录、接诊台、我的处方库、已开处方、患者列表、问诊列表和腾讯云视频面诊。

当前版本提供完整的演示数据模式,便于在没有后端账号或腾讯云配置时验收界面与流程。切换到生产模式后,数据与权限均由现有后端返回。

一键运行与一键打包

Windows 直接在项目根目录双击:

  • 一键运行_医生工作站.bat:优先启动现有成品;没有成品时自动使用 uv 准备源码环境并运行。
  • 一键打包_医生工作站.bat:自动同步锁定的 Python/Node 依赖,检查冻结 QtWebEngine/QtMultimedia 文件,执行应用与媒体离屏冒烟验证,最后生成 dist/DoctorWorkstation-Windows-x64-<版本>.zip 和 SHA-256 文件。

英文稳定别名分别是 Run_DoctorWorkstation.batBuild_DoctorWorkstation.bat。分发 ZIP 解压后,可直接双击其中的 Start_DoctorWorkstation.bat

macOS 在 Finder 中双击:

  • 一键运行.command:优先打开现有 DoctorWorkstation.app,否则自动准备源码环境并运行。
  • 一键打包.command:构建、QtWebEngine/QtMultimedia 文件门禁、签名检查和两项冻结冒烟验证后,生成 .app、可分发 ZIP 及 SHA-256 文件。

Windows 打包机需预先安装 uv 与 Node.js 20+;脚本会自动处理项目虚拟环境和锁定依赖。首次打包需要联网下载依赖,之后会复用本机缓存。macOS 发布源码中的根 .command 与操作型 scripts/*.sh 必须以 Git mode 100755 跟踪;源码压缩包在传输中丢失权限时,可在项目目录执行一次 chmod +x *.command scripts/*.sh。若 Gatekeeper 拦截未签名内部测试版,请使用右键“打开”。

已实现范围

  • 账号密码登录、token 会话、记住账号(不保存密码)和退出登录。
  • 登录后读取 /adminapi/auth.admin/mySelf,按 permissions 动态控制页面和操作按钮;* 超级权限兼容现有后台。
  • 接诊台:今日待接诊/已过号、患者详情、医生备注、通知医助、完成接诊、发起视频面诊。
  • 挂号列表:对齐管理端 tcm/appointment/list,支持状态 Tab、日期/确认/部门筛选、通话、完成、开方与取消挂号。
  • 我的处方库:主方/辅方与公开范围筛选,药材动态编辑,模板所有权和增删改权限。
  • 已开处方:处方号/患者/审核状态筛选、状态展示和只读详情。
  • 患者列表:复用 /firstvisit.myPatient/lists 的服务端数据范围,不在客户端伪造医生或部门过滤。
  • 问诊列表:对齐管理端 tcm/diagnosis,支持诊单筛选、预约、开方、指派、日常记录与只读详情。
  • 腾讯视频:沿用现有项目的 @trtc/calls-uikit-vue 主链;UserSig 只从后端短时获取,客户端不包含 SDKSecretKey。当前仅支持隔离的 QtWebEngine 内嵌模式。
  • PyInstaller Windows/macOS 构建脚本、macOS 摄像头/麦克风权限配置与自动化测试。

手动运行

先安装 uv,然后在项目根目录执行:

uv sync --extra dev --extra build
Copy-Item .env.example .env
uv run doctor-workstation

macOS/Linux

uv sync --extra dev --extra build
cp .env.example .env
uv run doctor-workstation

.env.example 默认启用演示模式。演示账号:doctor,密码:doctor123

.env.example 仅作为源码开发/企业部署模板,不会复制进发布 ZIP 或 .app。生产环境请通过受控启动器、设备管理或进程环境注入配置;不要把密码、token、UserSig、TRTC SecretKey 等凭据放进 .env 或发布包。

连接现有后端

.env 调整为:

DOCTOR_API_BASE_URL=https://your-api.example.com
DOCTOR_DEMO_MODE=false
DOCTOR_VERIFY_SSL=true

如果可信内网调试服务器使用自签名证书,可在登录页展开“服务器设置”,临时勾选 “信任自签名证书(仅内网调试)”;点击登录时会自动应用当前设置。该选项会关闭 服务器身份校验,不得用于公网或生产环境。

程序会自动在地址末尾追加 /adminapi。它与现有管理端保持相同约定:

  • 登录:POST /login/account,请求包含 accountpasswordterminal=1
  • 鉴权请求头:token: <登录 token>version: 1.9.4
  • 响应 envelopecode=1 成功、0 业务失败、-1 登录失效、10 需绑定企业微信。
  • 权限与数据范围:完全以后端 /auth.admin/mySelf 返回为准。

环境配置不会保存密码、TRTC SecretKey 或腾讯云长期凭据。登录 token 优先存入系统凭据库;无法使用时仅回退到用户配置目录中的受限文件。

视频伴随页

腾讯云没有官方 Python/PySide6 客户端 SDK。本项目因此采用 Python 业务主程序 + 腾讯官方 Web TUICallKit 伴随页:

Set-Location video_companion
npm ci
npm run build

构建输出位于 video_companion/dist,由桌面端内嵌加载。生产 UserSig 必须由现有 /tcm.diagnosis/getCallSignature 接口签发;不要把 SDKSecretKey 写入 .env 或 JavaScript。

当前仅支持 embedded。在业务后端提供服务端签发、一次性消费的 browser handoff 之前,browser 模式会被明确拒绝,QtWebEngine 不可用时也不会自动打开系统浏览器。这样可以避免后端已记录 startCall、浏览器页面却没有通话票据的“幽灵通话”。

DOCTOR_VIDEO_MODE=embedded
DOCTOR_VIDEO_WEB_URL=https://rtc.example.com/doctor-call

DOCTOR_VIDEO_WEB_URL 仅用于本地 dist 缺失时,在 QtWebEngine 中内嵌加载受信任的 HTTPS 主文档;它不是 browser handoff URL,也不得在 URL 中携带 UserSig 或其他 RTC 凭据。

测试与打包

uv run pytest
uv run ruff check src tests
.\scripts\build_windows.ps1

build_windows.ps1 只生成并验证 onedir;正式一键发布请运行 Build_DoctorWorkstation.bat,它在所有冻结文件/媒体门禁通过后再生成版本 ZIP 与 SHA-256。

macOS 必须在 macOS 机器上构建、签名和公证:

./scripts/build_macos.sh

build_macos.sh 只生成并验证 .app;正式一键发布请双击 一键打包.command(或 package_macos.command),通过相同门禁后再归档并生成 SHA-256。

Windows 与 macOS 的 Qt/媒体权限和签名产物不能交叉编译。首次生产发布前,应按 research/tencent_rtc.md 的准入清单完成摄像头、麦克风、设备插拔、休眠恢复和弱网实测。

工程结构

src/doctor_workstation/
  core/        业务模型、权限、会话与异常
  services/    HTTP 客户端、远程仓库、演示仓库与安全 token 存储
  ui/          PySide6 登录、主框架、页面和对话框
  video/       视频请求规范化、异步生命周期与隔离的内嵌窗口
video_companion/  腾讯 TUICallKit 页面
packaging/        PyInstaller 与 macOS 权限配置
scripts/          Windows/macOS 构建脚本
tests/            不依赖真实后端和腾讯云的自动化测试
research/         admin 源码审计、架构和腾讯 RTC 官方资料研究

详细的接口/字段与权限审计见 research/admin_audit.md