const API = require('../../utils/api.js'); Page({ data: { hotTopics: [], posts: [], loading: false, hasMore: true, page: 1, pageSize: 10 }, onLoad() { this.loadHotTopics(); this.loadPosts(); }, onShow() { this.setData({ page: 1, hasMore: true, posts: [] }); this.loadPosts(); }, onReachBottom() { if (this.data.hasMore && !this.data.loading) { this.loadPosts(); } }, onPullDownRefresh() { this.setData({ page: 1, hasMore: true, posts: [] }); this.loadHotTopics(); this.loadPosts(); wx.stopPullDownRefresh(); }, loadHotTopics() { API.getHotTopics().then(res => { if (res.data && res.data.length > 0) { this.setData({ hotTopics: res.data }); } else { // 使用默认热门话题 this.setData({ hotTopics: [ { id: 1, name: '今天你吃蛋了么?', count: 123 }, { id: 2, name: '日常分享', count: 456 }, { id: 3, name: '鸡蛋行情', count: 789 }, { id: 4, name: '养殖经验', count: 321 }, { id: 5, name: '美食分享', count: 654 } ] }); } }).catch(err => { console.error('加载热门话题失败:', err); // 出错时使用默认热门话题 this.setData({ hotTopics: [ { id: 1, name: '今天你吃蛋了么?', count: 123 }, { id: 2, name: '日常分享', count: 456 }, { id: 3, name: '鸡蛋行情', count: 789 }, { id: 4, name: '养殖经验', count: 321 }, { id: 5, name: '美食分享', count: 654 } ] }); }); }, loadPosts() { if (this.data.loading) { return; } this.setData({ loading: true }); // 获取用户信息 const userInfo = wx.getStorageSync('userInfo'); const phoneNumber = userInfo?.phoneNumber || wx.getStorageSync('phoneNumber'); const userId = wx.getStorageSync('userId') || userInfo?.userId; // 构建请求参数 const params = { page: this.data.page, pageSize: this.data.pageSize }; // 只有当电话号码存在时才传递,避免传递空值 if (phoneNumber) { params.phone = phoneNumber; } // 传递userId参数,用于后端过滤动态 if (userId) { params.userId = userId; } API.getPosts(params).then(res => { console.log('后端返回的完整响应:', res); // 正确处理后端返回的响应格式 let newPosts = res.data && res.data.posts ? res.data.posts : []; console.log('后端返回的动态数量:', newPosts.length); console.log('后端返回的动态数据:', newPosts); // 处理images字段,确保它是一个数组,并添加username字段 newPosts = newPosts.map(post => { if (post.images) { // 如果images是字符串,尝试解析为JSON数组 if (typeof post.images === 'string') { try { post.images = JSON.parse(post.images); // 确保解析后是数组 if (!Array.isArray(post.images)) { post.images = []; } } catch (e) { // 解析失败,设置为空数组 post.images = []; } } else if (!Array.isArray(post.images)) { // 如果不是字符串也不是数组,设置为空数组 post.images = []; } } else { // 如果images不存在,设置为空数组 post.images = []; } // 添加username字段(使用phone的前几位作为用户名) if (!post.username) { if (post.phone) { // 隐藏手机号中间部分 post.username = post.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'); } else { post.username = '用户' + post.user_id?.substring(0, 6) || '未知用户'; } } // 添加time字段用于显示时间 if (!post.time && post.created_at) { const date = new Date(post.created_at); post.time = date.toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }); } return post; }); // 如果是第一页且没有数据,使用默认动态数据 if (this.data.page === 1 && (!newPosts || newPosts.length === 0)) { newPosts = [ { id: 1, user_id: '1', content: '今天的鸡蛋质量真好,客户都很满意!', images: [], likes: 12, comments: 3, created_at: new Date().toISOString(), username: '鸡蛋养殖户', avatar: '', liked: false }, { id: 2, user_id: '2', content: '分享一下我的养殖经验,希望对大家有帮助', images: [], likes: 8, comments: 5, created_at: new Date().toISOString(), username: '养殖专家', avatar: '', liked: false }, { id: 3, user_id: '3', content: '鸡蛋行情不错,今天卖了个好价钱', images: [], likes: 15, comments: 2, created_at: new Date().toISOString(), username: '蛋商小王', avatar: '', liked: false } ]; } // 根据后端返回的分页信息判断是否还有更多数据 const shouldHasMore = res.data && res.data.pagination ? this.data.page < res.data.pagination.totalPages : this.data.page < 3; this.setData({ posts: this.data.page === 1 ? newPosts : [...this.data.posts, ...newPosts], loading: false, hasMore: shouldHasMore, page: this.data.page + 1 }); }).catch(err => { console.error('加载动态失败:', err); // 出错时使用默认动态数据 if (this.data.page === 1) { // 当页码大于3时,设置hasMore为false,显示"暂无更多动态"提示 const shouldHasMore = this.data.page < 3; this.setData({ posts: [ { id: 1, user_id: '1', content: '今天的鸡蛋质量真好,客户都很满意!', images: [], likes: 12, comments: 3, created_at: new Date().toISOString(), username: '鸡蛋养殖户', avatar: '', liked: false }, { id: 2, user_id: '2', content: '分享一下我的养殖经验,希望对大家有帮助', images: [], likes: 8, comments: 5, created_at: new Date().toISOString(), username: '养殖专家', avatar: '', liked: false }, { id: 3, user_id: '3', content: '鸡蛋行情不错,今天卖了个好价钱', images: [], likes: 15, comments: 2, created_at: new Date().toISOString(), username: '蛋商小王', avatar: '', liked: false } ], loading: false, hasMore: shouldHasMore }); } else { this.setData({ loading: false }); } }); }, viewTopic(e) { const topic = e.currentTarget.dataset.topic; wx.navigateTo({ url: `/pages/eggbar/topic-detail?id=${topic.id}` }); }, viewPost(e) { const post = e.currentTarget.dataset.post; wx.navigateTo({ url: `/pages/eggbar/post-detail?id=${post.id}` }); }, likePost(e) { const postId = e.currentTarget.dataset.id; // 获取用户电话号码 const userInfo = wx.getStorageSync('userInfo'); const phoneNumber = userInfo?.phoneNumber || wx.getStorageSync('phoneNumber'); if (!phoneNumber) { wx.showToast({ title: '请先登录获取电话号码', icon: 'none' }); return; } // 前端临时更新状态 const posts = this.data.posts.map(post => { if (post.id === postId) { return { ...post, liked: !post.liked, likes: post.liked ? post.likes - 1 : post.likes + 1 }; } return post; }); this.setData({ posts }); // 调用API API.likePost(postId, phoneNumber).then(res => { console.log('点赞成功:', res); wx.showToast({ title: res.message || '操作成功', icon: 'success' }); }).catch(err => { console.error('点赞失败:', err); // 恢复原始状态 const originalPosts = this.data.posts.map(post => { if (post.id === postId) { return { ...post, liked: !post.liked, likes: post.liked ? post.likes + 1 : post.likes - 1 }; } return post; }); this.setData({ posts: originalPosts }); wx.showToast({ title: '操作失败,请重试', icon: 'none' }); }); }, commentPost(e) { const postId = e.currentTarget.dataset.id; wx.navigateTo({ url: `/pages/eggbar/post-detail?id=${postId}&focusComment=true` }); }, sharePost(e) { const postId = e.currentTarget.dataset.id; wx.showShareMenu({ withShareTicket: true, success: () => { console.log('分享成功'); } }); }, createPost() { wx.navigateTo({ url: '/pages/eggbar/create-post' }); }, onShareAppMessage() { return { title: '蛋吧 - 鸡蛋行业交流社区', path: '/pages/eggbar/eggbar', imageUrl: '/images/eggbar-share.jpg' }; } });