# 变更记录 ## 2026-07-24 ### 许可证签发与管理集成 - 集成许可证签发、登记、查询、下载与撤销管理流程。 - 许可证签发使用 RSA-PSS 签名;私钥仅由操作者本地选择使用,不上传至服务端。 ### 公司与产线管理 - 支持新增公司与产线,并生成由公司编码和产线编码组成的设备 ID。 - 支持在控制台选择公司和产线,作为模型、配置和数据操作的目标范围。 ### Server:部署 PostgreSQL 数据库 - 新增 PostgreSQL 存储实现和数据库迁移脚本。 - 支持通过 `DATABASE_URL` 启用 PostgreSQL,持久化公司、产线、许可证、文件元数据、配置和任务状态。 ### 模型管理 - 支持按产线上传模型文件,并保存模型原始文件名与当前模型名。 - 支持列出和删除指定产线的模型文件及对应元数据。 涉及文件: - `ControlPanel/electron-ui/index.html` - `ControlPanel/electron-ui/renderer.js` - `ControlPanel/electron-main.js` - `ControlPanel/electron-preload.js` - `ControlPanel/license-manager.js` - `server/src/app.js` - `server/src/postgres-store.js` - `server/migrations/001_normalized_schema.sql` ## 2026-07-27 ### ControlPanel:模型操作二次确认 - 模型上传遇到同名文件时,要求操作者确认覆盖,并输入完整文件名后才允许执行覆盖。 - 删除模型前要求操作者确认,并输入完整文件名后才允许永久删除,防止误操作。 ### ControlPanel:JSON 配置云端暂存与下载 - JSON 配置发布由“仅从本地文件读取”调整为可直接在界面输入和编辑。 - 支持将容积测量和系统辨识配置暂存到云端,并支持读取、下载当前云端配置后继续编辑。 ### 稳态压力图绘制优化 - 调整行程 JSON 的稳态压力图片绘制逻辑,使曲线和数据点展示更清晰。 - 在图中标注稳态压力节点,便于核对各行程位置对应的稳定压力结果。 涉及文件: - `ControlPanel/electron-ui/index.html` - `ControlPanel/electron-ui/renderer.js` - `ControlPanel/electron-main.js` - `ControlPanel/electron-preload.js` - `ControlPanel/b-admin.js` - `ControlPanel/plot-json.js` - `server/src/app.js` ## 2026-07-28 ### ControlPanel:完善辨识数据管理 - 新增辨识数据文件列表,支持按当前选择的公司和产线查看已上传的辨识 CSV 与行程 JSON 数据。 - 支持辨识数据文件的预览、下载和永久删除;删除操作会要求二次确认,避免误删。 - 支持模型同名覆盖前的二次确认:操作者必须输入完整文件名后才可覆盖已有模型,降低误覆盖风险。 ### ControlPanel:新增图片放大预览 - 为辨识 CSV 图和行程 JSON 图增加图片放大显示功能。 - 放大预览支持适应窗口、原始比例、放大、缩小和关闭操作,便于检查曲线细节。 涉及文件: - `ControlPanel/electron-ui/index.html` - `ControlPanel/electron-ui/renderer.js` - `ControlPanel/electron-ui/styles.css` - `ControlPanel/electron-main.js` - `ControlPanel/electron-preload.js` - `server/src/app.js` ## 2026-07-30 ### ReinLoop:修复底部连接状态显示 - `ConnectionManager` 的连接状态回调统一发送 `● 已连接`、`● 未连接` 文本。 - 主窗口在设备连接成功、连接失败和主动断开时,直接同步更新右下角状态栏;不再仅依赖连接管理器回调,避免界面持续显示“未连接”。 涉及文件: - `ReinLoop/core/connection_manager.py` - `ReinLoop/ui/main_window.py` ### ControlPanel:增强许可证撤销可靠性 - `callServer()` 现在会在 HTTP 非成功响应时优先解析并展示服务端返回的 `errMsg`,并对非 JSON 响应和无效响应体给出明确报错。 - 新增已验证连接凭证的回退逻辑;许可证列表、详情、撤销和下载操作在界面未携带完整凭证时,会使用当前会话保存的 API 地址和管理令牌,降低撤销因空 Token 或空 API 地址失败的概率。 涉及文件: - `ControlPanel/server-client.js` - `ControlPanel/electron-main.js` ### ControlPanel:新增控制数据管理与下载 - 新增“控制数据”管理页面,按当前选择的公司和产线加载控制数据文件列表。 - 支持查看控制数据文件的元信息与 JSON 内容预览;二进制 `.pkl` 分片文件提示下载后使用 ReinLoop/Python 分析。 - 支持将选中的控制数据文件保存到本地,并支持永久删除对应的服务端文件及元数据。 - 控制数据接口按设备 ID 隔离,并通过 Admin Token 鉴权,避免跨产线访问或操作非控制数据文件。 涉及文件: - `ControlPanel/electron-ui/index.html` - `ControlPanel/electron-ui/renderer.js` - `ControlPanel/electron-main.js` - `ControlPanel/electron-preload.js` - `server/src/app.js` ### Server:完善许可证撤销并完成部署 - `revokeLicense` 现在会去除 `licenseId` 首尾空白,并返回稳定错误码:`ADMIN_TOKEN_INVALID`、`ADMIN_TOKEN_NOT_CONFIGURED`、`LICENSE_ID_REQUIRED`、`LICENSE_NOT_FOUND`。 - 增加撤销审计日志,记录时间、可选请求 ID、许可证 ID、执行结果和错误码,不记录管理令牌。 - 兼容旧撤销请求类型 `revoke_license`、`licenseRevoke`、`revoke` 及字段 `license_id`、`admin_token`。 - 已完成 `npm run check`、完整服务端测试(19 项通过)、运行中服务验证,并重启 `reinloop-server.service` 部署。 涉及文件: - `server/src/app.js` - `server/test/server.test.js` - `server/features.md` ### 文档:合并项目说明 - 将 ReinLoop 客户端、ControlPanel 和 Server 的三份说明合并为根目录 `README.md`。 - 删除已合并的 `B端实现说明.md` 和 `README1.md`;接口定义继续统一维护在 `server/features.md`。 ### 验证 - 已完成修改文件的 Python、JavaScript 语法检查,未发现语法错误。