diff --git a/backend/internal/router/admin/versions.go b/backend/internal/router/admin/versions.go index 92c5801..81f173b 100644 --- a/backend/internal/router/admin/versions.go +++ b/backend/internal/router/admin/versions.go @@ -260,19 +260,29 @@ func handleGetVersionByID(c *gin.Context) { } type CreateVersionRequest struct { - ApplicationID uint `json:"application_id"` - Version string `json:"version"` - FilePath string `json:"file_path"` - FileSize int64 `json:"file_size"` - FileHash string `json:"file_hash"` - EntryFile string `json:"entry_file"` - UpdateStrategy string `json:"update_strategy"` - UpdateType string `json:"update_type"` - UpdateMethod string `json:"update_method"` - CustomDownloadURL string `json:"custom_download_url"` - Description string `json:"description"` - Changelog string `json:"changelog"` - BaseVersionID *uint `json:"base_version_id"` + ApplicationID uint `json:"application_id"` + Version string `json:"version"` + FilePath string `json:"file_path"` + FileSize int64 `json:"file_size"` + FileHash string `json:"file_hash"` + EntryFile string `json:"entry_file"` + UpdateStrategy string `json:"update_strategy"` + UpdateType string `json:"update_type"` + UpdateMethod string `json:"update_method"` + CustomDownloadURL string `json:"custom_download_url"` + Description string `json:"description"` + Changelog string `json:"changelog"` + BaseVersionID *uint `json:"base_version_id"` + Files []VersionFileInput `json:"files"` +} + +type VersionFileInput struct { + FilePath string `json:"file_path"` + FileName string `json:"file_name"` + FileSize int64 `json:"file_size"` + FileHash string `json:"file_hash"` + FileType string `json:"file_type"` + IsRequired bool `json:"is_required"` } func handleCreateVersionGlobal(c *gin.Context) { @@ -409,6 +419,25 @@ func handleCreateVersionGlobal(c *gin.Context) { return } + // 保存文件列表 + if len(req.Files) > 0 { + for i, f := range req.Files { + versionFile := model.VersionFile{ + VersionID: version.ID, + FilePath: f.FilePath, + FileName: f.FileName, + FileSize: f.FileSize, + FileHash: f.FileHash, + FileType: f.FileType, + IsRequired: f.IsRequired, + SortOrder: i, + } + if err := database.DB.Create(&versionFile).Error; err != nil { + log.Printf("[WARN] Failed to create version file record: %v\n", err) + } + } + } + userIDPtr := &userID versionIDPtr := &version.ID service.CreateLog(service.LogParams{ @@ -426,18 +455,19 @@ func handleCreateVersionGlobal(c *gin.Context) { } type UpdateVersionRequest struct { - Version string `json:"version"` - FilePath string `json:"file_path"` - FileSize int64 `json:"file_size"` - FileHash string `json:"file_hash"` - EntryFile string `json:"entry_file"` - UpdateStrategy string `json:"update_strategy"` - UpdateType string `json:"update_type"` - UpdateMethod string `json:"update_method"` - CustomDownloadURL string `json:"custom_download_url"` - Description string `json:"description"` - Changelog string `json:"changelog"` - BaseVersionID *uint `json:"base_version_id"` + Version string `json:"version"` + FilePath string `json:"file_path"` + FileSize int64 `json:"file_size"` + FileHash string `json:"file_hash"` + EntryFile string `json:"entry_file"` + UpdateStrategy string `json:"update_strategy"` + UpdateType string `json:"update_type"` + UpdateMethod string `json:"update_method"` + CustomDownloadURL string `json:"custom_download_url"` + Description string `json:"description"` + Changelog string `json:"changelog"` + BaseVersionID *uint `json:"base_version_id"` + Files []VersionFileInput `json:"files"` } func handleUpdateVersionGlobal(c *gin.Context) { @@ -575,6 +605,28 @@ func handleUpdateVersionGlobal(c *gin.Context) { return } + // 更新文件列表 + if len(req.Files) > 0 { + // 删除旧的文件记录 + database.DB.Where("version_id = ?", version.ID).Delete(&model.VersionFile{}) + // 创建新的文件记录 + for i, f := range req.Files { + versionFile := model.VersionFile{ + VersionID: version.ID, + FilePath: f.FilePath, + FileName: f.FileName, + FileSize: f.FileSize, + FileHash: f.FileHash, + FileType: f.FileType, + IsRequired: f.IsRequired, + SortOrder: i, + } + if err := database.DB.Create(&versionFile).Error; err != nil { + log.Printf("[WARN] Failed to create version file record: %v\n", err) + } + } + } + userIDPtr := &userID versionIDPtr := &version.ID service.CreateLog(service.LogParams{ diff --git a/frontend/src/pages/admin/versions/[id].vue b/frontend/src/pages/admin/versions/[id].vue index 312da2c..ef5c8b1 100644 --- a/frontend/src/pages/admin/versions/[id].vue +++ b/frontend/src/pages/admin/versions/[id].vue @@ -287,6 +287,7 @@ async function handleSubmit() { payload.file_path = uploadedData.value.file_path payload.file_size = uploadedData.value.file_size payload.file_hash = uploadedData.value.file_hash + payload.files = uploadedData.value.files || [] } const response = await api.put(`/dev/versions/${versionId.value}`, payload) diff --git a/frontend/src/pages/admin/versions/create.vue b/frontend/src/pages/admin/versions/create.vue index d0319fe..f70a2c5 100644 --- a/frontend/src/pages/admin/versions/create.vue +++ b/frontend/src/pages/admin/versions/create.vue @@ -263,6 +263,7 @@ async function handleSubmit() { file_path: uploadedData.value.file_path, file_size: uploadedData.value.file_size, file_hash: uploadedData.value.file_hash, + files: uploadedData.value.files || [], } // 如果是补丁版本,添加基础版本ID if (formData.value.update_type === 'patch' && formData.value.base_version_id) {