diff --git a/frontend/App.vue b/frontend/App.vue index a920dfa..5877788 100644 --- a/frontend/App.vue +++ b/frontend/App.vue @@ -58,11 +58,21 @@ export default { font-display: swap; } + /* 引入 ZaoZiGongFangJianHei-1 字体 */ + @font-face { + font-family: 'JDLTYuanTiJian'; + src: url('/static/fonts/JDLTYuanTiJian.ttf') format('truetype'); + font-weight: normal; + font-style: normal; + font-display: swap; + } + /* 圆体 JDLTYuanTiJian.ttf 在部分 Android WebView 上报 OTS/cmap 解析失败,暂不 @font-face 加载,避免控制台告警与渲染异常 */ /* 全局字体设置 */ body { font-family: + 'JDLTYuanTiJian', -apple-system, BlinkMacSystemFont, 'PingFang SC', diff --git a/frontend/pages/components/BannerTop3.vue b/frontend/pages/components/BannerTop3.vue index 793cff4..21afef3 100644 --- a/frontend/pages/components/BannerTop3.vue +++ b/frontend/pages/components/BannerTop3.vue @@ -110,7 +110,7 @@ defineExpose({ reload: loadTop3 }); position: absolute; inset: 0; width: 100%; - height: 100%; + height: 328rpx; } /* 卡片层 */ @@ -131,20 +131,20 @@ defineExpose({ reload: loadTop3 }); } .card-pos-0 { - left: 50rpx; - top: 40rpx; - transform: rotate(-6deg); - z-index: 3; -} -.card-pos-1 { left: 140rpx; top: -8rpx; transform: rotate(6deg); z-index: 4; } +.card-pos-1 { + left: 50rpx; + top: 40rpx; + transform: rotate(-6deg); + z-index: 3; +} .card-pos-2 { left: 240rpx; - top: 106rpx; + top: 72rpx; transform: rotate(16deg); z-index: 5; } diff --git a/frontend/pages/square/components/BannerCarousel.vue b/frontend/pages/square/components/BannerCarousel.vue index 23ac666..f412f20 100644 --- a/frontend/pages/square/components/BannerCarousel.vue +++ b/frontend/pages/square/components/BannerCarousel.vue @@ -54,7 +54,7 @@ const onTop3DataLoaded = (items) => { position: relative; width: 100%; z-index: 100; - padding: 0 16rpx; + /* padding: 0 16rpx; */ box-sizing: border-box; /* top:16rpx; */ } @@ -69,7 +69,7 @@ const onTop3DataLoaded = (items) => { .banner-activity-img { width: 100%; - height: 328rpx; + height: 296rpx; display: block; border-radius:24rpx; position: relative; diff --git a/frontend/pages/square/components/HotCategoryBlock.vue b/frontend/pages/square/components/HotCategoryBlock.vue index 89952f1..1f04001 100644 --- a/frontend/pages/square/components/HotCategoryBlock.vue +++ b/frontend/pages/square/components/HotCategoryBlock.vue @@ -4,77 +4,54 @@ {{ title }} - - - + + + + - - - + + - - - - - - - - - - - - - - - 刷新 + + + {{ formatCount(item.likes || 0) }} - - 查看更多 - - @@ -140,189 +98,144 @@ defineExpose({ } /* 骨架屏 */ -.grid-skeleton { +.ranking-skeleton { display: flex; - flex-wrap: wrap; - justify-content: space-between; + flex-direction: column; } -.skeleton-card { - width: calc(25% - 12rpx); +.skeleton-item { + display: flex; + align-items: center; margin-bottom: 16rpx; - background: rgba(255, 255, 255, 0.1); - border-radius: 16rpx; - overflow: hidden; } -.skeleton-image { - width: 100%; - height: 320rpx; +.skeleton-rank { + width: 48rpx; + height: 48rpx; + background: #3a3a4a; + border-radius: 8rpx; + margin-right: 16rpx; +} + +.skeleton-cover { + width: 120rpx; + height: 120rpx; background: linear-gradient(90deg, #3a3a4a 25%, #4a4a5a 50%, #3a3a4a 75%); background-size: 200% 100%; + border-radius: 12rpx; + margin-right: 16rpx; animation: shimmer 1.5s infinite; } .skeleton-info { - display: flex; - align-items: center; - padding: 16rpx; -} - -.skeleton-avatar { - width: 40rpx; - height: 40rpx; - border-radius: 50%; - background: #3a3a4a; - margin-right: 8rpx; + flex: 1; } .skeleton-name { - width: 100rpx; - height: 24rpx; + width: 200rpx; + height: 32rpx; background: #3a3a4a; border-radius: 8rpx; } @keyframes shimmer { - 0% { - background-position: 200% 0; - } - 100% { - background-position: -200% 0; - } + 0% { background-position: 200% 0; } + 100% { background-position: -200% 0; } } -/* 内容网格 */ -.items-grid { +/* 榜单列表 */ +.ranking-list { display: flex; - flex-wrap: wrap; - justify-content: space-between; + flex-direction: column; } -.grid-card { - width: calc(25% - 12rpx); +.ranking-item { + display: flex; + align-items: center; margin-bottom: 16rpx; - background: rgba(255, 255, 255, 0.15); - border-radius: 16rpx; - overflow: hidden; - position: relative; -} - -.card-image { - width: 100%; - height: 320rpx; -} - -.card-gradient { - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 120rpx; - background: linear-gradient(to top, rgba(0, 0, 0, 0.6) 0%, transparent 100%); -} - -.card-info { - position: absolute; - bottom: 0; - left: 0; - right: 0; - display: flex; - justify-content: space-between; - align-items: center; + background: rgba(255, 255, 255, 0.1); + border-radius: 12rpx; padding: 16rpx; - box-sizing: border-box; } -.user-info { +.rank-number { + width: 48rpx; + height: 48rpx; display: flex; align-items: center; -} - -.user-avatar { - width: 40rpx; - height: 40rpx; - border-radius: 50%; - margin-right: 8rpx; -} - -.user-name { - font-size: 22rpx; + justify-content: center; + font-size: 24rpx; + font-weight: 600; color: #fff; - max-width: 120rpx; + border-radius: 8rpx; + margin-right: 16rpx; +} + +.rank-number.rank-1 { + background: linear-gradient(135deg, #ff6b6b 0%, #ffa502 100%); +} + +.rank-number.rank-2 { + background: linear-gradient(135deg, #a0a0a0 0%, #c0c0c0 100%); +} + +.rank-number.rank-3 { + background: linear-gradient(135deg, #cd7f32 0%, #e6a86e 100%); +} + +.rank-cover { + width: 120rpx; + height: 120rpx; + border-radius: 12rpx; + margin-right: 16rpx; +} + +.rank-info { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; +} + +.rank-name { + font-size: 28rpx; + color: #fff; + margin-bottom: 8rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.like-info { +.rank-creator { display: flex; align-items: center; } -.like-icon { +.creator-avatar { + width: 32rpx; + height: 32rpx; + border-radius: 50%; + margin-right: 8rpx; +} + +.creator-name { + font-size: 24rpx; + color: rgba(255, 255, 255, 0.7); +} + +.rank-likes { + display: flex; + align-items: center; +} + +.rank-like-icon { width: 24rpx; height: 24rpx; margin-right: 4rpx; } -.like-count { - font-size: 22rpx; - color: #fff; -} - -/* 操作按钮 */ -.block-actions { - display: flex; - justify-content: space-between; - align-items: center; - margin-top: 16rpx; - padding-top: 16rpx; - border-top: 1rpx solid rgba(255, 255, 255, 0.1); -} - -.action-left { - display: flex; - align-items: center; -} - -.action-right { - display: flex; - align-items: center; -} - -.refresh-btn { - display: flex; - align-items: center; -} - -.refresh-icon { - width: 28rpx; - height: 28rpx; - margin-right: 8rpx; -} - -.refresh-icon.spinning { - animation: spin 1s linear infinite; -} - -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -.action-text { +.rank-like-count { font-size: 24rpx; color: rgba(255, 255, 255, 0.8); } - -.arrow { - font-size: 28rpx; - color: rgba(255, 255, 255, 0.8); - margin-left: 4rpx; -} diff --git a/frontend/pages/square/hot-category-more.vue b/frontend/pages/square/hot-category-more.vue index 51c35dc..f103258 100644 --- a/frontend/pages/square/hot-category-more.vue +++ b/frontend/pages/square/hot-category-more.vue @@ -92,7 +92,6 @@