diff --git a/apps/miniapp/src/pages/index/index.vue b/apps/miniapp/src/pages/index/index.vue index 395d096..1c885a3 100644 --- a/apps/miniapp/src/pages/index/index.vue +++ b/apps/miniapp/src/pages/index/index.vue @@ -1,29 +1,26 @@ @@ -398,52 +400,64 @@ onActivated(() => { /* ========== 搜索面板 ========== */ .search-panel { padding: $spacing-xl; + background: linear-gradient(180deg, #f8f9fa 0%, $bg-page 100%); } .search-card { overflow: visible; + border-radius: $radius-lg; } -/* 日期选择器内容 */ +/* 日期选择器 */ .date-picker-content { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: $spacing-sm 0; + gap: $spacing-md; } .date-section { display: flex; flex-direction: column; - gap: 4rpx; + gap: 6rpx; + flex: 1; + + &:last-child { + align-items: flex-end; + } } .date-label { font-size: $font-xs; color: $text-tertiary; + line-height: 1.4; } .date-value { font-size: $font-lg; font-weight: $font-semibold; color: $text-primary; + line-height: 1.3; } -.nights-tag { +.nights-badge { + flex-shrink: 0; font-size: $font-xs; color: $primary-color; - background: $primary-50; - padding: 6rpx $spacing-md; - border-radius: $radius-sm; - font-weight: $font-medium; + background: linear-gradient(135deg, $primary-50 0%, rgba($primary-color, 0.08) 100%); + padding: 8rpx $spacing-md; + border-radius: $radius-round; + font-weight: $font-semibold; + border: 1rpx solid rgba($primary-color, 0.15); } -.button-wrapper { - margin-top: $spacing-md; +.search-button-wrapper { + margin-top: $spacing-lg; } -/* ========== 酒店推荐 ========== */ +/* ========== 推荐区域 ========== */ .recommend-section { flex: 1; display: flex; @@ -456,31 +470,34 @@ onActivated(() => { display: flex; justify-content: space-between; align-items: center; - padding: $spacing-lg 0 $spacing-md; + padding: $spacing-xl 0 $spacing-md; } .section-title { - font-size: $font-lg; - font-weight: $font-semibold; + font-size: $font-xl; + font-weight: $font-bold; color: $text-primary; + letter-spacing: 0.5rpx; } -.section-more { +.section-action { display: flex; align-items: center; - gap: 4rpx; - font-size: $font-sm; - color: $text-secondary; - transition: $transition-color; + gap: 6rpx; + padding: $spacing-xs $spacing-sm; + border-radius: $radius-sm; + transition: $transition-all; &:active { - color: $primary-color; + background: rgba($primary-color, 0.08); + transform: scale(0.98); } } -.more-text { +.action-text { font-size: $font-sm; color: $text-secondary; + font-weight: $font-medium; } /* ========== 商家列表 ========== */ @@ -489,52 +506,91 @@ onActivated(() => { height: 0; } -.list-content { - padding-bottom: $spacing-xl; +.merchant-list-content { + padding-bottom: $spacing-2xl; } /* 骨架屏 */ -.skeleton-merchant { +.skeleton-card { display: flex; gap: $spacing-md; - padding: $spacing-xl; + padding: $spacing-lg; background: $bg-card; - border-radius: $radius-md; + border-radius: $radius-lg; margin-bottom: $spacing-md; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04); } .skeleton-image { width: 200rpx; height: 200rpx; flex-shrink: 0; + border-radius: $radius-md; + background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); + background-size: 200% 100%; + animation: skeleton-loading 1.5s ease-in-out infinite; } -.skeleton-content { +.skeleton-body { flex: 1; display: flex; flex-direction: column; - gap: $spacing-sm; + gap: $spacing-md; + justify-content: center; +} + +.skeleton-title, +.skeleton-text { + height: 32rpx; + border-radius: $radius-sm; + background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); + background-size: 200% 100%; + animation: skeleton-loading 1.5s ease-in-out infinite; } .skeleton-title { - width: 60%; + width: 70%; height: 36rpx; } .skeleton-text { width: 100%; - height: 28rpx; &.short { - width: 80%; + width: 60%; } } -/* 没有更多 */ -.no-more { - text-align: center; +@keyframes skeleton-loading { + 0% { + background-position: 200% 0; + } + 100% { + background-position: -200% 0; + } +} + +/* 加载完成提示 */ +.load-complete { + display: flex; + align-items: center; + justify-content: center; padding: $spacing-2xl 0; + position: relative; + + &::before, + &::after { + content: ''; + flex: 1; + height: 1rpx; + background: linear-gradient(to right, transparent, $border-light, transparent); + } +} + +.complete-text { + padding: 0 $spacing-xl; + font-size: $font-xs; color: $text-placeholder; - font-size: $font-sm; + white-space: nowrap; } diff --git a/apps/miniapp/src/pages/merchant-detail/index.vue b/apps/miniapp/src/pages/merchant-detail/index.vue index 7560373..743c693 100644 --- a/apps/miniapp/src/pages/merchant-detail/index.vue +++ b/apps/miniapp/src/pages/merchant-detail/index.vue @@ -1,272 +1,595 @@ diff --git a/apps/miniapp/src/pages/order-create/index.vue b/apps/miniapp/src/pages/order-create/index.vue index 4082085..67feadf 100644 --- a/apps/miniapp/src/pages/order-create/index.vue +++ b/apps/miniapp/src/pages/order-create/index.vue @@ -1,88 +1,196 @@