| @@ -20,11 +20,12 @@ | |||||
| v-for="item in packages" | v-for="item in packages" | ||||
| :key="item.id" | :key="item.id" | ||||
| class="product" | class="product" | ||||
| :class="{ active: current && current.id === item.id }" | |||||
| :class="{ active: current && current.id === item.id, recommend: isRecommendedPackage(item) }" | |||||
| @click="current = item" | @click="current = item" | ||||
| > | > | ||||
| <text v-if="item.badge" class="badge">{{ item.badge }}</text> | <text v-if="item.badge" class="badge">{{ item.badge }}</text> | ||||
| <text class="points">{{ item.points }}点</text> | <text class="points">{{ item.points }}点</text> | ||||
| <text v-if="isRecommendedPackage(item)" class="recommend-copy">日常创作首选</text> | |||||
| <text class="price">¥{{ item.price_yuan }}</text> | <text class="price">¥{{ item.price_yuan }}</text> | ||||
| <view v-if="item.old_price_yuan" class="offer-row"> | <view v-if="item.old_price_yuan" class="offer-row"> | ||||
| <text class="old-price">¥{{ item.old_price_yuan }}</text> | <text class="old-price">¥{{ item.old_price_yuan }}</text> | ||||
| @@ -80,6 +81,10 @@ const buyText = computed(() => { | |||||
| return `确认充值(${current.value.price_yuan}元)` | return `确认充值(${current.value.price_yuan}元)` | ||||
| }) | }) | ||||
| function isRecommendedPackage(item = {}) { | |||||
| return String(item.badge || '').includes('推荐') | |||||
| } | |||||
| function ensureLogin() { | function ensureLogin() { | ||||
| if (!userStore.isLogin) { | if (!userStore.isLogin) { | ||||
| uni.navigateTo({ url: '/pages/login/login' }) | uni.navigateTo({ url: '/pages/login/login' }) | ||||
| @@ -306,6 +311,7 @@ $muted: #8b95a3; | |||||
| .product { | .product { | ||||
| position: relative; | position: relative; | ||||
| overflow: hidden; | |||||
| min-height: 212rpx; | min-height: 212rpx; | ||||
| padding: 28rpx 16rpx 24rpx; | padding: 28rpx 16rpx 24rpx; | ||||
| border: 4rpx solid transparent; | border: 4rpx solid transparent; | ||||
| @@ -318,10 +324,77 @@ $muted: #8b95a3; | |||||
| color: #1f2733; | color: #1f2733; | ||||
| background: #fff; | background: #fff; | ||||
| box-shadow: 0 20rpx 44rpx rgba(15, 23, 42, 0.06); | 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 { | &.active { | ||||
| border-color: $accent; | 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 { | .badge { | ||||
| position: absolute; | position: absolute; | ||||
| @@ -337,16 +410,39 @@ $muted: #8b95a3; | |||||
| color: $accent; | color: $accent; | ||||
| background: rgba(11, 140, 255, 0.1); | 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 { | .points { | ||||
| margin-top: 36rpx; | |||||
| margin-top: 34rpx; | |||||
| font-size: 40rpx; | font-size: 40rpx; | ||||
| font-weight: 900; | 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 { | .price { | ||||
| font-size: 26rpx; | font-size: 26rpx; | ||||
| font-weight: 800; | font-weight: 800; | ||||
| color: $accent; | color: $accent; | ||||
| } | } | ||||
| &.recommend .price { | |||||
| color: #ffd76a; | |||||
| text-shadow: 0 2rpx 10rpx rgba(216, 154, 34, 0.22); | |||||
| } | |||||
| .offer-row { | .offer-row { | ||||
| display: flex; | display: flex; | ||||
| align-items: center; | align-items: center; | ||||
| @@ -368,6 +464,13 @@ $muted: #8b95a3; | |||||
| font-size: 19rpx; | font-size: 19rpx; | ||||
| font-weight: 900; | 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)); | |||||
| } | |||||
| } | } | ||||
| /* 确认充值 */ | /* 确认充值 */ | ||||