From 1ee151630dba706f8beada55cd649e990310bd8e Mon Sep 17 00:00:00 2001 From: zerosaturation Date: Tue, 19 May 2026 19:59:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E6=94=B6=E7=9B=8Abug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/social_repository.go | 19 +++++++++++++------ frontend/pages/castlove/success.vue | 4 +++- frontend/pages/profile/myWorks.vue | 2 ++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/backend/services/socialService/repository/social_repository.go b/backend/services/socialService/repository/social_repository.go index 9367475..c22b630 100644 --- a/backend/services/socialService/repository/social_repository.go +++ b/backend/services/socialService/repository/social_repository.go @@ -631,7 +631,7 @@ func (r *socialRepositoryImpl) GetMyLikedAssets(userID, starID int64, page, page if err := r.db.Where("asset_id = ? AND deleted_at IS NULL", item.AssetID). First(&exhibition).Error; err == nil { item.HourlyEarnings = calculateHourlyEarnings(item.LikeCount) - item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, now) + item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, now, exhibition.ExpireAt) } } @@ -664,9 +664,16 @@ func calculateHourlyEarnings(likeCount int32) float64 { // calculateRealtimeEarnings 实时计算展示收益 // 公式:R1 = R0 × T × [100% + Buff(n)] // R0 = 5 水晶/小时,T = 上架时长(小时),Buff(n) 根据点赞数计算 -func calculateRealtimeEarnings(likeCount int32, startTime, now int64) int64 { +// 注意:使用 min(now, expireAt) 确保过期后收益不再增长 +func calculateRealtimeEarnings(likeCount int32, startTime, now, expireAt int64) int64 { + // 计算有效截止时间(展览结束时间 vs 当前时间,取较小值) + endTime := now + if expireAt > 0 && expireAt < now { + endTime = expireAt + } + // 计算上架时长(毫秒转小时) - T := (now - startTime) / 3600000 + T := (endTime - startTime) / 3600000 if T <= 0 { T = 1 // 最少1小时 } @@ -721,7 +728,7 @@ func (r *socialRepositoryImpl) GetMyTodayLikedAssets(userID, starID int64, page, if err := r.db.Where("asset_id = ? AND deleted_at IS NULL AND expire_at > ?", item.AssetID, now.UnixMilli()). First(&exhibition).Error; err == nil { item.HourlyEarnings = calculateHourlyEarnings(item.LikeCount) - item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, now.UnixMilli()) + item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, now.UnixMilli(), exhibition.ExpireAt) } } @@ -782,7 +789,7 @@ func (r *socialRepositoryImpl) GetMyWeekLikedAssets(userID, starID int64, page, if err := r.db.Where("asset_id = ? AND deleted_at IS NULL AND expire_at > ?", item.AssetID, nowMillis). First(&exhibition).Error; err == nil { item.HourlyEarnings = calculateHourlyEarnings(item.LikeCount) - item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, nowMillis) + item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, nowMillis, exhibition.ExpireAt) } } @@ -832,7 +839,7 @@ func (r *socialRepositoryImpl) GetUserLikedAssets(userID, starID int64, page, pa if err := r.db.Where("asset_id = ? AND deleted_at IS NULL AND expire_at > ?", item.AssetID, now). First(&exhibition).Error; err == nil { item.HourlyEarnings = calculateHourlyEarnings(item.LikeCount) - item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, now) + item.Earnings = calculateRealtimeEarnings(item.LikeCount, exhibition.StartTime, now, exhibition.ExpireAt) } } diff --git a/frontend/pages/castlove/success.vue b/frontend/pages/castlove/success.vue index 76fbe81..f2f9d96 100644 --- a/frontend/pages/castlove/success.vue +++ b/frontend/pages/castlove/success.vue @@ -289,7 +289,7 @@ onUnload(() => { flex-direction: column; align-items: center; justify-content: center; - padding: 200rpx 40rpx 100rpx; + padding: 80rpx 40rpx 100rpx; box-sizing: border-box; } @@ -389,6 +389,8 @@ onUnload(() => { display: flex; justify-content: center; animation: fadeIn 1s ease-out 0.6s both; + position: fixed; + bottom: 112rpx; } @keyframes fadeIn { diff --git a/frontend/pages/profile/myWorks.vue b/frontend/pages/profile/myWorks.vue index 8b820a6..943fc73 100644 --- a/frontend/pages/profile/myWorks.vue +++ b/frontend/pages/profile/myWorks.vue @@ -381,7 +381,9 @@ const handleExhibitionCardTap = (item, index) => { // exhibitionWorks.value[index].earnings = data.earnings; // } else { // 如果没有返回收益数据,刷新列表获取最新收益 + await loadExhibitedAssets(); await loadLikedAssets(); + // } uni.showToast({ title: '点赞成功', icon: 'success' });