diff --git a/app/pages/index.vue b/app/pages/index.vue index 112f793..a71249d 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -173,9 +173,9 @@
loadPackages()) .h-13 { height: 3.25rem; } + +.home-pricing-card::before { + content: ''; + position: absolute; + top: -54px; + right: -52px; + width: 148px; + height: 148px; + border-radius: 999px; + background: transparent; +} + +.home-pricing-card::after { + content: ''; + position: absolute; + right: 28px; + bottom: 22px; + left: 28px; + height: 3px; + border-radius: 999px; + background: transparent; +} + +.home-pricing-card > * { + position: relative; + z-index: 1; +} + +.home-pricing-card.is-featured { + background: + radial-gradient(circle at 82% 10%, rgba(32, 167, 255, 0.28), transparent 32%), + linear-gradient(180deg, #dff2ff 0%, #f3fbff 48%, #ffffff 100%); + box-shadow: + 0 28px 60px rgba(11, 140, 255, 0.22), + 0 0 0 6px rgba(11, 140, 255, 0.1), + inset 0 1px 0 rgba(255, 255, 255, 0.86); +} + +.home-pricing-card.is-featured::before { + background: radial-gradient(circle, rgba(32, 167, 255, 0.3), transparent 68%); +} + +.home-pricing-card.is-featured::after { + background: linear-gradient(90deg, transparent, rgba(11, 140, 255, 0.55), transparent); + box-shadow: 0 0 16px rgba(11, 140, 255, 0.22); +} diff --git a/app/pages/recharge.vue b/app/pages/recharge.vue index cd4b4a7..7e087b0 100644 --- a/app/pages/recharge.vue +++ b/app/pages/recharge.vue @@ -42,23 +42,22 @@ v-for="pkg in packages" :key="pkg.id" type="button" - class="relative flex min-h-[124px] flex-col items-center justify-center gap-2 rounded-2xl border-2 p-4 transition-all" - :class="current && current.id === pkg.id - ? 'border-[var(--c-0b8cff)] bg-[var(--c-f4faff)] shadow-[0_0_0_4px_var(--sh-11-140-255-100)]' - : 'border-transparent bg-[var(--c-f7f9fd)] hover:border-[var(--c-e5edf7)]'" + class="recharge-package relative flex min-h-[124px] flex-col items-center justify-center gap-2 rounded-2xl border-2 p-4 transition-all" + :class="{ 'is-active': current && current.id === pkg.id, 'is-recommended': isRecommendedPackage(pkg) }" @click="selectPackage(pkg)" > {{ pkg.badge }} - {{ pkg.points }}点 - ¥{{ pkg.price_yuan }} - - ¥{{ pkg.old_price_yuan }} + {{ pkg.points }}点 + 日常创作首选 + ¥{{ pkg.price_yuan }} + + ¥{{ pkg.old_price_yuan }} 多送{{ pkg.bonus_percent }}% @@ -244,6 +243,10 @@ function showMsg(msg, color = 'error') { toast.add({ title: msg, color }) } +function isRecommendedPackage(pkg = {}) { + return String(pkg.badge || '').includes('推荐') +} + // ==================== 套餐 & 余额 ==================== async function loadPackages() { loading.value = true @@ -470,3 +473,122 @@ watch(isLogin, async (loggedIn) => { onUnmounted(() => clearInterval(pollingTimer)) + +