feat: 修改跳转小屋的路由,和修改header的样式

This commit is contained in:
zerosaturation 2026-05-07 17:55:13 +08:00
parent 75893b1f42
commit 958dffce6a
18 changed files with 158 additions and 120 deletions

View File

@ -2,7 +2,7 @@
"name" : "TopFans",
"appid" : "__UNI__F199FF4",
"description" : "",
"versionName" : "1.0.2",
"versionName" : "1.0.3",
"versionCode" : 100,
"transformPx" : false,
/* 5+App */
@ -69,6 +69,12 @@
"apikey" : "l2FgEjJBl96gUsAEQ6nf0asA",
"secretkey" : "1i5Aj8FwL3i11LYPeXMRwRWycictWq2X"
}
},
"push" : {
"unipush" : {
"version" : "2",
"offline" : false
}
}
},
"icons" : {

View File

@ -61,9 +61,12 @@
:src="item.coverUrl || '/static/nft/collection.png'"
mode="aspectFill"
/>
<view class="status-badge" :class="item.display_status === 1 ? 'badge-active' : 'badge-pending'">
<text class="status-text">{{ item.display_status === 1 ? '已展示' : '待展示' }}</text>
</view>
<view v-if="item.display_status === 1" class="status-overlay">
<text class="status-text-center">已展示</text>
</view>
<view v-else class="status-overlay-pending">
<text class="status-text-pending">待展示</text>
</view>
<view class="asset-info">
<text class="asset-name">{{ item.name }}</text>
</view>
@ -89,9 +92,12 @@
:src="item.coverUrl || '/static/nft/collection.png'"
mode="aspectFill"
/>
<view class="status-badge" :class="item.display_status === 1 ? 'badge-active' : 'badge-pending'">
<text class="status-text">{{ item.display_status === 1 ? '已展示' : '待展示' }}</text>
</view>
<view v-if="item.display_status === 1" class="status-overlay">
<text class="status-text-center">已展示</text>
</view>
<view v-else class="status-overlay-pending">
<text class="status-text-pending">待展示</text>
</view>
<view class="asset-info">
<text class="asset-name">{{ item.name }}</text>
</view>
@ -514,25 +520,49 @@ const handleTouchEnd = (e) => {
display: block;
}
.status-badge {
.status-overlay {
position: absolute;
top: 0;
left: 0;
width: 192rpx;
height: 224rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 16rpx;
z-index: 1;
}
.status-text-center {
font-size: 24rpx;
color: #fff;
font-weight: bold;
text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.8);
background: linear-gradient(to bottom right,
#F0E4B1 0%,
#F08399 50%,
#B94E73 100%
);
border-radius: 24rpx;
box-shadow:
0 4rpx 12rpx rgba(255, 143, 158, 0.2),
0 2rpx 6rpx rgba(255, 143, 158, 0.15),
inset 0 2rpx 4rpx rgba(255, 255, 255, 0.4),
inset 0 -2rpx 4rpx rgba(0, 0, 0, 0.05);
padding: 16rpx;
}
.status-overlay-pending {
position: absolute;
top: 8rpx;
right: 8rpx;
background: rgba(0, 0, 0, 0.6);
border-radius: 8rpx;
padding: 4rpx 8rpx;
z-index: 1;
}
.badge-active {
background: linear-gradient(135deg, #FFD700, #FFA500);
box-shadow: 0 0 12rpx rgba(255, 215, 0, 0.6);
}
.badge-pending {
background: rgba(0, 0, 0, 0.6);
}
.status-text {
.status-text-pending {
font-size: 18rpx;
color: #fff;
font-weight: bold;

View File

@ -19,7 +19,7 @@
<swiper class="banner-swiper" :indicator-dots="true" :autoplay="true" :interval="3000" :duration="500"
indicator-color="rgba(255, 255, 255, 0.3)" indicator-active-color="#FF6B9D">
<swiper-item v-for="(banner, index) in bannerList" :key="index" @click="handleBannerClick(banner)">
<image class="banner-image" :src="banner.image_url" mode="aspectFill"></image>
<image class="banner-image" :src="banner.image_url" mode="widthFill"></image>
<view class="banner-overlay">
<text class="banner-title">{{ banner.title }}</text>
</view>
@ -101,13 +101,13 @@ const backButtonTop = computed(() => {
//
const bannerList = ref([
{
image_url: '/static/sucai/image-01.png',
image_url: '/static/sucai/image-05.png',
title: '这河非遇美学宇宙联名',
link_type: 'activity',
link_value: '1'
},
{
image_url: '/static/sucai/image-02.png',
image_url: '/static/sucai/image-06.png',
title: '限时创作活动',
link_type: 'activity',
link_value: '2'
@ -125,7 +125,7 @@ const mainTabs = ref([
{
name: '星卡',
type: 'star_card',
icon: '/static/sucai/image-04.png'
icon: '/static/sucai/image-03.png'
},
{
name: '吧唧',

View File

@ -412,7 +412,7 @@ defineExpose({
left: 0;
right: 0;
width: 100%;
height: 80rpx;
height: 144rpx;
display: flex;
align-items: center;
justify-content: space-between;
@ -505,7 +505,7 @@ defineExpose({
.task-text-label {
font-size: 16rpx;
color: #fff;
text-shadow: 1rpx 1rpx 2rpx rgba(255, 255, 255, 0.5);
text-shadow: 1rpx 1rpx 2rpx rgba(0, 0, 0, 0.9);
margin-top: 32rpx;
}
@ -588,7 +588,7 @@ defineExpose({
color: #FFFFFF;
margin-bottom: 2rpx;
margin-left: 28rpx;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.5);
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.9);
}
/* --- 下层:渐变背景 --- */

View File

@ -113,8 +113,8 @@ const isSharedBgTab = computed(() => [0, 1, 2, 3].includes(activeSubTab.value));
flex-direction: row;
justify-content: space-around;
align-items: center;
padding-top: 160rpx;
padding-bottom: 0;
padding-top: 256rpx;
padding-bottom: 48rpx;
padding-left: 20rpx;
padding-right: 20rpx;
height: 240rpx;

View File

@ -12,7 +12,7 @@
:class="{ active: currentType === 'regular' }"
@click="switchType('regular')"
>
<text></text>
<text></text>
</view>
<view
class="tab-item"
@ -43,7 +43,7 @@
<!-- 藏品列表 - 可滚动区域 -->
<scroll-view v-else class="nft-scroll-view" scroll-y :show-scrollbar="false">
<view class="nft-list-container">
<!-- 创藏品 category > grade 分组 -->
<!-- 创藏品 category > grade 分组 -->
<view v-if="currentType === 'regular'">
<view v-for="(group, gIndex) in regularGroups" :key="group.category" class="nft-group">
<!-- 分组标题category_name -->

View File

@ -415,6 +415,7 @@ onShow(() => {
.nav-settings-text {
font-size: 24rpx;
color: #fff;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.8);
font-weight: 400;
}
@ -463,6 +464,7 @@ onShow(() => {
z-index: 1;
font-size: 26rpx;
color: #fff;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.9);
font-weight: 600;
padding: 0 28rpx;
}
@ -625,7 +627,7 @@ onShow(() => {
display: flex;
align-items: center;
justify-content: center;
padding: 80rpx 0;
/* padding: 80rpx 0; */
gap: 24rpx;
}
@ -790,9 +792,10 @@ onShow(() => {
.liked-status {
font-size: 28rpx;
color: #fff;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.7);
font-weight: 600;
white-space: nowrap;
overflow: hidden;
/* overflow: hidden; */
text-overflow: ellipsis;
margin-bottom: 16rpx;
}
@ -806,6 +809,7 @@ onShow(() => {
.liked-score {
font-size: 26rpx;
color: #fff;
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.7);
font-weight: 700;
margin-right: 8rpx;
}

View File

@ -55,7 +55,7 @@
<view class="section-bg" style="padding-top: 0;">
<view class="section-title">我的资产</view>
<view class="assets-grid">
<view class="asset-card" @tap="handleAssetClick('exhibition')">
<view class="asset-card" @tap="handleAssetClick('myWorks')">
<image class="asset-icon" src="/static/icon/square.png" mode="aspectFit"></image>
<text class="asset-text">我的展馆</text>
<!-- <text class="arrow"></text> -->
@ -294,7 +294,7 @@ const showOldPassword = ref(false);
//
const showGuideListModal = ref(false);
const guideClaimableCount = computed(() => getClaimableRewardCount());
// const guideClaimableCount = computed(() => getClaimableRewardCount());
const showNewPassword = ref(false);
//
@ -450,10 +450,10 @@ const copyAddress = () => {
//
const handleAssetClick = (type) => {
if (type === 'exhibition') {
if (type === 'myWorks') {
//
uni.navigateTo({
url: '/pages/exhibition/exhibition'
url: '/pages/profile/myWorks'
});
} else if (type === 'starbook') {
//

View File

@ -15,7 +15,7 @@
mode="scaleToFill"
/>
<!-- 左侧图标绝对浮动覆盖背景左侧色块不影响文字布局 -->
<view class="tab-left" :class="{ 'tab-left-first': index === 0 }">
<view class="tab-left" :class="{ 'tab-left-first': index === 2 }">
<text v-if="tab.emoji" class="tab-emoji">{{ tab.emoji }}</text>
<image
v-else
@ -33,16 +33,16 @@
<script setup>
defineProps({
modelValue: { type: String, default: 'new' }
modelValue: { type: String, default: 'random' }
})
defineEmits(['update:modelValue'])
const tabs = [
{ key: 'hot', label: '人气王者', emoji: null, icon: '/static/square/rementubiao.png', iconWidth: 104, iconHeight: 104 },
{ key: 'new', label: '新鲜上架', emoji: null, icon: '/static/square/baji.png', iconWidth: 80, iconHeight: 80 },
{ key: 'potential', label: '潜力之星', emoji: null, icon: '/static/square/xingka.png', iconWidth: 80, iconHeight: 80 },
{ key: 'random', label: '随机寻宝', emoji: null, icon: '/static/square/haibao.png', iconWidth: 96, iconHeight: 96 },
{ key: 'hot', label: '人气王者', emoji: null, icon: '/static/square/3.png',iconWidth: 80, iconHeight: 80 },
{ key: 'new', label: '新鲜上架', emoji: null, icon: '/static/square/2.png',iconWidth: 80, iconHeight: 80 },
{ key: 'potential', label: '潜力之星', emoji: null, icon: '/static/square/1.png',iconWidth: 96, iconHeight: 96 },
{ key: 'random', label: '随机寻宝', emoji: null, icon: '/static/square/4.png',iconWidth: 80, iconHeight: 80 },
]
</script>
@ -97,9 +97,9 @@ const tabs = [
.tab-left {
position: absolute;
z-index: 1;
left: -10rpx;
top: 50%;
transform: translateY(-50%);
left: -16rpx;
top: 35%;
transform: translateY(-50%) rotateZ(8deg);
width: 80rpx;
height: 80rpx;
display: flex;
@ -110,8 +110,7 @@ const tabs = [
/* 第一个 tab 图标单独样式 */
.tab-left-first {
top: 40%;
transform: translateY(-70%);
top: 23%;
}
@ -133,11 +132,13 @@ const tabs = [
.tab-label {
position: relative;
z-index: 1;
font-size: 20rpx;
font-size: 18rpx;
font-weight: 600;
color: rgba(255, 255, 255, 0.65);
color: rgba(255, 255, 255, 0.95);
/* color: #ffffff; */
text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.8);
white-space: nowrap;
margin-left: 60rpx;
margin-left: 48rpx;
}
.tab-item.active .tab-label {

View File

@ -37,36 +37,36 @@ export const SPAN_CONFIG = {
// 人气王者:高点赞为主,大卡片多
hot: {
thresholds: [
{ max: 30000, span: 1 }, // 3w 以下 → span 1
{ max: 60000, span: 2 }, // 3w-6w → span 2
{ max: 100000, span: 3 }, // 6w-10w → span 3
{ max: Infinity, span: 4 }, // 10w+ → span 4
{ max: 300, span: 1 }, // 300 以下 → span 1
{ max: 600, span: 2 }, // 300-600 → span 2
{ max: 1000, span: 3 }, // 600-1000 → span 3
{ max: Infinity, span: 4 }, // 1000+ → span 4
]
},
// 新鲜上架:低点赞,小卡片为主
new: {
thresholds: [
{ max: 200, span: 1 }, // 200 以下 → span 1
{ max: 500, span: 2 }, // 200-500 → span 2
{ max: Infinity, span: 3 },// 500+ → span 3
{ max: 2, span: 1 }, // 2 以下 → span 1
{ max: 5, span: 2 }, // 2-5 → span 2
{ max: Infinity, span: 3 },// 5+ → span 3
]
},
// 潜力之星:中等点赞,中小卡片
potential: {
thresholds: [
{ max: 5000, span: 1 }, // 5k 以下 → span 1
{ max: 10000, span: 2 }, // 5k-1w → span 2
{ max: 15000, span: 3 }, // 1w-1.5w → span 3
{ max: Infinity, span: 4 },// 1.5w+ → span 4
{ max: 50, span: 1 }, // 50 以下 → span 1
{ max: 100, span: 2 }, // 50-100 → span 2
{ max: 150, span: 3 }, // 100-150 → span 3
{ max: Infinity, span: 4 },// 150+ → span 4
]
},
// 随机寻宝:混合
random: {
thresholds: [
{ max: 10000, span: 1 }, // 1w 以下 → span 1
{ max: 30000, span: 2 }, // 1w-3w → span 2
{ max: 60000, span: 3 }, // 3w-6w → span 3
{ max: Infinity, span: 4 },// 6w+ → span 4
{ max: 100, span: 1 }, // 100 以下 → span 1
{ max: 300, span: 2 }, // 100-300 → span 2
{ max: 600, span: 3 }, // 300-600 → span 3
{ max: Infinity, span: 4 },// 600+ → span 4
]
},
}
@ -84,17 +84,17 @@ export function calcSpan(category, likes) {
// span 由 WaterfallGrid._span() 根据 like_count 计算
export const MOCK_RENQIWANG = {
items: [
{ asset_id: 10001, name: '星光璀璨', cover_url: MOCK_IMAGES[0], like_count: 125800, owner_nickname: '小甜心' },
{ asset_id: 10002, name: '爱的绽放', cover_url: MOCK_IMAGES[1], like_count: 98600, owner_nickname: '爱豆粉' },
{ asset_id: 10003, name: '温暖守护', cover_url: MOCK_IMAGES[2], like_count: 87200, owner_nickname: '星星控' },
{ asset_id: 10004, name: '甜蜜暴击', cover_url: MOCK_IMAGES[3], like_count: 76800, owner_nickname: '追星族' },
{ asset_id: 10005, name: '闪耀舞台', cover_url: MOCK_IMAGES[4], like_count: 65400, owner_nickname: '小太阳' },
{ asset_id: 10006, name: '为你疯狂', cover_url: MOCK_IMAGES[5], like_count: 58900, owner_nickname: '小可爱' },
{ asset_id: 10007, name: '心动时刻', cover_url: MOCK_IMAGES[6], like_count: 52100, owner_nickname: '小天使' },
{ asset_id: 10008, name: '永相随', cover_url: MOCK_IMAGES[7], like_count: 48700, owner_nickname: '小甜豆' },
{ asset_id: 10009, name: '粉红泡泡', cover_url: MOCK_IMAGES[8], like_count: 45600, owner_nickname: '小迷糊' },
{ asset_id: 10010, name: '爱的力量', cover_url: MOCK_IMAGES[9], like_count: 42300, owner_nickname: '小幸运' },
{ asset_id: 10011, name: '璀璨星河', cover_url: MOCK_IMAGES[10], like_count: 39800, owner_nickname: '小浪漫' },
{ asset_id: 10001, name: '星光璀璨', cover_url: MOCK_IMAGES[0], like_count: 1258, owner_nickname: '小甜心' },
{ asset_id: 10002, name: '爱的绽放', cover_url: MOCK_IMAGES[1], like_count: 986, owner_nickname: '爱豆粉' },
{ asset_id: 10003, name: '温暖守护', cover_url: MOCK_IMAGES[2], like_count: 872, owner_nickname: '星星控' },
{ asset_id: 10004, name: '甜蜜暴击', cover_url: MOCK_IMAGES[3], like_count: 768, owner_nickname: '追星族' },
{ asset_id: 10005, name: '闪耀舞台', cover_url: MOCK_IMAGES[4], like_count: 654, owner_nickname: '小太阳' },
{ asset_id: 10006, name: '为你疯狂', cover_url: MOCK_IMAGES[5], like_count: 589, owner_nickname: '小可爱' },
{ asset_id: 10007, name: '心动时刻', cover_url: MOCK_IMAGES[6], like_count: 521, owner_nickname: '小天使' },
{ asset_id: 10008, name: '永相随', cover_url: MOCK_IMAGES[7], like_count: 487, owner_nickname: '小甜豆' },
{ asset_id: 10009, name: '粉红泡泡', cover_url: MOCK_IMAGES[8], like_count: 456, owner_nickname: '小迷糊' },
{ asset_id: 10010, name: '爱的力量', cover_url: MOCK_IMAGES[9], like_count: 423, owner_nickname: '小幸运' },
{ asset_id: 10011, name: '璀璨星河', cover_url: MOCK_IMAGES[10], like_count: 398, owner_nickname: '小浪漫' },
],
cursor: 'renqiwang_cursor_001',
has_more: true,
@ -104,17 +104,17 @@ export const MOCK_RENQIWANG = {
// ========== 新鲜上架 - 新发布作品,点赞较低 ==========
export const MOCK_XINXIANSHANG = {
items: [
{ asset_id: 30001, name: '刚刚发布', cover_url: MOCK_IMAGES[0], like_count: 128, owner_nickname: '新手小白' },
{ asset_id: 30002, name: '今日新鲜', cover_url: MOCK_IMAGES[1], like_count: 256, owner_nickname: '小萌新' },
{ asset_id: 30003, name: '刚出锅', cover_url: MOCK_IMAGES[2], like_count: 89, owner_nickname: '新来的' },
{ asset_id: 30004, name: '热乎的', cover_url: MOCK_IMAGES[3], like_count: 167, owner_nickname: '小试牛刀' },
{ asset_id: 30005, name: '新品上市', cover_url: MOCK_IMAGES[4], like_count: 234, owner_nickname: '初来乍到' },
{ asset_id: 30006, name: '今日首发', cover_url: MOCK_IMAGES[5], like_count: 178, owner_nickname: '小透明' },
{ asset_id: 30007, name: '刚出炉', cover_url: MOCK_IMAGES[6], like_count: 145, owner_nickname: '新手村' },
{ asset_id: 30008, name: '最新创作', cover_url: MOCK_IMAGES[7], like_count: 312, owner_nickname: '小画师' },
{ asset_id: 30009, name: '新鲜出炉', cover_url: MOCK_IMAGES[8], like_count: 98, owner_nickname: '小创作者' },
{ asset_id: 30010, name: '首发作品', cover_url: MOCK_IMAGES[9], like_count: 267, owner_nickname: '小练手' },
{ asset_id: 30011, name: '全新上线', cover_url: MOCK_IMAGES[10], like_count: 189, owner_nickname: '新起步' },
{ asset_id: 30001, name: '刚刚发布', cover_url: MOCK_IMAGES[0], like_count: 1, owner_nickname: '新手小白' },
{ asset_id: 30002, name: '今日新鲜', cover_url: MOCK_IMAGES[1], like_count: 2, owner_nickname: '小萌新' },
{ asset_id: 30003, name: '刚出锅', cover_url: MOCK_IMAGES[2], like_count: 0, owner_nickname: '新来的' },
{ asset_id: 30004, name: '热乎的', cover_url: MOCK_IMAGES[3], like_count: 1, owner_nickname: '小试牛刀' },
{ asset_id: 30005, name: '新品上市', cover_url: MOCK_IMAGES[4], like_count: 2, owner_nickname: '初来乍到' },
{ asset_id: 30006, name: '今日首发', cover_url: MOCK_IMAGES[5], like_count: 1, owner_nickname: '小透明' },
{ asset_id: 30007, name: '刚出炉', cover_url: MOCK_IMAGES[6], like_count: 1, owner_nickname: '新手村' },
{ asset_id: 30008, name: '最新创作', cover_url: MOCK_IMAGES[7], like_count: 3, owner_nickname: '小画师' },
{ asset_id: 30009, name: '新鲜出炉', cover_url: MOCK_IMAGES[8], like_count: 0, owner_nickname: '小创作者' },
{ asset_id: 30010, name: '首发作品', cover_url: MOCK_IMAGES[9], like_count: 2, owner_nickname: '小练手' },
{ asset_id: 30011, name: '全新上线', cover_url: MOCK_IMAGES[10], like_count: 1, owner_nickname: '新起步' },
],
cursor: 'xinxianshang_cursor_001',
has_more: true,
@ -124,17 +124,17 @@ export const MOCK_XINXIANSHANG = {
// ========== 潜力之星 - 中等点赞有潜力的作品 ==========
export const MOCK_QIANLIXING = {
items: [
{ asset_id: 20001, name: '初露锋芒', cover_url: MOCK_IMAGES[0], like_count: 12800, owner_nickname: '小新芽' },
{ asset_id: 20002, name: '蓄势待发', cover_url: MOCK_IMAGES[1], like_count: 11500, owner_nickname: '小嫩草' },
{ asset_id: 20003, name: '冉冉升起', cover_url: MOCK_IMAGES[2], like_count: 10200, owner_nickname: '小泡泡' },
{ asset_id: 20004, name: '明日之星', cover_url: MOCK_IMAGES[3], like_count: 9800, owner_nickname: '小火苗' },
{ asset_id: 20005, name: '潜力无限', cover_url: MOCK_IMAGES[4], like_count: 8900, owner_nickname: '小萌芽' },
{ asset_id: 20006, name: '闪耀新星', cover_url: MOCK_IMAGES[5], like_count: 8200, owner_nickname: '小水滴' },
{ asset_id: 20007, name: '小荷才露', cover_url: MOCK_IMAGES[6], like_count: 7600, owner_nickname: '小竹笋' },
{ asset_id: 20008, name: '锋芒初现', cover_url: MOCK_IMAGES[7], like_count: 7100, owner_nickname: '小鸽子' },
{ asset_id: 20009, name: '闪闪发光', cover_url: MOCK_IMAGES[8], like_count: 6500, owner_nickname: '小萤火' },
{ asset_id: 20010, name: '未来可期', cover_url: MOCK_IMAGES[9], like_count: 5900, owner_nickname: '小芽芽' },
{ asset_id: 20011, name: '新秀登场', cover_url: MOCK_IMAGES[10], like_count: 5400, owner_nickname: '小藤蔓' },
{ asset_id: 20001, name: '初露锋芒', cover_url: MOCK_IMAGES[0], like_count: 128, owner_nickname: '小新芽' },
{ asset_id: 20002, name: '蓄势待发', cover_url: MOCK_IMAGES[1], like_count: 115, owner_nickname: '小嫩草' },
{ asset_id: 20003, name: '冉冉升起', cover_url: MOCK_IMAGES[2], like_count: 102, owner_nickname: '小泡泡' },
{ asset_id: 20004, name: '明日之星', cover_url: MOCK_IMAGES[3], like_count: 98, owner_nickname: '小火苗' },
{ asset_id: 20005, name: '潜力无限', cover_url: MOCK_IMAGES[4], like_count: 89, owner_nickname: '小萌芽' },
{ asset_id: 20006, name: '闪耀新星', cover_url: MOCK_IMAGES[5], like_count: 82, owner_nickname: '小水滴' },
{ asset_id: 20007, name: '小荷才露', cover_url: MOCK_IMAGES[6], like_count: 76, owner_nickname: '小竹笋' },
{ asset_id: 20008, name: '锋芒初现', cover_url: MOCK_IMAGES[7], like_count: 71, owner_nickname: '小鸽子' },
{ asset_id: 20009, name: '闪闪发光', cover_url: MOCK_IMAGES[8], like_count: 65, owner_nickname: '小萤火' },
{ asset_id: 20010, name: '未来可期', cover_url: MOCK_IMAGES[9], like_count: 59, owner_nickname: '小芽芽' },
{ asset_id: 20011, name: '新秀登场', cover_url: MOCK_IMAGES[10], like_count: 54, owner_nickname: '小藤蔓' },
],
cursor: 'qianlixing_cursor_001',
has_more: true,
@ -144,17 +144,17 @@ export const MOCK_QIANLIXING = {
// ========== 随机寻宝 - 随机混合数据 ==========
export const MOCK_SUIJIXUNBAO = {
items: [
{ asset_id: 40001, name: '神秘宝藏1', cover_url: MOCK_IMAGES[0], like_count: 45000, owner_nickname: '寻宝达人' },
{ asset_id: 40002, name: '神秘宝藏2', cover_url: MOCK_IMAGES[1], like_count: 32000, owner_nickname: '探险家' },
{ asset_id: 40003, name: '神秘宝藏3', cover_url: MOCK_IMAGES[2], like_count: 78000, owner_nickname: '淘宝高手' },
{ asset_id: 40004, name: '神秘宝藏4', cover_url: MOCK_IMAGES[3], like_count: 1500, owner_nickname: '捡漏王' },
{ asset_id: 40005, name: '神秘宝藏5', cover_url: MOCK_IMAGES[4], like_count: 8500, owner_nickname: '挖宝专家' },
{ asset_id: 40006, name: '神秘宝藏6', cover_url: MOCK_IMAGES[5], like_count: 55000, owner_nickname: '收藏家' },
{ asset_id: 40007, name: '神秘宝藏7', cover_url: MOCK_IMAGES[6], like_count: 200, owner_nickname: '淘宝达人' },
{ asset_id: 40008, name: '神秘宝藏8', cover_url: MOCK_IMAGES[7], like_count: 12000, owner_nickname: '猎奇者' },
{ asset_id: 40009, name: '神秘宝藏9', cover_url: MOCK_IMAGES[8], like_count: 62000, owner_nickname: '寻宝奇兵' },
{ asset_id: 40010, name: '神秘宝藏10', cover_url: MOCK_IMAGES[9], like_count: 800, owner_nickname: '淘宝猎人' },
{ asset_id: 40011, name: '神秘宝藏11', cover_url: MOCK_IMAGES[10], like_count: 9500, owner_nickname: '挖宝小分队' },
{ asset_id: 40001, name: '神秘宝藏1', cover_url: MOCK_IMAGES[0], like_count: 450, owner_nickname: '寻宝达人' },
{ asset_id: 40002, name: '神秘宝藏2', cover_url: MOCK_IMAGES[1], like_count: 320, owner_nickname: '探险家' },
{ asset_id: 40003, name: '神秘宝藏3', cover_url: MOCK_IMAGES[2], like_count: 780, owner_nickname: '淘宝高手' },
{ asset_id: 40004, name: '神秘宝藏4', cover_url: MOCK_IMAGES[3], like_count: 15, owner_nickname: '捡漏王' },
{ asset_id: 40005, name: '神秘宝藏5', cover_url: MOCK_IMAGES[4], like_count: 85, owner_nickname: '挖宝专家' },
{ asset_id: 40006, name: '神秘宝藏6', cover_url: MOCK_IMAGES[5], like_count: 550, owner_nickname: '收藏家' },
{ asset_id: 40007, name: '神秘宝藏7', cover_url: MOCK_IMAGES[6], like_count: 2, owner_nickname: '淘宝达人' },
{ asset_id: 40008, name: '神秘宝藏8', cover_url: MOCK_IMAGES[7], like_count: 120, owner_nickname: '猎奇者' },
{ asset_id: 40009, name: '神秘宝藏9', cover_url: MOCK_IMAGES[8], like_count: 620, owner_nickname: '寻宝奇兵' },
{ asset_id: 40010, name: '神秘宝藏10', cover_url: MOCK_IMAGES[9], like_count: 8, owner_nickname: '淘宝猎人' },
{ asset_id: 40011, name: '神秘宝藏11', cover_url: MOCK_IMAGES[10], like_count: 95, owner_nickname: '挖宝小分队' },
],
cursor: 'suijixunbao_cursor_001',
has_more: true,
@ -185,19 +185,19 @@ export function generateMockItems(category = 'hot', count = 20, startId = 50000)
// 根据分类生成不同的点赞数范围
switch (category) {
case 'hot':
like_count = 20000 + Math.floor(Math.random() * 100000) // 2w-12w
like_count = 200 + Math.floor(Math.random() * 1000) // 200-1200
break
case 'new':
like_count = 50 + Math.floor(Math.random() * 500) // 50-550
like_count = Math.floor(Math.random() * 5) // 0-5
break
case 'potential':
like_count = 3000 + Math.floor(Math.random() * 15000) // 3k-18k
like_count = 30 + Math.floor(Math.random() * 150) // 30-180
break
case 'random':
like_count = Math.floor(Math.random() * 80000) // 0-8w
like_count = Math.floor(Math.random() * 800) // 0-800
break
default:
like_count = Math.floor(Math.random() * 50000)
like_count = Math.floor(Math.random() * 500)
}
items.push({

View File

@ -234,7 +234,7 @@ onUnmounted(() => {
.banner-tabs-wrapper {
position: fixed;
top: 216rpx;
top: 248rpx;
left: 0;
right: 0;
z-index: 100;

View File

@ -85,7 +85,7 @@ const progressPercent = computed(() => {
width: 98%;
height: 328rpx;
position: relative;
margin-top: 176rpx;
top: 240rpx;
overflow: hidden;
/* 性能优化:启用硬件加速 */
transform: translateZ(0);

View File

@ -323,7 +323,7 @@ function getStatusClass(status) {
function getStatusText(status) {
switch (status) {
case 'pending': return '前往'
case 'pending': return '未完成'
case 'completed': return '可领取'
case 'claimed': return '已完成'
default: return status

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

View File

@ -79,10 +79,7 @@ export function doubleTapLike(assetId, callback) {
if (callback) callback(true);
}).catch(err => {
console.error('点赞失败:', err);
// 如果是"已点赞"错误,也更新本地记录
if (err.message && err.message.includes('already liked')) {
markLikedToday(assetId);
}
uni.showToast({ title: '今日已点赞', icon: 'none' });
if (callback) callback(false);
});
}