From d1251a93568196584225f19b5407318661a2200e Mon Sep 17 00:00:00 2001 From: Trae AI Date: Sun, 21 Jun 2026 17:27:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=97=B6=E6=81=A2=E5=A4=8D=E8=A2=AB=E5=8F=96=E4=BB=A3=E7=9A=84?= =?UTF-8?q?=E6=97=A7=E7=89=88=E6=9C=AC,=20=E5=9B=9E=E6=BB=9A=E6=97=B6?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=8F=96=E4=BB=A3=E7=89=88=E6=9C=AC=E5=B7=B2?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/router/admin/versions.go | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/backend/internal/router/admin/versions.go b/backend/internal/router/admin/versions.go index eee3cfd..083fe45 100644 --- a/backend/internal/router/admin/versions.go +++ b/backend/internal/router/admin/versions.go @@ -800,6 +800,15 @@ func handleBatchDeleteVersions(c *gin.Context) { return } + // 恢复被删除版本取代的旧版本为 published + database.DB.Model(&model.Version{}). + Where("superseded_by IN ?", req.IDs). + Updates(map[string]interface{}{ + "publish_status": "published", + "superseded_by": nil, + "deprecated_at": nil, + }) + response.Success(c, nil) } @@ -1152,6 +1161,35 @@ func handleRollbackVersion(c *gin.Context) { return } + // 检查取代它的版本是否还存在,如果不存在则直接恢复 + if version.SupersededBy != nil { + var superseder model.Version + if err := database.DB.First(&superseder, *version.SupersededBy).Error; err != nil { + // 取代版本已被删除,直接恢复为 published + version.PublishStatus = "published" + version.SupersededBy = nil + version.DeprecatedAt = nil + database.DB.Save(&version) + + userIDPtr := &userID + versionIDPtr := &version.ID + service.CreateLog(service.LogParams{ + UserID: userIDPtr, + LogType: "version", + Action: "rollback", + Resource: "version", + ResourceID: versionIDPtr, + Details: fmt.Sprintf("回滚版本(取代版本已删除): %s (应用ID: %d)", version.Version, version.ApplicationID), + }) + + response.Success(c, gin.H{ + "id": version.ID, + "publish_status": version.PublishStatus, + }) + return + } + } + now := time.Now() version.PublishStatus = "published" version.SupersededBy = nil