Explorar o código

fix: call applyDisplayState for guests so displayStatus/registrationStatus are always populated

ActivityService.detail() previously skipped applyDisplayState() for
unauthenticated users, leaving displayStatus/displayLabel/
registrationStatus as null. This caused the activity detail page to
hide the cover, registration button, and check-in button for all
visitors. Now applyDisplayState() runs for everyone; guests get
default values ('open'/'not_registered') derived purely from activity
time windows.
asus hai 3 meses
pai
achega
e872308215

+ 5 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/ActivityService.java

@@ -128,10 +128,15 @@ public class ActivityService extends ServiceImpl<ActivityMapper, Activity> {
             try { memberLevel = membershipService.getMemberLevel(userId); } catch (Exception e) { /* ignore */ }
         }
         ActivityDTO dto = ActivityDTO.from(activity, isGuest, memberLevel);
+        // applyDisplayState must run for ALL users (including guests) so that
+        // displayStatus / displayLabel / registrationStatus are always populated.
+        // For guests: registrationStatus=null, checkedIn=false → defaults to "open"/"not_registered".
         if (!isGuest) {
             String regStatus = registrationService.getUserRegistrationStatus(activity.getId(), userId);
             boolean checkedIn = hasCheckedIn(activity.getId(), userId);
             applyDisplayState(dto, activity, regStatus, checkedIn);
+        } else {
+            applyDisplayState(dto, activity, null, false);
         }
         return Result.success(dto);
     }

+ 6 - 5
cfc-frontend/pages/index-home/index.vue

@@ -483,15 +483,15 @@ export default {
       }
     },
     actionArticles: function() {
-      if (!this.indexArticles || this.indexArticles.length === 0) return []
+      if (!this.articles || this.articles.length === 0) return []
       var result = []
-      for (var i = 0; i < this.indexArticles.length; i++) {
-        var a = this.indexArticles[i]
+      for (var i = 0; i < this.articles.length; i++) {
+        var a = this.articles[i]
         if (a.relatedDimensions && a.relatedDimensions.indexOf('action') !== -1) {
           result.push(a)
         }
       }
-      if (result.length === 0) return this.indexArticles.slice(0, 5)
+      if (result.length === 0) return this.articles.slice(0, 5)
       return result.slice(0, 5)
     },
     dimList: function() {
@@ -682,7 +682,8 @@ export default {
               views: item.viewCount ? String(item.viewCount) : '0',
               likes: '0',
               date: item.publishedAt ? item.publishedAt.slice(0, 10) : '',
-              relatedDimensions: self.parseRelatedDimensions(item.relatedDimensions)
+              relatedDimensions: self.parseRelatedDimensions(item.relatedDimensions),
+              coverImage: item.coverImage
             }
           })
         }