diff --git a/pages/index/index.js b/pages/index/index.js index 7785969..6744fe7 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -20,7 +20,6 @@ Page({ currentY: 0, sidebarBtnTop: 500, sidebarBtnHidden: false, - userManuallyHidden: false, // 搜索区域相关 searchSectionVisible: true, @@ -42,6 +41,7 @@ Page({ filteredGoods: [], leftColumnGoods: [], rightColumnGoods: [], + categorizedGoods: {}, // 按品种分类存储的商品数据 selectedCategory: '全部', categories: ['全部', '粉壳', '红壳', '绿壳', '白壳'], loadingMore: false, @@ -129,19 +129,14 @@ Page({ // 如果当前不在顶部,点击则隐藏按钮 if (this.data.lastScrollTop > 50) { this.setData({ - sidebarBtnHidden: true, - userManuallyHidden: true + sidebarBtnHidden: true }); wx.setStorageSync('sidebarBtnHidden', true); - wx.setStorageSync('userManuallyHidden', true); } else { - const newHiddenState = !this.data.sidebarBtnHidden; this.setData({ - sidebarBtnHidden: newHiddenState, - userManuallyHidden: newHiddenState + sidebarBtnHidden: !this.data.sidebarBtnHidden }); - wx.setStorageSync('sidebarBtnHidden', newHiddenState); - wx.setStorageSync('userManuallyHidden', newHiddenState); + wx.setStorageSync('sidebarBtnHidden', !this.data.sidebarBtnHidden); } }, @@ -194,17 +189,13 @@ Page({ if (Math.abs(diffY) > screenHeight / 3) { this.setData({ - sidebarBtnTop: -100, // 隐藏按钮 - sidebarBtnHidden: true, - userManuallyHidden: true + sidebarBtnTop: -100 // 隐藏按钮 }); wx.setStorageSync('sidebarBtnTop', -100); wx.setStorageSync('sidebarBtnHidden', true); - wx.setStorageSync('userManuallyHidden', true); } else { wx.setStorageSync('sidebarBtnTop', this.data.sidebarBtnTop); wx.setStorageSync('sidebarBtnHidden', false); - wx.setStorageSync('userManuallyHidden', false); } this.setData({ @@ -230,7 +221,6 @@ Page({ const savedBtnTop = wx.getStorageSync('sidebarBtnTop'); const savedBtnHidden = wx.getStorageSync('sidebarBtnHidden'); - const savedUserManuallyHidden = wx.getStorageSync('userManuallyHidden'); let defaultTop = screenHeight * 0.5; if (savedBtnTop !== '' && savedBtnTop !== -100) { @@ -243,14 +233,30 @@ Page({ this.setData({ sidebarBtnTop: defaultTop, - sidebarBtnHidden: savedBtnHidden || false, - userManuallyHidden: savedUserManuallyHidden || false, + sidebarBtnHidden: false, isSearchBarFullyHidden: false, lastScrollTop: 0 }); this.checkAndRestoreLoginStatus() - this.loadCategories() - this.loadGoods() + + 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(); + }); // 计算搜索区域高度 setTimeout(() => { @@ -521,26 +527,41 @@ Page({ updatedGoods = newGoods } - 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') - } - if (filteredGoods.length > 1) { - console.log('filteredGoods[1].category:', filteredGoods[1] ? filteredGoods[1].category : 'N/A') + // 按品种分类存储商品数据 + const categorizedGoods = this.data.categorizedGoods || {}; + const categories = this.data.categories; + + // 重置所有分类的商品列表 + categories.forEach(cat => { + if (cat === '全部') { + categorizedGoods[cat] = updatedGoods; + } else { + const categoryGoods = updatedGoods.filter(item => item.isAd || item.category === cat); + categorizedGoods[cat] = categoryGoods; + } + }); + + // 应用地区筛选后的分类数据 + const filteredByRegion = this.applyRegionFilter(updatedGoods); + categories.forEach(cat => { + if (cat !== '全部') { + categorizedGoods[cat + '_filtered'] = filteredByRegion.filter(item => item.isAd || item.category === cat); + } + }); + + // 根据当前选中的分类和地区筛选获取商品 + let filteredGoods; + if (this.data.selectedRegion !== '全国') { + filteredGoods = categorizedGoods[this.data.selectedCategory + '_filtered'] || []; + } else { + filteredGoods = categorizedGoods[this.data.selectedCategory] || []; } 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, @@ -729,6 +750,15 @@ 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({ @@ -924,15 +954,37 @@ Page({ app.globalData.showTabBar = true; } - const filteredGoods = this.applyFilters(this.data.goods, false) - const groupedGoods = this.groupGoodsForStaggeredLayout(filteredGoods) - const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) + // 从本地分类数据中获取基础商品列表 + 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); + this.setData({ filteredGoods: filteredGoods, groupedGoods: groupedGoods, leftColumnGoods: leftColumnGoods, rightColumnGoods: rightColumnGoods - }) + }); }, // 切换地区选择器 @@ -946,34 +998,42 @@ 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; } - // 如果从局部地区切换到全国地区,重新加载所有商品 - if (region === '全国' && this.data.selectedCategory === '全部' && !this.data.searchKeyword) { - // 重新加载商品数据 - this.refreshGoodsList(); + const categorizedGoods = this.data.categorizedGoods || {}; + let filteredGoods; + + if (region === '全国') { + filteredGoods = categorizedGoods[this.data.selectedCategory] || []; } else { - // 否则仅对本地商品进行筛选 - const filteredGoods = this.applyFilters(this.data.goods, false) - const groupedGoods = this.groupGoodsForStaggeredLayout(filteredGoods) - const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) + filteredGoods = categorizedGoods[this.data.selectedCategory + '_filtered'] || []; + } + + if (filteredGoods.length === 0 && Object.keys(categorizedGoods).length === 0) { this.setData({ - filteredGoods: filteredGoods, - groupedGoods: groupedGoods, - leftColumnGoods: leftColumnGoods, - rightColumnGoods: rightColumnGoods - }) + page: 1, + hasMoreData: true + }, () => { + this.loadGoods(); + }); + return; } + + const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) + + this.setData({ + filteredGoods: filteredGoods, + leftColumnGoods: leftColumnGoods, + rightColumnGoods: rightColumnGoods + }) }, // 阻止事件冒泡 @@ -983,7 +1043,6 @@ Page({ // 选择品种 selectCategory: function(e) { - // 重新显示tabBar const app = getApp(); if (app && app.globalData) { app.globalData.showTabBar = true; @@ -991,23 +1050,37 @@ Page({ const category = e.currentTarget.dataset.category if (category === this.data.selectedCategory) { - return // 如果选择的分类和当前相同,不重复加载 + 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; + } + + const { leftColumnGoods, rightColumnGoods } = this.distributeToColumns(filteredGoods) + this.setData({ selectedCategory: category, - page: 1, - hasMoreData: true, - goods: [], - filteredGoods: [], - leftColumnGoods: [], - rightColumnGoods: [], - loadingMore: false, - isLoading: true + filteredGoods: filteredGoods, + leftColumnGoods: leftColumnGoods, + rightColumnGoods: rightColumnGoods }) - - // 重新从服务器加载数据 - this.loadGoods(false) }, // 查看商品详情 @@ -1137,8 +1210,7 @@ Page({ // 搜索框始终固定显示,不做隐藏处理 // 侧边栏按钮显示逻辑 - // 如果用户手动隐藏过,滚动到顶部也不再自动显示 - if (scrollTop <= threshold && this.data.sidebarBtnHidden && !this.data.userManuallyHidden) { + if (scrollTop <= threshold && this.data.sidebarBtnHidden) { updates.sidebarBtnHidden = false; needUpdate = true; wx.setStorageSync('sidebarBtnHidden', false);