Web（TK_SDK_Web）与 Python（TK_SDK_Python）如何做到「逻辑 + UI」真正一套？

--------------------------------------------------------------------
现状
--------------------------------------------------------------------
- Web：HTML + CSS + JS（Bootstrap），逻辑在 license-core / license-ui-popup。
- 桌面：PySide6 QDialog + 样式表，逻辑在 license_sdk_python.LicenseAuthClient。
二者是「同协议、双实现」，改一边不会自动改另一边。

--------------------------------------------------------------------
推荐：桌面用 QWebEngineView 嵌同一套 Web SDK（单一事实来源）
--------------------------------------------------------------------
1. 依赖：PySide6.QtWebEngineWidgets（安装包体积会增大，需 Chromium 内核）。
2. 用 QWebEngineView 加载与浏览器相同的页面：
   - 开发期：可 loadUrl http://127.0.0.1:5000/tanchuang?software_id=...
   - 发行版：将 TK_SDK_Web 打进 Qt 资源（qrc）或随安装目录释放，用 file://
     或本地轻量 HTTP 提供；注意 ES module 与 file:// 路径策略，必要时用 qrc:/ 或内嵌小型静态服务。
3. Python 侧只做：启动应用、传 software_id、用 QWebChannel 与页面互传「登录成功/关闭」，
   业务逻辑仍以 JS SDK 内 createLicenseCore + init 为准，避免再维护一套 Qt 画界面。

这样「UI + 交互逻辑」只维护 TK_SDK_Web 一份；桌面壳极薄。

--------------------------------------------------------------------
备选（一般不如上面彻底）
--------------------------------------------------------------------
- 设计令牌：仅统一颜色/圆角/间距，仍两套代码，易漂移。
- 跨语言生成 UI：成本高、表达能力受限，不推荐除非有专门工具链。

--------------------------------------------------------------------
折中：本目录一键检测脚本
--------------------------------------------------------------------
运行「一键检测SDK双端不一致.bat」或 python check_sdk_parity.py，
对版本号、HTTP 路径、verify/trial 错误码覆盖、关键 UI 文案、功能差异（如试用按钮）做静态对比。
详见 check_sdk_parity.py 顶部说明。

若不能接受 WebEngine 体积：保持当前双端，发版前跑一遍检测脚本，并配合
「一键预览弹窗样式」子目录中的 PySide 预览与浏览器中的 Web 试点页肉眼看齐。

