From ad58d2220e2d030d56a9922f201a5f3636b2ef8f Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 2 Jun 2026 22:48:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=A1=A5=E4=B8=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=9F=BA=E7=A1=80=E7=89=88=E6=9C=AC=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加基础版本下拉选择器,仅在补丁更新类型时显示 - 添加应用和更新类型的 watch 监听,自动获取全量版本列表 - 提交时传递 base_version_id 参数 - 添加调试日志便于排查问题 Co-Authored-By: Claude Opus 4.8 --- backend/internal/router/admin/versions.go | 61 ++++++++----- frontend/src/pages/admin/versions/create.vue | 95 +++++++++++++++++++- frontend/src/plugins/i18n/en.json | 4 +- frontend/src/plugins/i18n/zh.json | 4 +- 4 files changed, 133 insertions(+), 31 deletions(-) diff --git a/backend/internal/router/admin/versions.go b/backend/internal/router/admin/versions.go index 7083ce9..92c5801 100644 --- a/backend/internal/router/admin/versions.go +++ b/backend/internal/router/admin/versions.go @@ -272,6 +272,7 @@ type CreateVersionRequest struct { CustomDownloadURL string `json:"custom_download_url"` Description string `json:"description"` Changelog string `json:"changelog"` + BaseVersionID *uint `json:"base_version_id"` } func handleCreateVersionGlobal(c *gin.Context) { @@ -360,36 +361,47 @@ func handleCreateVersionGlobal(c *gin.Context) { } } else if version.UpdateType == "patch" { // 补丁包:需要找到基础全量包并合并 - var lastFullVersion model.Version - if err := database.DB.Where("application_id = ? AND update_type = ?", req.ApplicationID, "full"). - Order("id DESC").First(&lastFullVersion).Error; err == nil { - version.BaseVersionID = &lastFullVersion.ID + var baseVersion model.Version - // 获取基础版本的全量包路径,如果没有则使用 FilePath - baseFullPackagePath := lastFullVersion.FullPackagePath - if baseFullPackagePath == "" { - baseFullPackagePath = lastFullVersion.FilePath - } - - // 合并生成新的全量包 - fullPkgPath, fullPkgSize, fullPkgHash, err := MergePatchWithFullPackage( - baseFullPackagePath, - req.FilePath, - req.ApplicationID, - ) - if err != nil { - log.Printf("[ERROR] Failed to merge patch with full package: %v\n", err) - response.Error(c, 500, "合并补丁包失败: "+err.Error()) + // 优先使用传入的 base_version_id + if req.BaseVersionID != nil { + if err := database.DB.Where("id = ? AND application_id = ? AND update_type = ?", + *req.BaseVersionID, req.ApplicationID, "full").First(&baseVersion).Error; err != nil { + response.Error(c, 400, "指定的基础版本不存在或不是全量版本") return } - - version.FullPackagePath = fullPkgPath - version.FullPackageSize = fullPkgSize - version.FullPackageHash = fullPkgHash } else { - response.Error(c, 400, "找不到基础全量包,无法创建补丁版本") + // 未指定基础版本,使用最新的全量版本 + if err := database.DB.Where("application_id = ? AND update_type = ?", req.ApplicationID, "full"). + Order("id DESC").First(&baseVersion).Error; err != nil { + response.Error(c, 400, "找不到基础全量包,无法创建补丁版本") + return + } + } + + version.BaseVersionID = &baseVersion.ID + + // 获取基础版本的全量包路径,如果没有则使用 FilePath + baseFullPackagePath := baseVersion.FullPackagePath + if baseFullPackagePath == "" { + baseFullPackagePath = baseVersion.FilePath + } + + // 合并生成新的全量包 + fullPkgPath, fullPkgSize, fullPkgHash, err := MergePatchWithFullPackage( + baseFullPackagePath, + req.FilePath, + req.ApplicationID, + ) + if err != nil { + log.Printf("[ERROR] Failed to merge patch with full package: %v\n", err) + response.Error(c, 500, "合并补丁包失败: "+err.Error()) return } + + version.FullPackagePath = fullPkgPath + version.FullPackageSize = fullPkgSize + version.FullPackageHash = fullPkgHash } if err := database.DB.Create(&version).Error; err != nil { @@ -425,6 +437,7 @@ type UpdateVersionRequest struct { CustomDownloadURL string `json:"custom_download_url"` Description string `json:"description"` Changelog string `json:"changelog"` + BaseVersionID *uint `json:"base_version_id"` } func handleUpdateVersionGlobal(c *gin.Context) { diff --git a/frontend/src/pages/admin/versions/create.vue b/frontend/src/pages/admin/versions/create.vue index af36cc7..6d601a4 100644 --- a/frontend/src/pages/admin/versions/create.vue +++ b/frontend/src/pages/admin/versions/create.vue @@ -1,6 +1,6 @@