💄 Better rewind

This commit is contained in:
2025-12-27 14:35:27 +08:00
parent 1c8d9de44e
commit b733b62e6d
2 changed files with 950 additions and 529 deletions

View File

@@ -5,9 +5,10 @@
</main>
<footer
class="backdrop-blur-2xl flex items-center h-12 px-4 sticky bottom-0 border-t border-t-gray-50 border-t-opacity-10"
class="backdrop-blur-2xl flex items-center h-12 px-4 sticky bottom-0 border-t border-t-gray-100/50"
>
<div class="container mx-auto flex items-center justify-between">
<nuxt-link to="/">
<img
:src="Icon"
alt="Cloudy Lamb"
@@ -15,6 +16,7 @@
width="24"
class="mr-2"
/>
</nuxt-link>
<p class="text-sm">Solar Network</p>
</div>
</footer>

View File

@@ -32,7 +32,7 @@
<!-- Main Content -->
<div v-else-if="rewindData" id="intro" class="mx-auto">
<!-- Header Section -->
<div class="header text-center mb-8 min-h-compact-layout flex flex-col justify-center">
<div class="header text-center mb-8 min-h-compact-layout flex flex-col justify-center relative">
<img :src="CloudyRewind" class="w-36 h-36 mx-auto" />
<h1 class="text-4xl font-bold mb-1">Solar Network 年度回顾</h1>
<n-tooltip placement="bottom">
@@ -43,6 +43,10 @@
</template>
数据范围 2024/12/26 - 2025/12/25
</n-tooltip>
<div class="scroll-hint absolute bottom-10 left-1/2 -translate-x-1/2">
<p class="text-sm opacity-60 mb-2">向下滚动以开始</p>
<n-icon :component="ArrowDown" class="animate-bounce w-6 h-6 text-gray-500 mx-auto" />
</div>
</div>
<!-- Scroll-based Sections -->
@@ -52,7 +56,7 @@
id="activity"
class="scroll-section min-h-compact-layout flex items-center justify-center"
>
<n-card class="w-full max-w-4xl shadow-xl">
<n-card class="w-full max-w-4xl shadow-xl border-l-4 border-blue-600">
<template #header>
<div class="flex items-center gap-3">
<n-icon
@@ -60,10 +64,20 @@
:component="CalendarDaysIcon"
class="text-blue-600"
/>
<h2 class="text-2xl font-bold">活动数据</h2>
<h2 class="text-2xl font-bold">你的数字足迹</h2>
<p class="text-sm opacity-60 -mt-2">看看过去一年里你在 Solar Network 的点点滴滴</p>
</div>
</template>
<div class="floating-emoji absolute -top-4 -left-4 text-5xl z-10"
style="animation: float-delayed 8s ease-in-out infinite;">📅
</div>
<div class="floating-emoji absolute bottom-4 right-8 text-4xl z-10"
style="animation: drift 10s ease-in-out infinite;">
</div>
<div class="floating-emoji absolute top-1/2 -left-8 text-5xl z-10"
style="animation: float 7s ease-in-out infinite 1s;">
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="flex flex-col gap-6">
<n-statistic label="最长连续签到" tabular-nums>
@@ -110,14 +124,31 @@
</n-card>
</div>
<div class="transition-words text-center text-lg opacity-70 py-16">
<div class="text-3xl mb-3">🎯</div>
<p>这一年你的坚持令人敬佩但生活不只有坚持还有</p>
</div>
<!-- Section 2: Games & Social -->
<div
id="lotteries-and-friends"
class="scroll-section min-h-compact-layout flex items-center justify-center"
>
<div class="grid grid-cols-1 xl:grid-cols-2 gap-8 w-full max-w-4xl">
<div class="grid grid-cols-1 xl:grid-cols-2 gap-8 w-full max-w-4xl relative">
<div class="floating-emoji absolute -top-8 -left-4 text-5xl z-10"
style="animation: float 5s ease-in-out infinite;">🎉
</div>
<div class="floating-emoji absolute top-1/3 -right-8 text-4xl z-10"
style="animation: float-delayed 6s ease-in-out infinite 0.5s;">🎲
</div>
<div class="floating-emoji absolute -bottom-4 left-1/4 text-5xl z-10"
style="animation: drift 9s ease-in-out infinite;">🤝
</div>
<div class="floating-emoji absolute top-2/3 -left-6 text-4xl z-10"
style="animation: float 8s ease-in-out infinite 1.5s;">💖
</div>
<n-card
class="w-full bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg"
class="w-full bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg border-l-4 border-purple-600"
>
<template #header>
<div class="flex items-center gap-3">
@@ -174,7 +205,7 @@
</n-card>
<n-card
class="w-full bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg"
class="w-full bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg border-l-4 border-pink-600"
>
<template #header>
<div class="flex items-center gap-3">
@@ -229,13 +260,31 @@
</div>
</div>
<div class="transition-words text-center text-lg opacity-70 py-16">
<div class="text-3xl mb-3">🎨</div>
<p>社交之外你还在用自己的方式创造着价值</p>
</div>
<!-- Section 4: Creator Career Overview -->
<div
id="creator"
class="scroll-section min-h-compact-layout flex items-center justify-center"
>
<div class="relative">
<div class="floating-emoji absolute -top-6 right-1/4 text-5xl z-10"
style="animation: float 6s ease-in-out infinite;">
</div>
<div class="floating-emoji absolute top-1/4 -left-6 text-4xl z-10"
style="animation: float-delayed 7s ease-in-out infinite 0.3s;">🎨
</div>
<div class="floating-emoji absolute bottom-1/3 -right-4 text-5xl z-10"
style="animation: drift 8s ease-in-out infinite;">💡
</div>
<div class="floating-emoji absolute top-2/3 right-1/4 text-4xl z-10"
style="animation: float 9s ease-in-out infinite 1s;">📝
</div>
<n-card
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg"
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg border-l-4 border-green-600"
>
<template #header>
<div class="flex items-center gap-3">
@@ -278,6 +327,18 @@
</n-statistic>
</div>
<n-card embedded class="text-center mb-6">
<div class="text-4xl mb-3"></div>
<div class="text-2xl font-bold mb-1">
{{ getCreatorMessage(rewindData.data.sphere.totalPostCount)
}}
</div>
<div class="text-md opacity-80">
{{ getCreatorDescription(rewindData.data.sphere.totalPostCount, rewindData.data.sphere.totalUpvoteCount)
}}
</div>
</n-card>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<h3 class="font-bold mb-2 flex items-center gap-2">
@@ -326,14 +387,33 @@
</div>
</n-card>
</div>
</div>
<div class="transition-words text-center text-lg opacity-70 py-16">
<div class="text-3xl mb-3">🎨</div>
<p>每一个创作都是你心灵的印记而这些印记汇聚成了什么</p>
</div>
<!-- Section 5: Word Cloud -->
<div
id="top-words"
class="scroll-section min-h-compact-layout flex items-center justify-center"
>
<div class="relative">
<div class="floating-emoji absolute -top-8 left-1/3 text-5xl z-10"
style="animation: float 5s ease-in-out infinite;">
</div>
<div class="floating-emoji absolute top-1/4 -right-6 text-4xl z-10"
style="animation: float-delayed 7s ease-in-out infinite 0.5s;">💬
</div>
<div class="floating-emoji absolute bottom-1/4 -left-4 text-5xl z-10"
style="animation: drift 9s ease-in-out infinite;">💭
</div>
<div class="floating-emoji absolute top-2/3 right-1/3 text-4xl z-10"
style="animation: float 8s ease-in-out infinite 1.2s;">
</div>
<n-card
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg"
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg border-l-4 border-blue-600"
>
<template #header>
<div class="flex items-center gap-3">
@@ -378,14 +458,33 @@
</div>
</n-card>
</div>
</div>
<div class="transition-words text-center text-lg opacity-70 py-16">
<div class="text-3xl mb-3">🔍</div>
<p>除了创作自己的世界你也在探索别人的精彩</p>
</div>
<!-- Section 3: Explore History -->
<div
id="discovery"
class="scroll-section min-h-compact-layout flex items-center justify-center"
>
<div class="relative">
<div class="floating-emoji absolute -top-6 -right-4 text-5xl z-10"
style="animation: float 6s ease-in-out infinite;">🌍
</div>
<div class="floating-emoji absolute top-1/3 -left-6 text-4xl z-10"
style="animation: float-delayed 8s ease-in-out infinite 0.4s;">🔍
</div>
<div class="floating-emoji absolute bottom-1/4 right-1/4 text-5xl z-10"
style="animation: drift 10s ease-in-out infinite;">🎯
</div>
<div class="floating-emoji absolute top-2/3 -right-8 text-4xl z-10"
style="animation: float 7s ease-in-out infinite 1.5s;">📊
</div>
<n-card
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg"
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg border-l-4 border-indigo-600"
>
<template #header>
<div class="flex items-center gap-3">
@@ -447,14 +546,33 @@
</div>
</n-card>
</div>
</div>
<div class="transition-words text-center text-lg opacity-70 py-16">
<div class="text-3xl mb-3">💬</div>
<p>在探索精彩内容的路上你并不孤单因为有</p>
</div>
<!-- Section 4: Chat Summary -->
<div
id="chat"
class="scroll-section min-h-compact-layout flex items-center justify-center"
>
<div class="relative">
<div class="floating-emoji absolute -top-8 left-1/4 text-5xl z-10"
style="animation: float 5s ease-in-out infinite;">💬
</div>
<div class="floating-emoji absolute top-1/4 -right-4 text-4xl z-10"
style="animation: float-delayed 6s ease-in-out infinite 0.6s;">💕
</div>
<div class="floating-emoji absolute bottom-1/3 -left-6 text-5xl z-10"
style="animation: drift 8s ease-in-out infinite;">📞
</div>
<div class="floating-emoji absolute top-2/3 right-1/3 text-4xl z-10"
style="animation: float 7s ease-in-out infinite 1.8s;">🎭
</div>
<n-card
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg"
class="w-full max-w-4xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg border-l-4 border-teal-600"
>
<template #header>
<div class="flex items-center gap-3">
@@ -650,12 +768,31 @@
</div>
</n-card>
</div>
</div>
<div class="transition-words text-center text-lg opacity-70 py-16">
<div class="text-3xl mb-3">🏆</div>
<p>时光飞逝,让我们一起回顾这一年的精彩……</p>
</div>
<!-- Section 6: Summary -->
<div
id="summary"
class="scroll-section min-h-compact-layout flex items-center justify-center"
>
<div class="relative">
<div class="floating-emoji absolute -top-10 left-1/3 text-6xl z-10"
style="animation: float 6s ease-in-out infinite;">🏆
</div>
<div class="floating-emoji absolute top-1/4 -right-6 text-5xl z-10"
style="animation: float-delayed 7s ease-in-out infinite 0.7s;">🎊
</div>
<div class="floating-emoji absolute bottom-1/3 -left-8 text-6xl z-10"
style="animation: drift 9s ease-in-out infinite;">🎆
</div>
<div class="floating-emoji absolute top-1/2 -right-12 text-4xl z-10"
style="animation: float 10s ease-in-out infinite 0.3s;">🌟
</div>
<n-card
class="w-full max-w-7xl bg-white/80 dark:bg-slate-800/80 backdrop-blur-sm shadow-lg"
>
@@ -813,15 +950,30 @@
</div>
</n-card>
</div>
</div>
<div class="transition-words text-center text-lg opacity-70 py-16">
<div class="text-3xl mb-3">✨</div>
<p>新的一年即将开始,让我们带着这些美好的回忆继续前行!</p>
</div>
<div class="min-h-compact-layout flex items-center justify-center ">
<n-card class="w-full max-w-xl">
<h3 class="text-xl font-bold mb-4">📝 分享你的 {{ rewindData.year }} 年</h3>
<p class="opacity-80 mb-4">
<n-card class="w-full max-w-xl relative">
<div class="floating-emoji absolute -top-20 left-10 text-4xl z-10"
style="animation: float 5s ease-in-out infinite;">🎁
</div>
<div class="floating-emoji absolute top-0 -right-20 text-3xl z-10"
style="animation: float-delayed 6s ease-in-out infinite 0.5s;">💌
</div>
<div class="floating-emoji absolute bottom-0 -left-20 text-4xl z-10"
style="animation: drift 8s ease-in-out infinite;">🎊
</div>
<p class="opacity-80 mb-4 text-center">
与朋友分享你在 Solar Network 的精彩旅程!
</p>
<div class="flex gap-3">
<div class="flex gap-3 justify-center">
<n-button
type="primary"
size="large"
@@ -858,7 +1010,8 @@ import {
ShareIcon,
PartyPopperIcon,
PhoneCallIcon,
WebhookIcon
WebhookIcon,
ArrowDown
} from "lucide-vue-next"
import { ref } from "vue"
import type {
@@ -927,6 +1080,39 @@ onMounted(async () => {
}
})
})
// Animate transition words
const transitionWords = gsap.utils.toArray<HTMLElement>(".transition-words")
transitionWords.forEach((transition) => {
gsap.from(transition, {
opacity: 0,
y: 30,
duration: 0.6,
ease: "power2.out",
scrollTrigger: {
trigger: transition,
start: "top 85%",
toggleActions: "play none none none"
}
})
})
// Animate floating emojis
const floatingEmojis = gsap.utils.toArray<HTMLElement>(".floating-emoji")
floatingEmojis.forEach((emoji) => {
gsap.from(emoji, {
opacity: 0,
scale: 0.5,
rotation: -20,
duration: 1,
ease: "elastic.out(1, 0.5)",
scrollTrigger: {
trigger: emoji,
start: "top 90%",
toggleActions: "play none none none"
}
})
})
}
})
@@ -1027,16 +1213,34 @@ const shareOnSocial = () => {
const getStreakMessage = (streak: number): string => {
if (streak >= 365) {
return "年度签到王"
} else if (streak >= 340) {
return "风雨无阻"
} else if (streak >= 300) {
return "签到狂人"
} else if (streak >= 270) {
return "持之以恒"
} else if (streak >= 240) {
return "坚持不懈"
} else if (streak >= 200) {
return "签到达人"
} else if (streak >= 170) {
return "锲而不舍"
} else if (streak >= 140) {
return "日积月累"
} else if (streak >= 100) {
return "签到高手"
} else if (streak >= 70) {
return "勤勉踏实"
} else if (streak >= 50) {
return "签到积极分子"
} else if (streak >= 30) {
return "初露锋芒"
} else if (streak >= 20) {
return "签到新手"
} else if (streak >= 10) {
return "循序渐进"
} else if (streak >= 5) {
return "小试牛刀"
} else {
return "继续签到"
}
@@ -1044,19 +1248,37 @@ const getStreakMessage = (streak: number): string => {
const getStreakDescription = (streak: number): string => {
if (streak >= 365) {
return `连续签到 ${streak} 天,你就是 Solar Network 的签到传奇`
return `连续签到 ${streak} 天,你就是 Solar Network 的签到传奇,风雨无阻,日复一日`
} else if (streak >= 340) {
return `连续签到 ${streak} 天,无论刮风下雨,你从未缺席,这份执着令人动容`
} else if (streak >= 300) {
return `连续签到 ${streak} 天,你的坚持让人佩服`
return `连续签到 ${streak} 天,你的坚持让人佩服,每一天都不曾懈怠`
} else if (streak >= 270) {
return `连续签到 ${streak} 天,持之以恒是你的代名词,每一天的积累都值得`
} else if (streak >= 240) {
return `连续签到 ${streak} 天,坚持不懈的精神让你在 Solar Network 上闪闪发光`
} else if (streak >= 200) {
return `连续签到 ${streak} 天,签到已经成为你的习惯`
return `连续签到 ${streak} 天,签到已经成为你的习惯,融入了生活的节奏`
} else if (streak >= 170) {
return `连续签到 ${streak} 天,锲而不舍的努力,让你的每一步都走得稳健`
} else if (streak >= 140) {
return `连续签到 ${streak} 天,日积月累的坚持,正一点点构筑你的成就`
} else if (streak >= 100) {
return `连续签到 ${streak} 天,你真的很用心在使用 Solar Network`
return `连续签到 ${streak} 天,你真的很用心在使用 Solar Network,这份热情令人感动`
} else if (streak >= 70) {
return `连续签到 ${streak} 天,勤勉踏实的态度,让你的每一天都充满意义`
} else if (streak >= 50) {
return `连续签到 ${streak} 天,继续保持这个好习惯`
return `连续签到 ${streak} 天,继续保持这个好习惯,坚持下去会有惊喜`
} else if (streak >= 30) {
return `连续签到 ${streak} 天,初露锋芒的你,正在养成优秀的习惯`
} else if (streak >= 20) {
return `连续签到 ${streak} 天,开始养成好习惯`
return `连续签到 ${streak} 天,开始养成好习惯,每一天的坚持都值得`
} else if (streak >= 10) {
return `连续签到 ${streak} 天,循序渐进,好习惯就是这样养成的`
} else if (streak >= 5) {
return `连续签到 ${streak} 天,小试牛刀,已经开始你的签到之旅了`
} else {
return `连续签到 ${streak} 天,每天签到让生活更有仪式感`
return `连续签到 ${streak} 天,每天签到让生活更有仪式感,继续加油`
}
}
@@ -1069,16 +1291,26 @@ const getTotalMessages = (data: SnRewind["data"]["sphere"]): number => {
}
const getChatMessage = (totalMessages: number): string => {
if (totalMessages >= 10000) {
if (totalMessages >= 20000) {
return "社交传说"
} else if (totalMessages >= 15000) {
return "话如泉涌"
} else if (totalMessages >= 10000) {
return "社交达人"
} else if (totalMessages >= 7000) {
return "健谈专家"
} else if (totalMessages >= 5000) {
return "聊天狂人"
} else if (totalMessages >= 3000) {
return "健谈达人"
} else if (totalMessages >= 2000) {
return "活跃分子"
} else if (totalMessages >= 1000) {
return "话痨本痨"
} else if (totalMessages >= 500) {
return "健谈人士"
} else if (totalMessages >= 200) {
return "社交新星"
} else if (totalMessages >= 100) {
return "社交新人"
} else {
@@ -1087,31 +1319,49 @@ const getChatMessage = (totalMessages: number): string => {
}
const getChatDescription = (totalMessages: number): string => {
if (totalMessages >= 10000) {
return `发送了 ${totalMessages} 条消息,你就是 Solar Network 的社交传`
if (totalMessages >= 20000) {
return `发送了 ${totalMessages} 条消息,你就是 Solar Network 的社交传说,用文字编织了无数温暖的时刻`
} else if (totalMessages >= 15000) {
return `发送了 ${totalMessages} 条消息,话如泉涌的你在 Solar Network 上留下了深刻的印记`
} else if (totalMessages >= 10000) {
return `发送了 ${totalMessages} 条消息,你就是 Solar Network 的社交传奇,每一次交流都充满温度`
} else if (totalMessages >= 7000) {
return `发送了 ${totalMessages} 条消息,作为健谈专家,你用文字连接着无数朋友`
} else if (totalMessages >= 5000) {
return `发送了 ${totalMessages} 条消息,你的聊天热情无人能及`
return `发送了 ${totalMessages} 条消息,你的聊天热情无人能及,每一条消息都承载着故事`
} else if (totalMessages >= 3000) {
return `发送了 ${totalMessages} 条消息,作为健谈达人,你让每一次对话都变得有意义`
} else if (totalMessages >= 2000) {
return `发送了 ${totalMessages} 条消息,聊天已经成为你的日常`
return `发送了 ${totalMessages} 条消息,聊天已经成为你的日常,融入了你的生活节奏`
} else if (totalMessages >= 1000) {
return `发送了 ${totalMessages} 条消息,你真的很爱在 Solar Network 上聊天`
return `发送了 ${totalMessages} 条消息,你真的很爱在 Solar Network 上聊天,这份热情感染着每个人`
} else if (totalMessages >= 500) {
return `发送了 ${totalMessages} 条消息,继续保持这个交流习惯`
return `发送了 ${totalMessages} 条消息,继续保持这个交流习惯,让友谊在对话中升温`
} else if (totalMessages >= 200) {
return `发送了 ${totalMessages} 条消息,作为社交新星,你正在点亮 Solar Network 的社交圈`
} else if (totalMessages >= 100) {
return `发送了 ${totalMessages} 条消息,开始享受 Solar Network 的社交功能`
return `发送了 ${totalMessages} 条消息,开始享受 Solar Network 的社交功能,每一次交流都是成长`
} else {
return `发送了 ${totalMessages} 条消息,多多交流让社区更精彩`
return `发送了 ${totalMessages} 条消息,多多交流让社区更精彩,期待你的每一次发言`
}
}
// Helper methods for lottery messages
const getLotteryMessage = (winRate: number): string => {
if (winRate >= 0.8) {
if (winRate >= 0.9) {
return "天选之子"
} else if (winRate >= 0.8) {
return "彩票之神"
} else if (winRate >= 0.7) {
return "命运眷顾"
} else if (winRate >= 0.6) {
return "幸运儿"
} else if (winRate >= 0.5) {
return "手气达人"
} else if (winRate >= 0.4) {
return "运气不错"
} else if (winRate >= 0.3) {
return "时来运转"
} else if (winRate >= 0.2) {
return "继续加油"
} else {
@@ -1120,60 +1370,153 @@ const getLotteryMessage = (winRate: number): string => {
}
const getLotteryDescription = (winRate: number): string => {
if (winRate >= 0.8) {
return `胜率 ${(winRate * 100).toFixed(1)}%看来你就是传说中的欧皇`
if (winRate >= 0.9) {
return `胜率 ${(winRate * 100).toFixed(1)}%天选之子!你的运气简直就是神迹`
} else if (winRate >= 0.8) {
return `胜率 ${(winRate * 100).toFixed(1)}%,看来你就是传说中的欧皇,运气站在你这边`
} else if (winRate >= 0.7) {
return `胜率 ${(winRate * 100).toFixed(1)}%,命运眷顾着你,好运常伴左右`
} else if (winRate >= 0.6) {
return `胜率 ${(winRate * 100).toFixed(1)}%,你的运气真的很不错`
return `胜率 ${(winRate * 100).toFixed(1)}%,你的运气真的很不错,让周围的人都羡慕`
} else if (winRate >= 0.5) {
return `胜率 ${(winRate * 100).toFixed(1)}%,作为手气达人,你的每一次尝试都充满可能`
} else if (winRate >= 0.4) {
return `胜率 ${(winRate * 100).toFixed(1)}%,运气还可以,继续保持`
return `胜率 ${(winRate * 100).toFixed(1)}%,运气还可以,继续保持这份期待`
} else if (winRate >= 0.3) {
return `胜率 ${(winRate * 100).toFixed(1)}%,时来运转,说不定下一次就是你`
} else if (winRate >= 0.2) {
return `胜率 ${(winRate * 100).toFixed(1)}%,有时候运气就是这样`
return `胜率 ${(winRate * 100).toFixed(1)}%,有时候运气就是这样,不放弃就有希望`
} else {
return `胜率 ${(winRate * 100).toFixed(1)}%,新的一年希望你能转运`
return `胜率 ${(winRate * 100).toFixed(1)}%,新的一年希望你能转运,好运总会降临`
}
}
// Helper methods for connection messages
const getConnectionMessage = (friends: number, blocked: number): string => {
if (friends > blocked * 2) {
const total = friends + blocked
if (total === 0) {
return "社交初学者"
} else if (friends === 0 && blocked > 0) {
return "独善其身"
} else if (blocked === 0 && friends > 10) {
return "社交之星"
} else if (blocked === 0 && friends > 0) {
return "友善使者"
} else if (friends > blocked * 3) {
return "社交领袖"
} else if (friends > blocked * 2) {
return "社交之星"
} else if (friends > blocked) {
return "友好使者"
} else if (blocked > friends) {
} else if (blocked > friends * 2) {
return "谨慎选择"
} else if (blocked > friends) {
return "选择性社交"
} else {
return "平衡发展"
}
}
const getConnectionDescription = (friends: number, blocked: number): string => {
if (friends > blocked * 2) {
const total = friends + blocked
if (total === 0) {
return `今年专注于自己的世界,社交圈的大门随时为你敞开`
} else if (friends === 0 && blocked > 0) {
return `屏蔽了 ${blocked} 位,你懂得保护自己的心灵空间`
} else if (blocked === 0 && friends > 10) {
return `新增了 ${friends} 位好友,零屏蔽!社交之星的称号非你莫属`
} else if (blocked === 0 && friends > 0) {
return `新增了 ${friends} 位好友,零屏蔽,你的友善感染着所有人`
} else if (friends > blocked * 3) {
return `新增了 ${friends} 位好友,只有 ${blocked} 位屏蔽,你是社交圈的核心人物`
} else if (friends > blocked * 2) {
return `新增了 ${friends} 位好友,只有 ${blocked} 位屏蔽,你的社交圈在不断扩大`
} else if (friends > blocked) {
return `新增了 ${friends} 位好友,${blocked} 位屏蔽,你善于结识新朋友`
} else if (blocked > friends * 2) {
return `新增了 ${friends} 位好友,屏蔽了 ${blocked} 位,你对社交比较谨慎,保护自己很重要`
} else if (blocked > friends) {
return `新增了 ${friends} 位好友,但屏蔽了 ${blocked} 位,你对社交比较谨慎`
return `新增了 ${friends} 位好友,但屏蔽了 ${blocked} 位,选择性社交让你更从容`
} else {
return `新增了 ${friends} 位好友,屏蔽了 ${blocked} 位,你的社交选择很平衡`
return `新增了 ${friends} 位好友,屏蔽了 ${blocked} 位,你的社交选择很平衡,张弛有度`
}
}
// Helper method for creator activity evaluation
const getCreatorMessage = (postCount: number): string => {
if (postCount >= 500) {
return "创作巅峰"
} else if (postCount >= 300) {
return "高产出作者"
} else if (postCount >= 200) {
return "多产作家"
} else if (postCount >= 100) {
return "创作达人"
} else if (postCount >= 50) {
return "活跃创作者"
} else if (postCount >= 20) {
return "潜力新星"
} else if (postCount >= 10) {
return "初出茅庐"
} else if (postCount >= 5) {
return "创作者入门"
} else {
return "静待花开"
}
}
const getCreatorDescription = (postCount: number, upvoteCount: number): string => {
if (postCount >= 500) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,你已经是 Solar Network 的创作巅峰`
} else if (postCount >= 300) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,作为高产出作者,你的勤奋令人钦佩`
} else if (postCount >= 200) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,作为多产作家,你的每一篇都是心血`
} else if (postCount >= 100) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,创作达人的称号你实至名归`
} else if (postCount >= 50) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,作为活跃创作者,你用作品丰富着社区`
} else if (postCount >= 20) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,作为潜力新星,你的未来可期`
} else if (postCount >= 10) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,初出茅庐的你正在开启创作之旅`
} else if (postCount >= 5) {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,创作者的大门已经为你打开`
} else {
return `发布了 ${postCount} 篇帖子,获得 ${upvoteCount} 个顶,静待花开,你的每一次创作都珍贵`
}
}
// Helper method for word cloud styling
const getWordCloudClass = (count: number): string => {
if (count >= 1000) {
if (count >= 2000) {
return "text-5xl font-black text-blue-600 animate-pulse-slow"
} else if (count >= 1000) {
return "text-4xl font-bold text-blue-600"
} else if (count >= 750) {
return "text-4xl font-bold text-indigo-600"
} else if (count >= 500) {
return "text-3xl font-semibold text-green-600"
} else if (count >= 350) {
return "text-3xl font-semibold text-teal-600"
} else if (count >= 200) {
return "text-2xl font-medium text-purple-600"
} else if (count >= 150) {
return "text-2xl font-medium text-pink-600"
} else if (count >= 100) {
return "text-xl font-medium text-pink-600"
return "text-xl font-medium text-rose-600"
} else if (count >= 75) {
return "text-xl font-medium text-orange-600"
} else if (count >= 50) {
return "text-lg font-normal text-indigo-600"
} else if (count >= 35) {
return "text-lg font-normal text-cyan-600"
} else if (count >= 20) {
return "text-base font-normal text-teal-600"
} else if (count >= 10) {
return "text-base font-normal text-gray-600"
} else {
return "text-sm font-normal text-gray-600"
return "text-sm font-normal text-gray-500"
}
}
@@ -1194,5 +1537,81 @@ definePageMeta({
</script>
<style scoped>
/* Scoped styles can remain for other elements if needed */
.floating-emoji {
position: absolute;
pointer-events: none;
user-select: none;
}
@keyframes float {
0%, 100% {
transform: translateY(0px) rotate(0deg);
}
50% {
transform: translateY(-20px) rotate(5deg);
}
}
@keyframes float-delayed {
0%, 100% {
transform: translateY(0px) rotate(0deg);
}
50% {
transform: translateY(-15px) rotate(-5deg);
}
}
@keyframes drift {
0% {
transform: translateX(0px) translateY(0px);
}
25% {
transform: translateX(10px) translateY(-10px);
}
50% {
transform: translateX(0px) translateY(-20px);
}
75% {
transform: translateX(-10px) translateY(-10px);
}
100% {
transform: translateX(0px) translateY(0px);
}
}
.transition-words {
animation: fadeInUp 0.8s ease-out;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 0.7;
transform: translateY(0);
}
}
@keyframes pulse-slow {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.8;
}
}
.animate-pulse-slow {
animation: pulse-slow 3s ease-in-out infinite;
}
</style>
<style>
body {
background-image: radial-gradient(circle at top left, rgba(147, 197, 253, 0.1), transparent 30%),
radial-gradient(circle at bottom right, rgba(244, 114, 182, 0.1), transparent 30%);
background-attachment: fixed;
}
</style>