diff --git a/pages/recharge/recharge.vue b/pages/recharge/recharge.vue
index f21bf07..38de97f 100644
--- a/pages/recharge/recharge.vue
+++ b/pages/recharge/recharge.vue
@@ -20,11 +20,12 @@
v-for="item in packages"
:key="item.id"
class="product"
- :class="{ active: current && current.id === item.id }"
+ :class="{ active: current && current.id === item.id, recommend: isRecommendedPackage(item) }"
@click="current = item"
>
{{ item.badge }}
{{ item.points }}点
+ 日常创作首选
¥{{ item.price_yuan }}
¥{{ item.old_price_yuan }}
@@ -80,6 +81,10 @@ const buyText = computed(() => {
return `确认充值(${current.value.price_yuan}元)`
})
+function isRecommendedPackage(item = {}) {
+ return String(item.badge || '').includes('推荐')
+}
+
function ensureLogin() {
if (!userStore.isLogin) {
uni.navigateTo({ url: '/pages/login/login' })
@@ -306,6 +311,7 @@ $muted: #8b95a3;
.product {
position: relative;
+ overflow: hidden;
min-height: 212rpx;
padding: 28rpx 16rpx 24rpx;
border: 4rpx solid transparent;
@@ -318,10 +324,77 @@ $muted: #8b95a3;
color: #1f2733;
background: #fff;
box-shadow: 0 20rpx 44rpx rgba(15, 23, 42, 0.06);
+ transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: -54rpx;
+ right: -54rpx;
+ width: 136rpx;
+ height: 136rpx;
+ border-radius: 50%;
+ background: transparent;
+ }
+
+ &::after {
+ content: '';
+ position: absolute;
+ left: 20rpx;
+ right: 20rpx;
+ bottom: 14rpx;
+ height: 4rpx;
+ border-radius: 999rpx;
+ background: transparent;
+ }
+
+ .badge,
+ .points,
+ .recommend-copy,
+ .price,
+ .offer-row {
+ position: relative;
+ z-index: 1;
+ }
+
+ &.recommend {
+ border-color: rgba(246, 196, 83, 0.82);
+ color: #fff;
+ background:
+ radial-gradient(circle at 82% 8%, rgba(255, 231, 163, 0.28), transparent 32%),
+ radial-gradient(circle at 8% 92%, rgba(202, 138, 4, 0.18), transparent 36%),
+ linear-gradient(160deg, #1c1917 0%, #111827 52%, #020617 100%);
+ box-shadow:
+ 0 30rpx 72rpx rgba(15, 23, 42, 0.26),
+ 0 0 0 6rpx rgba(246, 196, 83, 0.12);
+ }
+
+ &.recommend::before {
+ background: radial-gradient(circle, rgba(255, 216, 106, 0.32), transparent 68%);
+ }
&.active {
border-color: $accent;
- box-shadow: 0 0 0 8rpx rgba(11, 140, 255, 0.1);
+ background: linear-gradient(180deg, #f4faff 0%, #ffffff 68%);
+ box-shadow:
+ 0 26rpx 56rpx rgba(11, 140, 255, 0.18),
+ 0 0 0 8rpx rgba(11, 140, 255, 0.1);
+ }
+
+ &.recommend.active {
+ border-color: #f6c453;
+ background:
+ radial-gradient(circle at 82% 8%, rgba(255, 231, 163, 0.38), transparent 32%),
+ radial-gradient(circle at 8% 92%, rgba(202, 138, 4, 0.22), transparent 38%),
+ linear-gradient(160deg, #27201a 0%, #111827 50%, #020617 100%);
+ box-shadow:
+ 0 34rpx 78rpx rgba(15, 23, 42, 0.32),
+ 0 0 0 8rpx rgba(246, 196, 83, 0.16),
+ inset 0 2rpx 0 rgba(255, 255, 255, 0.86);
+ }
+ &.recommend.active::after {
+ background: linear-gradient(90deg, transparent, rgba(255, 216, 106, 0.72), transparent);
+ box-shadow: 0 0 18rpx rgba(255, 216, 106, 0.3);
}
.badge {
position: absolute;
@@ -337,16 +410,39 @@ $muted: #8b95a3;
color: $accent;
background: rgba(11, 140, 255, 0.1);
}
+ &.recommend .badge {
+ color: #2a1803;
+ background: linear-gradient(135deg, #fff1b8 0%, #f6c453 50%, #d89a22 100%);
+ box-shadow: 0 10rpx 24rpx rgba(216, 154, 34, 0.32);
+ }
.points {
- margin-top: 36rpx;
+ margin-top: 34rpx;
font-size: 40rpx;
font-weight: 900;
}
+ .recommend-copy {
+ margin-top: -10rpx;
+ font-size: 20rpx;
+ line-height: 1;
+ font-weight: 800;
+ color: #3b8bd8;
+ }
+ &.recommend .points {
+ color: #fff;
+ text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.32);
+ }
+ &.recommend .recommend-copy {
+ color: rgba(255, 220, 138, 0.92);
+ }
.price {
font-size: 26rpx;
font-weight: 800;
color: $accent;
}
+ &.recommend .price {
+ color: #ffd76a;
+ text-shadow: 0 2rpx 10rpx rgba(216, 154, 34, 0.22);
+ }
.offer-row {
display: flex;
align-items: center;
@@ -368,6 +464,13 @@ $muted: #8b95a3;
font-size: 19rpx;
font-weight: 900;
}
+ &.recommend .old-price {
+ color: rgba(255, 255, 255, 0.45);
+ }
+ &.recommend .bonus {
+ color: #7a4a00;
+ background: linear-gradient(135deg, rgba(255, 241, 184, 0.96), rgba(255, 215, 106, 0.96));
+ }
}
/* 确认充值 */