import { config, cdnBase } from '../../config/index'; /** 获取首页数据 */ function mockFetchHome() { const { delay } = require('../_utils/delay'); const { genSwiperImageList } = require('../../model/swiper'); return delay().then(() => { return { swiper: genSwiperImageList(), tabList: [ { text: '热门商品', key: 'hot', }, { text: '精选推荐', key: 0, }, { text: '夏日防晒', key: 1, }, { text: '二胎大作战', key: 2, }, { text: '人气榜', key: 3, }, { text: '好评榜', key: 4, }, { text: 'RTX 30', key: 5, }, { text: '手机也疯狂', key: 6, }, ], activityImg: `${cdnBase}/activity/banner.png`, }; }); } /** 获取首页数据 */ export function fetchHome() { if (config.useMock) { return mockFetchHome(); } return new Promise((resolve, reject) => { // 并行请求轮播图和分类数据 const bannerRequest = new Promise((resolve, reject) => { wx.request({ url: `${config.apiBase}/banners`, method: 'GET', success: (res) => { if (res.statusCode === 200 && res.data.code === 200) { resolve(res.data.data || []); } else { console.error('获取轮播图失败:', res.data); resolve([]); // 失败时返回空数组,不阻断整个流程 } }, fail: (err) => { console.error('轮播图请求失败:', err); resolve([]); // 失败时返回空数组 } }); }); const categoryRequest = new Promise((resolve, reject) => { wx.request({ url: `${config.apiBase}/products/categories`, method: 'GET', success: (res) => { if (res.statusCode === 200 && res.data.code === 200) { resolve(res.data.data || []); } else { console.error('获取分类失败:', res.data); resolve([]); // 失败时返回空数组 } }, fail: (err) => { console.error('分类请求失败:', err); resolve([]); // 失败时返回空数组 } }); }); // 获取推荐商品 const recommendRequest = new Promise((resolve) => { wx.request({ url: `${config.apiBase}/products/recommend`, method: 'GET', success: (res) => { if (res.statusCode === 200 && res.data.code === 200) { console.log('推荐商品数据:', res.data.data); resolve(res.data.data || []); } else { console.error('获取推荐商品失败:', res.data); resolve([]); } }, fail: (err) => { console.error('推荐商品请求失败:', err); resolve([]); } }); }); // 获取热门商品 const hotRequest = new Promise((resolve) => { wx.request({ url: `${config.apiBase}/products/hot`, method: 'GET', success: (res) => { if (res.statusCode === 200 && res.data.code === 200) { console.log('热门商品数据:', res.data.data); resolve(res.data.data || []); } else { console.error('获取热门商品失败:', res.data); resolve([]); } }, fail: (err) => { console.error('热门商品请求失败:', err); resolve([]); } }); }); // 等待所有请求都完成 Promise.all([bannerRequest, categoryRequest, recommendRequest, hotRequest]) .then(([banners, categories, recommendProducts, hotProducts]) => { // 转换轮播图数据格式 - TDesign轮播图组件需要字符串数组 const swiper = banners.map(banner => banner.image); console.log('轮播图数据:', swiper); // 转换分类数据为tabList格式,在前面添加热门商品tab const tabList = [ { text: '热门商品', key: 'hot', }, ...categories.map((category, index) => ({ text: category.name, key: category.id || index, })) ]; resolve({ swiper, tabList, recommendProducts, hotProducts, activityImg: `${cdnBase}/activity/banner.png`, }); }) .catch((error) => { console.error('获取首页数据失败:', error); reject(error); }); }); }