From f45ac869170df6b73194e9eb4b1ddd9ab8cfcc5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E9=A3=9E=E6=B4=8B?= <15778543+xufeiyang6017@user.noreply.gitee.com> Date: Mon, 29 Dec 2025 14:47:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BE=A7=E8=BE=B9=E6=A0=8F?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=81=A2=E5=A4=8D=E9=80=BB=E8=BE=91=EF=BC=9A?= =?UTF-8?q?=E5=8F=AA=E6=9C=89=E8=BF=94=E5=9B=9E=E6=97=B6=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=EF=BC=8C=E5=88=B7=E6=96=B0=E4=BF=9D=E6=8C=81=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/index/index.js | 222 ++++++++++++------------------------------- 1 file changed, 60 insertions(+), 162 deletions(-) diff --git a/pages/index/index.js b/pages/index/index.js index 9635d5d..b87be16 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -20,6 +20,7 @@ Page({ currentY: 0, sidebarBtnTop: 500, sidebarBtnHidden: false, + isPageHidden: false, // 搜索区域相关 searchSectionVisible: true, @@ -41,7 +42,6 @@ Page({ filteredGoods: [], leftColumnGoods: [], rightColumnGoods: [], - categorizedGoods: {}, // 按品种分类存储的商品数据 selectedCategory: '全部', categories: ['全部', '粉壳', '红壳', '绿壳', '白壳'], loadingMore: false, @@ -238,25 +238,8 @@ Page({ lastScrollTop: 0 }); this.checkAndRestoreLoginStatus() - - API.getProductCategories().then(categories => { - console.log('加载分类成功, categories:', JSON.stringify(categories)); - if (categories && categories.length > 0) { - this.setData({ - categories: categories - }); - console.log('分类列表已设置到data, categories:', this.data.categories); - } else { - console.log('分类列表为空,使用默认分类'); - } - - // 确保有分类数据后再加载商品 - this.loadGoods(); - }).catch(err => { - console.error('加载分类失败:', err); - // 即使分类加载失败也加载商品,使用默认分类 - this.loadGoods(); - }); + this.loadCategories() + this.loadGoods() // 计算搜索区域高度 setTimeout(() => { @@ -327,9 +310,17 @@ Page({ const savedBtnHidden = wx.getStorageSync('sidebarBtnHidden'); console.log('onShow - savedBtnHidden:', savedBtnHidden); + console.log('onShow - isPageHidden:', this.data.isPageHidden); + + // 只有在返回时才恢复按钮状态(刷新页面不恢复) + if (this.data.isPageHidden) { + this.setData({ + sidebarBtnHidden: savedBtnHidden || false, + isPageHidden: false + }); + } this.setData({ - sidebarBtnHidden: savedBtnHidden || false, isSearchBarFullyHidden: false, lastScrollTop: 0 }); @@ -341,7 +332,8 @@ Page({ onHide: function () { this.setData({ - sidebarBtnHidden: true + sidebarBtnHidden: true, + isPageHidden: true }); }, @@ -527,65 +519,26 @@ Page({ updatedGoods = newGoods } - // 按品种分类存储商品数据 - const categorizedGoods = this.data.categorizedGoods || {}; - const categories = this.data.categories; - const selectedCategory = this.data.selectedCategory; - - // 如果是首次加载全部数据,需要把返回的所有数据按实际分类存储 - if (selectedCategory === '全部' && !isLoadMore) { - categories.forEach(cat => { - if (cat === '全部') { - categorizedGoods[cat] = updatedGoods; - } else { - categorizedGoods[cat] = updatedGoods.filter(item => item.isAd || item.category === cat); - } - }); - } else { - // 只更新当前选中的分类 - categories.forEach(cat => { - if (cat === '全部') { - categorizedGoods[cat] = updatedGoods; - } else if (cat === selectedCategory) { - categorizedGoods[cat] = updatedGoods.filter(item => item.isAd || !item.category || item.category === cat); - } - }); - } - - // 应用地区筛选后的分类数据 - const filteredByRegion = this.applyRegionFilter(updatedGoods); - - if (selectedCategory === '全部' && !isLoadMore) { - categories.forEach(cat => { - if (cat !== '全部') { - categorizedGoods[cat + '_filtered'] = filteredByRegion.filter(item => item.isAd || item.category === cat); - } - }); - } else { - categories.forEach(cat => { - if (cat !== '全部') { - if (cat === selectedCategory) { - categorizedGoods[cat + '_filtered'] = filteredByRegion.filter(item => item.isAd || !item.category || item.category === cat); - } else { - categorizedGoods[cat + '_filtered'] = []; - } - } - }); + const filteredGoods = this.applyFilters(updatedGoods, false) + console.log('===== 筛选结果 =====') + console.log('当前选中的分类:', this.data.selectedCategory) + console.log('filteredGoods 数量:', filteredGoods.length) + console.log('filteredGoods[0]:', filteredGoods[0] ? JSON.stringify(filteredGoods[0], null, 2) : 'N/A') + if (filteredGoods.length > 0) { + console.log('filteredGoods[0].category:', filteredGoods[0] ? filteredGoods[0].category : 'N/A') } - - // 根据当前选中的分类和地区筛选获取商品 - let filteredGoods; - if (this.data.selectedRegion !== '全国') { - filteredGoods = categorizedGoods[this.data.selectedCategory + '_filtered'] || []; - } else { - filteredGoods = categorizedGoods[this.data.selectedCategory] || []; + if (filteredGoods.length > 1) { + console.log('filteredGoods[1].category:', filteredGoods[1] ? filteredGoods[1].category : 'N/A') } const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) + console.log('leftColumnGoods 数量:', leftColumnGoods.length) + console.log('rightColumnGoods 数量:', rightColumnGoods.length) + console.log('leftColumnGoods[0]:', leftColumnGoods[0]) + console.log('rightColumnGoods[0]:', rightColumnGoods[0]) this.setData({ goods: updatedGoods, - categorizedGoods: categorizedGoods, filteredGoods: filteredGoods, leftColumnGoods: leftColumnGoods, rightColumnGoods: rightColumnGoods, @@ -738,16 +691,13 @@ Page({ const timestamp = new Date().getTime(); const currentPage = isLoadMore ? this.data.page : 1 - // 首次加载时获取全部数据,在本地进行分类 - const shouldLoadAll = !isLoadMore && this.data.selectedCategory === '全部'; - API.getProductList('published', { timestamp: timestamp, viewMode: 'shopping', page: currentPage, pageSize: this.data.pageSize, keyword: this.data.searchKeyword, - category: shouldLoadAll ? '' : this.data.selectedCategory + category: this.data.selectedCategory === '全部' ? '' : this.data.selectedCategory }) .then(res => { wx.hideLoading(); @@ -777,15 +727,6 @@ Page({ }) }, - // 应用地区筛选 - applyRegionFilter: function(goods) { - if (this.data.selectedRegion === '全国') { - return goods; - } - const selectedRegion = this.data.selectedRegion; - return goods.filter(item => item.isAd || (item.region && item.region.includes(selectedRegion))); - }, - // 刷新商品列表 refreshGoodsList: function() { this.setData({ @@ -981,37 +922,15 @@ Page({ app.globalData.showTabBar = true; } - // 从本地分类数据中获取基础商品列表 - const categorizedGoods = this.data.categorizedGoods || {}; - let baseGoods; - - if (this.data.selectedRegion !== '全国') { - baseGoods = categorizedGoods[this.data.selectedCategory + '_filtered'] || []; - } else { - baseGoods = categorizedGoods[this.data.selectedCategory] || []; - } - - // 在本地数据上进行关键词搜索 - let filteredGoods = [...baseGoods]; - - if (this.data.searchKeyword) { - const keyword = this.data.searchKeyword.toLowerCase(); - filteredGoods = filteredGoods.filter(item => - item.isAd || - (item.name || '').toLowerCase().includes(keyword) || - (item.region || '').toLowerCase().includes(keyword) - ); - } - - const groupedGoods = this.groupGoodsForStaggeredLayout(filteredGoods); - const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods); - + const filteredGoods = this.applyFilters(this.data.goods, false) + const groupedGoods = this.groupGoodsForStaggeredLayout(filteredGoods) + const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) this.setData({ filteredGoods: filteredGoods, groupedGoods: groupedGoods, leftColumnGoods: leftColumnGoods, rightColumnGoods: rightColumnGoods - }); + }) }, // 切换地区选择器 @@ -1025,42 +944,34 @@ Page({ selectRegion: function(e) { const region = e.currentTarget.dataset.region + // 立即关闭弹窗 this.setData({ selectedRegion: region, showRegionPicker: false }) + // 重新显示tabBar const app = getApp(); if (app && app.globalData) { app.globalData.showTabBar = true; } - const categorizedGoods = this.data.categorizedGoods || {}; - let filteredGoods; - - if (region === '全国') { - filteredGoods = categorizedGoods[this.data.selectedCategory] || []; + // 如果从局部地区切换到全国地区,重新加载所有商品 + if (region === '全国' && this.data.selectedCategory === '全部' && !this.data.searchKeyword) { + // 重新加载商品数据 + this.refreshGoodsList(); } else { - filteredGoods = categorizedGoods[this.data.selectedCategory + '_filtered'] || []; - } - - if (filteredGoods.length === 0 && Object.keys(categorizedGoods).length === 0) { + // 否则仅对本地商品进行筛选 + const filteredGoods = this.applyFilters(this.data.goods, false) + const groupedGoods = this.groupGoodsForStaggeredLayout(filteredGoods) + const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) this.setData({ - page: 1, - hasMoreData: true - }, () => { - this.loadGoods(); - }); - return; + filteredGoods: filteredGoods, + groupedGoods: groupedGoods, + leftColumnGoods: leftColumnGoods, + rightColumnGoods: rightColumnGoods + }) } - - const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) - - this.setData({ - filteredGoods: filteredGoods, - leftColumnGoods: leftColumnGoods, - rightColumnGoods: rightColumnGoods - }) }, // 阻止事件冒泡 @@ -1070,6 +981,7 @@ Page({ // 选择品种 selectCategory: function(e) { + // 重新显示tabBar const app = getApp(); if (app && app.globalData) { app.globalData.showTabBar = true; @@ -1077,37 +989,23 @@ Page({ const category = e.currentTarget.dataset.category if (category === this.data.selectedCategory) { - return - } - - const categorizedGoods = this.data.categorizedGoods || {}; - let filteredGoods; - - if (this.data.selectedRegion !== '全国') { - filteredGoods = categorizedGoods[category + '_filtered'] || []; - } else { - filteredGoods = categorizedGoods[category] || []; - } - - if (filteredGoods.length === 0 && Object.keys(categorizedGoods).length === 0) { - this.setData({ - selectedCategory: category, - page: 1, - hasMoreData: true - }, () => { - this.loadGoods(); - }); - return; + return // 如果选择的分类和当前相同,不重复加载 } - const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) - this.setData({ selectedCategory: category, - filteredGoods: filteredGoods, - leftColumnGoods: leftColumnGoods, - rightColumnGoods: rightColumnGoods + page: 1, + hasMoreData: true, + goods: [], + filteredGoods: [], + leftColumnGoods: [], + rightColumnGoods: [], + loadingMore: false, + isLoading: true }) + + // 重新从服务器加载数据 + this.loadGoods(false) }, // 查看商品详情