diff --git a/frontend_nuxt/components/GlobalPopups.vue b/frontend_nuxt/components/GlobalPopups.vue index 9992889a9..f5d87b2eb 100644 --- a/frontend_nuxt/components/GlobalPopups.vue +++ b/frontend_nuxt/components/GlobalPopups.vue @@ -8,6 +8,13 @@ /> + + @@ -21,7 +28,10 @@ const config = useRuntimeConfig() const API_BASE_URL = config.public.apiBaseUrl const showMilkTeaPopup = ref(false) +const showInviteCodePopup = ref(false) const milkTeaIcon = ref('') +const inviteCodeIcon = ref('') + const showNotificationPopup = ref(false) const showMedalPopup = ref(false) const newMedals = ref([]) @@ -30,6 +40,9 @@ onMounted(async () => { await checkMilkTeaActivity() if (showMilkTeaPopup.value) return + await checkInviteCodeActivity() + if (showInviteCodePopup.value) return + await checkNotificationSetting() if (showNotificationPopup.value) return @@ -53,12 +66,38 @@ const checkMilkTeaActivity = async () => { // ignore network errors } } + +const checkInviteCodeActivity = async () => { + if (!process.client) return + if (localStorage.getItem('inviteCodeActivityPopupShown')) return + try { + const res = await fetch(`${API_BASE_URL}/api/activities`) + if (res.ok) { + const list = await res.json() + const a = list.find((i) => i.type === 'INVITE_POINTS' && !i.ended) + if (a) { + inviteCodeIcon.value = a.icon + showInviteCodePopup.value = true + } + } + } catch (e) { + // ignore network errors + } +} + +const closeInviteCodePopup = () => { + if (!process.client) return + localStorage.setItem('inviteCodeActivityPopupShown', 'true') + showInviteCodePopup.value = false +} + const closeMilkTeaPopup = () => { if (!process.client) return localStorage.setItem('milkTeaActivityPopupShown', 'true') showMilkTeaPopup.value = false checkNotificationSetting() } + const checkNotificationSetting = async () => { if (!process.client) return if (!authState.loggedIn) return diff --git a/frontend_nuxt/components/InviteCodeActivityComponent.vue b/frontend_nuxt/components/InviteCodeActivityComponent.vue index 9fef7cfbc..bdc778a70 100644 --- a/frontend_nuxt/components/InviteCodeActivityComponent.vue +++ b/frontend_nuxt/components/InviteCodeActivityComponent.vue @@ -6,11 +6,11 @@ 邀请规则说明
-

邀请好友注册并登录,每次可以获得500积分

+

⚠️邀请好友注册并登录,每次可以获得500积分🎉🎉🎉

邀请链接的有效期为1个月

每一个邀请链接的邀请人数上限为3人

通过邀请链接注册,无需注册审核

-

每人每天仅能生产3个邀请链接

+

每人每天仅能生产1个邀请链接

diff --git a/frontend_nuxt/pages/activities.vue b/frontend_nuxt/pages/activities.vue index 79c93db53..5f0180334 100644 --- a/frontend_nuxt/pages/activities.vue +++ b/frontend_nuxt/pages/activities.vue @@ -145,7 +145,7 @@ onMounted(async () => { } .activity-card-normal-right { - width: calc(100% - 150px); + width: 100%; } @media screen and (max-width: 768px) {