feat: 首页新增4宫格金刚区(绑卡/预约/入园/常见问题)

- 金刚区位于公告栏下方,4等分flex布局
- SVG图标直接展示,无背景色
- 点击弹出开发中toast
- 统一各区域间距为24rpx

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
jacobxu666
2026-06-25 13:35:56 +08:00
co-authored by Claude
parent f8d5b686c4
commit 94477fb271
6 changed files with 108 additions and 1 deletions
+63 -1
View File
@@ -44,6 +44,19 @@
</view> </view>
</view> </view>
<!-- 金刚区 -->
<view class="quick-grid animate-fade-in-up stagger-2">
<view
v-for="item in quickActions"
:key="item.label"
class="quick-item"
@click="onQuickAction(item)"
>
<image class="quick-icon-img" :src="item.icon" mode="aspectFit" />
<text class="quick-label">{{ item.label }}</text>
</view>
</view>
<!-- 旅游卡 — 大字报风格 --> <!-- 旅游卡 — 大字报风格 -->
<view class="promo-wrap animate-fade-in-up stagger-2"> <view class="promo-wrap animate-fade-in-up stagger-2">
<view class="promo" @click="goCardDetail()"> <view class="promo" @click="goCardDetail()">
@@ -125,6 +138,18 @@ import { ref, computed } from 'vue'
import { scenicSpots } from '../../data/scenic-spots' import { scenicSpots } from '../../data/scenic-spots'
import type { ScenicSpotItem } from '../../data/scenic-spots' import type { ScenicSpotItem } from '../../data/scenic-spots'
/** 金刚区 */
const quickActions = [
{ label: '我要绑卡', icon: '/static/icon/card.svg' },
{ label: '我要预约', icon: '/static/icon/reserve.svg' },
{ label: '我要入园', icon: '/static/icon/check.svg' },
{ label: '常见问题', icon: '/static/icon/faq.svg' },
]
function onQuickAction(item: { label: string }) {
uni.showToast({ title: `${item.label}功能开发中`, icon: 'none' })
}
/** 公告数据(mock,后续接 API) */ /** 公告数据(mock,后续接 API) */
const announcements = ref([ const announcements = ref([
{ id: 1, type: 'important', typeLabel: '重要', content: '赣湘全域旅游年卡限时优惠,工会会员专享¥300/套卡!' }, { id: 1, type: 'important', typeLabel: '重要', content: '赣湘全域旅游年卡限时优惠,工会会员专享¥300/套卡!' },
@@ -320,11 +345,48 @@ function goMore() {
color: $color-muted-foreground; color: $color-muted-foreground;
} }
/* ============================================
Quick actions — 金刚区
============================================ */
.quick-grid {
display: flex;
justify-content: space-between;
margin: $spacing-3;
padding: $spacing-3 0;
background: $color-card;
border-radius: 16rpx;
box-shadow: $shadow-sm;
}
.quick-item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
gap: 12rpx;
transition: transform $transition-fast;
&:active {
transform: scale(0.92);
}
}
.quick-icon-img {
width: 88rpx;
height: 88rpx;
}
.quick-label {
font-size: 24rpx;
color: $color-foreground;
font-weight: $font-weight-medium;
}
/* ============================================ /* ============================================
Promo card — landscape photo hero card Promo card — landscape photo hero card
============================================ */ ============================================ */
.promo-wrap { .promo-wrap {
padding: $spacing-3; padding: 0 $spacing-3 $spacing-3;
} }
.promo { .promo {
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 658 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 612 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 677 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 814 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 608 KiB