Initial commit
This commit is contained in:
169
miniprogram/services/home/home.js
Normal file
169
miniprogram/services/home/home.js
Normal file
@@ -0,0 +1,169 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user