/* eslint-disable no-param-reassign */ import { getSearchResult } from '../../../services/good/fetchSearchResult'; import Toast from 'tdesign-miniprogram/toast/index'; const initFilters = { overall: 1, sorts: '', }; Page({ data: { goodsList: [], sorts: '', overall: 1, show: false, minVal: '', maxVal: '', minSalePriceFocus: false, maxSalePriceFocus: false, filter: initFilters, hasLoaded: false, keywords: '', loadMoreStatus: 0, loading: true, }, total: 0, pageNum: 1, pageSize: 30, onLoad(options) { const { searchValue = '' } = options || {}; // 解码URL编码的搜索值,确保中文字符正确显示 const decodedSearchValue = searchValue ? decodeURIComponent(searchValue) : ''; this.setData( { keywords: decodedSearchValue, }, () => { this.init(true); }, ); }, generalQueryData(reset = false) { const { filter, keywords, minVal, maxVal } = this.data; const { pageNum, pageSize } = this; const { sorts, overall } = filter; const params = { sort: 0, // 0 综合,1 价格 pageNum: 1, pageSize: 30, keyword: keywords, }; if (sorts) { params.sort = 1; params.sortType = sorts === 'desc' ? 1 : 0; } if (overall) { params.sort = 0; } else { params.sort = 1; } params.minPrice = minVal ? minVal * 100 : 0; params.maxPrice = maxVal ? maxVal * 100 : undefined; if (reset) return params; return { ...params, pageNum: pageNum + 1, pageSize, }; }, async init(reset = true) { const { loadMoreStatus, goodsList = [] } = this.data; const params = this.generalQueryData(reset); if (loadMoreStatus !== 0) return; this.setData({ loadMoreStatus: 1, loading: true, }); try { const result = await getSearchResult(params); console.log('🔍 搜索结果页面收到数据:', result); if (result && result.spuList) { const { spuList, totalCount = 0 } = result; if (totalCount === 0 && reset) { this.total = totalCount; this.setData({ emptyInfo: { tip: '抱歉,未找到相关商品', }, hasLoaded: true, loadMoreStatus: 0, loading: false, goodsList: [], }); return; } const _goodsList = reset ? spuList : goodsList.concat(spuList); _goodsList.forEach((v) => { v.tags = v.spuTagList ? v.spuTagList.map((u) => u.title) : (v.tags || []); v.hideKey = { desc: true }; }); const _loadMoreStatus = _goodsList.length === totalCount ? 2 : 0; this.pageNum = params.pageNum || 1; this.total = totalCount; this.setData({ goodsList: _goodsList, loadMoreStatus: _loadMoreStatus, }); } else { console.error('🔍 搜索结果格式错误:', result); this.setData({ loading: false, emptyInfo: { tip: '搜索结果格式错误,请稍候重试', }, }); wx.showToast({ title: '查询失败,请稍候重试', icon: 'none' }); } } catch (error) { console.error('🔍 搜索请求失败:', error); this.setData({ loading: false, emptyInfo: { tip: '网络连接失败,请检查网络后重试', }, }); wx.showToast({ title: error.message || '网络请求失败', icon: 'none' }); } this.setData({ hasLoaded: true, loading: false, }); }, handleCartTap() { wx.switchTab({ url: '/pages/cart/index', }); }, handleSubmit() { this.setData( { goodsList: [], loadMoreStatus: 0, }, () => { this.init(true); }, ); }, onReachBottom() { const { goodsList } = this.data; const { total = 0 } = this; if (goodsList.length === total) { this.setData({ loadMoreStatus: 2, }); return; } this.init(false); }, handleAddCart() { Toast({ context: this, selector: '#t-toast', message: '点击加购', }); }, gotoGoodsDetail(e) { const { index } = e.detail; const { spuId } = this.data.goodsList[index]; wx.navigateTo({ url: `/pages/goods/details/index?spuId=${spuId}`, }); }, handleFilterChange(e) { const { overall, sorts } = e.detail; const { total } = this; const _filter = { sorts, overall, }; this.setData({ filter: _filter, sorts, overall, }); this.pageNum = 1; this.setData( { goodsList: [], loadMoreStatus: 0, }, () => { total && this.init(true); }, ); }, showFilterPopup() { this.setData({ show: true, }); }, showFilterPopupClose() { this.setData({ show: false, }); }, onMinValAction(e) { const { value } = e.detail; this.setData({ minVal: value }); }, onMaxValAction(e) { const { value } = e.detail; this.setData({ maxVal: value }); }, reset() { this.setData({ minVal: '', maxVal: '' }); }, confirm() { const { minVal, maxVal } = this.data; let message = ''; if (minVal && !maxVal) { message = `价格最小是${minVal}`; } else if (!minVal && maxVal) { message = `价格范围是0-${maxVal}`; } else if (minVal && maxVal && minVal <= maxVal) { message = `价格范围${minVal}-${this.data.maxVal}`; } else { message = '请输入正确范围'; } if (message) { Toast({ context: this, selector: '#t-toast', message, }); } this.pageNum = 1; this.setData( { show: false, goodsList: [], loadMoreStatus: 0, }, () => { // 保留价格筛选值,确保传入后端API this.init(true); }, ); }, });