const store = require('../../utils/store.js'); const api = require('../../utils/api.js'); const TAG_CLASS = { 求助: 'warn', 经验: 'blue', 精选: 'purple', 避坑: 'red', 晒宠: '' }; function mapPost(p) { const tags = p.tags || []; const tag = tags[0] || ''; return { id: p.id, author_name: p.author_name, author_emoji: p.author_emoji || '🐾', content: p.content, images: p.images || [], like_count: p.like_count, comment_count: p.comment_count, liked: false, tag, tagClass: TAG_CLASS[tag] || '', }; } Page({ data: { pet: {}, feedTabs: ['推荐', '关注', '新手求助', '晒宠', '经验'], feedIdx: 0, posts: [], sheetShow: false, sheetType: '', sheetPostId: 0, }, onLoad() { this._unsub = store.subscribe((pet) => this.setData({ pet })); }, onUnload() { if (this._unsub) this._unsub(); }, onShow() { if (typeof this.getTabBar === 'function' && this.getTabBar()) { this.getTabBar().setData({ selected: 4 }); } store .ready() .then(() => { this.setData({ pet: store.getPet() }); this.loadPosts(); }) .catch((e) => wx.showToast({ title: e.message || '加载失败', icon: 'none' })); }, loadPosts() { const tab = this.data.feedTabs[this.data.feedIdx]; api .listPosts(tab, 1) .then((page) => this.setData({ posts: (page.list || []).map(mapPost) })) .catch(() => {}); }, switchFeedTab(e) { this.setData({ feedIdx: e.currentTarget.dataset.index }); this.loadPosts(); }, likePost(e) { const i = e.currentTarget.dataset.index; const post = this.data.posts[i]; api .likePost(post.id) .then((res) => { this.setData({ [`posts[${i}].like_count`]: res.like_count, [`posts[${i}].liked`]: true }); }) .catch(() => {}); }, openComments(e) { this.setData({ sheetPostId: e.currentTarget.dataset.id, sheetType: 'comments', sheetShow: true }); }, openSheet(e) { this.setData({ sheetType: e.currentTarget.dataset.type, sheetPostId: 0, sheetShow: true }); }, closeSheet() { this.setData({ sheetShow: false }); }, onPosted() { this.setData({ sheetShow: false }); this.loadPosts(); }, onCommented() { this.loadPosts(); }, goLearn() { wx.navigateTo({ url: '/pages/learn/learn' }); }, onFab() { this.setData({ sheetType: 'ai', sheetPostId: 0, sheetShow: true }); }, });