diff --git a/backend/internal/modules/listing/presenter.go b/backend/internal/modules/listing/presenter.go index b394718..aa6efe4 100644 --- a/backend/internal/modules/listing/presenter.go +++ b/backend/internal/modules/listing/presenter.go @@ -306,20 +306,34 @@ func centToYuan(value int64) float64 { func cleanScreenshotURLs(urls []string) []string { cleaned := make([]string, 0, len(urls)) seen := make(map[string]struct{}, len(urls)) - for _, url := range urls { - url = strings.TrimSpace(url) - if url == "" { + for _, fileURL := range urls { + fileURL = normalizeDefaultScreenshotURL(strings.TrimSpace(fileURL)) + if fileURL == "" { continue } - if _, ok := seen[url]; ok { + if _, ok := seen[fileURL]; ok { continue } - seen[url] = struct{}{} - cleaned = append(cleaned, url) + seen[fileURL] = struct{}{} + cleaned = append(cleaned, fileURL) } return cleaned } +// normalizeDefaultScreenshotURL 把历史默认图地址升级到当前版本,避免浏览器继续吃旧 SVG 缓存。 +func normalizeDefaultScreenshotURL(fileURL string) string { + if fileURL == "" { + return "" + } + switch { + case fileURL == "/api/listings/default-upload-screenshot", + strings.HasPrefix(fileURL, "/api/listings/default-upload-screenshot?"): + return defaultUploadScreenshot + default: + return fileURL + } +} + func firstScreenshotURL(urls []string) string { if len(urls) == 0 { return "" diff --git a/backend/internal/modules/listing/service.go b/backend/internal/modules/listing/service.go index 9c24f1d..a07dc06 100644 --- a/backend/internal/modules/listing/service.go +++ b/backend/internal/modules/listing/service.go @@ -47,7 +47,7 @@ const ( defaultFireLevelMin = 38 defaultPublishCooldownMinutes = 5 maxExternalUploadItems = 10 - defaultUploadScreenshot = "/api/listings/default-upload-screenshot" + defaultUploadScreenshot = "/api/listings/default-upload-screenshot?v=webp1" ) type PublishCooldownError struct { diff --git a/frontend/src/features/admin/views/AdminListingReviewView.vue b/frontend/src/features/admin/views/AdminListingReviewView.vue index 893d9dd..e2077ac 100644 --- a/frontend/src/features/admin/views/AdminListingReviewView.vue +++ b/frontend/src/features/admin/views/AdminListingReviewView.vue @@ -36,7 +36,7 @@ interface RiskItem { level: RiskLevel } -const defaultScreenshotURL = '/api/listings/default-upload-screenshot' +const defaultScreenshotURL = '/api/listings/default-upload-screenshot?v=webp1' const rejectReasonOptions = [ '默认截图,需补充真实截图', '账号资产信息不完整', @@ -451,7 +451,7 @@ function hasDefaultScreenshot(row: Listing) { } function isDefaultScreenshot(url: string) { - return url.includes(defaultScreenshotURL) + return url.includes('/api/listings/default-upload-screenshot') } function riskItems(row: Listing): RiskItem[] {