From 09c4f250d53f50116f54be659131efca13f5f618 Mon Sep 17 00:00:00 2001 From: davy Date: Wed, 9 Apr 2025 23:10:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=AF=BC=E8=88=AA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/loginPopup.vue | 4 - pages/index/brandHome.vue | 58 ++++-- pages/index/index.vue | 170 ++++++++++++++--- pages/index/my.vue | 382 +++++++++++++++++--------------------- pages/index/myJoin.vue | 15 ++ pages/index/scan.vue | 8 +- pagesMy/addAiad.vue | 10 +- pagesMy/myAddress.vue | 6 +- pagesMy/myAttention.vue | 29 ++- pagesMy/myWineReview.vue | 14 -- static/.DS_Store | Bin 10244 -> 0 bytes static/down.svg | 1 - static/medal-star.svg | 1 + static/up.svg | 1 - utils/auth.js | 1 + 15 files changed, 414 insertions(+), 286 deletions(-) delete mode 100644 static/.DS_Store delete mode 100644 static/down.svg create mode 100644 static/medal-star.svg delete mode 100644 static/up.svg diff --git a/components/loginPopup.vue b/components/loginPopup.vue index 959144f..ff46810 100644 --- a/components/loginPopup.vue +++ b/components/loginPopup.vue @@ -66,10 +66,6 @@ }, methods: { open() { - // uni.hideTabBar({ - // fail() { - // } - // }) this.$refs.loginRef.open() }, close() { diff --git a/pages/index/brandHome.vue b/pages/index/brandHome.vue index 026fffe..884ff5d 100644 --- a/pages/index/brandHome.vue +++ b/pages/index/brandHome.vue @@ -266,6 +266,7 @@ pageSize: 5, id: '' }, + isLogin: false, // Added for the new favorBreweryFun method }; }, onLoad({ @@ -467,8 +468,7 @@ }, // 收藏品牌方 favorBreweryFun(status) { - const token = uni.getStorageSync('token') - if (!token) { + if (!this.isLogin) { this.$refs.loginRef.open() return } @@ -873,6 +873,7 @@ min-height: 600rpx; width: 100%; box-sizing: border-box; + animation: simple-fade 0.2s ease-out; } /* 滚动容器 */ @@ -901,6 +902,7 @@ display: flex; flex-direction: column; box-sizing: border-box; + box-shadow: 0rpx 1rpx 3rpx 0rpx rgba(0, 0, 0, 0.1); } /* 商品网格 */ @@ -912,6 +914,7 @@ gap: 24rpx; // padding: 0 24rpx; box-sizing: border-box; + box-shadow: 0rpx 1rpx 3rpx 0rpx rgba(0, 0, 0, 0.1); } /* 商品卡片 */ @@ -1094,30 +1097,49 @@ } } - /* 上滑加载动画 */ - @keyframes slide-in { + /* 简化的淡入动画 */ + @keyframes simple-fade { from { - transform: translateY(100%); opacity: 0; } to { - transform: translateY(0); opacity: 1; } } - /* 活动列表项动画 */ - .activity-item { - animation: slide-in 0.3s ease-out; - } - - /* 商品卡片动画 */ - .goods-item { - animation: slide-in 0.3s ease-out; - } - - /* 啤酒卡片动画 */ + /* 移除所有复杂的动画效果 */ + .activity-item, + .goods-item, .beer-card { - animation: slide-in 0.3s ease-out; + animation: none; + } + + /* 移除旧的动画定义 */ + @keyframes tab-fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + + @keyframes item-slide-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + + /* 移除延迟动画 */ + .beer-card:nth-child(2n), + .activity-item:nth-child(2n), + .goods-item:nth-child(2n), + .beer-card:nth-child(3n), + .activity-item:nth-child(3n), + .goods-item:nth-child(3n) { + animation-delay: 0s; } \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue index f6b070d..f62c510 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -9,11 +9,16 @@ - + - @@ -213,17 +218,26 @@ this.loading = true try { - const res = await getActivities({ + const params = { pageNum: this.pageNum, pageSize: this.pageSize, - keyword: this.keyword - }) + keyword: this.keyword, + orderType: 'latest' // 默认按最新发布排序 + } + + const res = await getActivities(params) if (res.rows && res.rows.length > 0) { + // 处理剩余天数 + const processedRows = res.rows.map(it => { + it.remainingDays = this.getRemainingDays(it.endDate) + return it + }) + if (this.pageNum === 1) { - this.featurePageList = res.rows + this.featurePageList = processedRows } else { - this.featurePageList = [...this.featurePageList, ...res.rows] + this.featurePageList = [...this.featurePageList, ...processedRows] } this.total = res.total this.pageNum++ @@ -233,6 +247,9 @@ this.finished = true } } else { + if (this.pageNum === 1) { + this.featurePageList = [] + } this.finished = true } } catch (error) { @@ -245,6 +262,15 @@ this.loading = false } }, + + // 计算剩余天数 + getRemainingDays(date) { + const targetDate = new Date(date) + const currentDate = new Date() + const timeDiff = targetDate.getTime() - currentDate.getTime() + const remainingDays = Math.ceil(timeDiff / (1000 * 3600 * 24)) + return remainingDays + }, // 加载更多 changePage() { if (!this.loading && !this.finished) { @@ -260,11 +286,16 @@ // 处理活动点击 handleActivityClick(item) { uni.navigateTo({ - url: `/pages/activityList/details?id=${item.id}` + url: `/pagesActivity/activityDetail?id=${item.id}` }) }, // 跳转酒评页 toReview(it) { + const token = uni.getStorageSync('token') + if (!token) { + this.$refs.loginRef.show() + return + } uni.navigateTo({ url: "/pages/index/review?beerId=" + it.id }) @@ -275,44 +306,98 @@ this.homeBanner = [] this.bannerJoin = null getBannerList().then(res => { + if (!res.data || !Array.isArray(res.data)) return + res.data.forEach(it => { - if (it.bannerType == 'homeAD') { // 开屏广告 + if (it.bannerType === 'homeAD') { // 开屏广告 this.ADList.push(it) - } else if (it.bannerType == 'homeJoin') { // 认证门店 + } else if (it.bannerType === 'homeJoin') { // 认证门店 this.bannerJoin = it - } else if (it.bannerType == 'homeBanner') { // 首页banner + } else if (it.bannerType === 'homeBanner') { // 首页banner this.homeBanner.push(it) } }) - let showHomeAD = uni.getStorageSync('showHomeAD') - if (!showHomeAD) { - this.$refs.ADRef.open() + // 检查是否需要显示开屏广告 + const lastShowTime = uni.getStorageSync('lastShowHomeADTime') + const currentTime = new Date().getTime() + // 如果从未显示过或者距离上次显示超过24小时 + if (!lastShowTime || (currentTime - lastShowTime > 24 * 60 * 60 * 1000)) { + if (this.ADList.length > 0) { + this.$refs.ADRef.open() + } } + }).catch(err => { + console.error('获取banner列表失败:', err) }) }, - // 关闭广告 closeAd() { - uni.setStorageSync('showHomeAD', true) + // 记录广告显示时间 + uni.setStorageSync('lastShowHomeADTime', new Date().getTime()) uni.setTabBarStyle({ backgroundColor: '#ffffff' }) this.$refs.ADRef.close() }, handleAD(item) { + if (!item || !item.bannerLink) return + this.closeAd() - if (item.bannerLink) { + // 处理不同类型的链接 + if (item.bannerLink.startsWith('/')) { + // 内部页面跳转 uni.navigateTo({ url: item.bannerLink, + fail: () => { + // 如果普通跳转失败,尝试switchTab + uni.switchTab({ + url: item.bannerLink, + fail: (err) => { + console.error('页面跳转失败:', err) + uni.showToast({ + title: '页面跳转失败', + icon: 'none' + }) + } + }) + } + }) + } else if (item.bannerLink.startsWith('http')) { + // 外部链接,可以使用web-view页面打开 + uni.navigateTo({ + url: `/pages/webview/webview?url=${encodeURIComponent(item.bannerLink)}` }) } }, // 立即认证门店 toJoin() { - if (!this.bannerJoin) return - uni.navigateTo({ - url: this.bannerJoin.bannerLink, - }) + if (!this.bannerJoin || !this.bannerJoin.bannerLink) return + + // 处理不同类型的链接 + if (this.bannerJoin.bannerLink.startsWith('/')) { + // 内部页面跳转 + uni.navigateTo({ + url: this.bannerJoin.bannerLink, + fail: () => { + // 如果普通跳转失败,尝试switchTab + uni.switchTab({ + url: this.bannerJoin.bannerLink, + fail: (err) => { + console.error('页面跳转失败:', err) + uni.showToast({ + title: '页面跳转失败', + icon: 'none' + }) + } + }) + } + }) + } else if (this.bannerJoin.bannerLink.startsWith('http')) { + // 外部链接,使用web-view页面打开 + uni.navigateTo({ + url: `/pages/webview/webview?url=${encodeURIComponent(this.bannerJoin.bannerLink)}` + }) + } }, // 搜索 toSearch() { @@ -330,7 +415,7 @@ break; case 2: // 生成酒单 uni.navigateTo({ - url: '/pages/index/featureInfo' + url: '/pagesActivity/winelist' }) break; case 3: // 酒币换购 @@ -340,7 +425,7 @@ break; case 4: // 关注厂牌 uni.navigateTo({ - url: '/pages/index/myJoin' + url: '/pagesMy/myAttention' }) break; } @@ -354,6 +439,26 @@ if (!e.show) { this.closeAd() } + }, + // 跳转到生成酒单页面 + toBeerList() { + uni.switchTab({ + url: '/pages/index/beerList' + }) + }, + + // 跳转到酒币兑换页面 + toBeerCoin() { + uni.switchTab({ + url: '/pages/index/beerCoin' + }) + }, + + // 跳转到我的关注页面 + toMyAttention() { + uni.switchTab({ + url: '/pages/index/myAttention' + }) } } } @@ -383,6 +488,25 @@ height: 100%; object-fit: cover; } + + /deep/ .uni-swiper-dots { + bottom: 20rpx; + + .uni-swiper-dot { + width: 12rpx; + height: 12rpx; + border-radius: 6rpx; + margin: 0 6rpx; + transition: all 0.3s ease; + background: rgba(255, 255, 255, 0.4); + + &.uni-swiper-dot-active { + width: 28rpx; + background-color: #FFFFFF; + box-shadow: 0 2rpx 8rpx rgba(255, 255, 255, 0.3); + } + } + } } } diff --git a/pages/index/my.vue b/pages/index/my.vue index 0b80a34..47739ef 100644 --- a/pages/index/my.vue +++ b/pages/index/my.vue @@ -28,7 +28,11 @@