Files
sundynix-plant-mp/pages/community/index.js
T
2026-02-04 14:02:31 +08:00

161 lines
4.2 KiB
JavaScript

// pages/community/index.js
import { MOCK_POSTS } from '../../utils/mockData';
Page({
data: {
posts: [],
displayedPosts: [],
activePostId: null, // For showing action popup
showCommentBar: false,
commentingPostId: null,
commentText: ''
},
onLoad() {
this.setData({ posts: MOCK_POSTS });
this.updateDisplayedPosts();
},
onShow() {
if (typeof this.getTabBar === 'function' && this.getTabBar()) {
this.getTabBar().setData({ selected: 2 });
}
// Refresh posts in case new ones were added
this.setData({ posts: MOCK_POSTS });
this.updateDisplayedPosts();
},
updateDisplayedPosts() {
const { posts } = this.data;
// Show all posts with likedByMe flag
const displayed = posts.map(post => ({
...post,
likedByMe: post.likes.includes('我的花园')
}));
this.setData({ displayedPosts: displayed });
},
// Preview image in full screen
previewImage(e) {
const { url, urls } = e.currentTarget.dataset;
const resolvedUrls = urls.map(img => {
if (img.indexOf('http') === 0 || img.indexOf('wxfile') === 0) {
return img;
}
return `/assets/${img}`;
});
wx.previewImage({
current: url,
urls: resolvedUrls
});
},
// Toggle action popup (WeChat style)
toggleActionPopup(e) {
const postId = e.currentTarget.dataset.id;
if (this.data.activePostId === postId) {
this.setData({ activePostId: null });
} else {
this.setData({ activePostId: postId });
}
},
hideActionPopup() {
if (this.data.activePostId) {
this.setData({ activePostId: null });
}
},
stopPropagation() {
// Just stop event propagation, do nothing
},
// Like post
likePost(e) {
const postId = e.currentTarget.dataset.id;
const posts = this.data.posts.map(post => {
if (post.id === postId) {
const likes = [...post.likes];
const myName = '我的花园';
if (likes.includes(myName)) {
// Unlike
const idx = likes.indexOf(myName);
likes.splice(idx, 1);
} else {
// Like
likes.push(myName);
}
return { ...post, likes };
}
return post;
});
this.setData({
posts,
activePostId: null // Hide popup after action
}, () => {
this.updateDisplayedPosts();
});
},
// Show comment input bar
showCommentInput(e) {
const postId = e.currentTarget.dataset.id;
this.setData({
showCommentBar: true,
commentingPostId: postId,
commentText: '',
activePostId: null // Hide popup
});
},
hideCommentBar() {
this.setData({
showCommentBar: false,
commentingPostId: null,
commentText: ''
});
},
onCommentInput(e) {
this.setData({ commentText: e.detail.value });
},
submitComment() {
const { commentText, commentingPostId } = this.data;
if (!commentText.trim()) {
return;
}
const posts = this.data.posts.map(post => {
if (post.id === commentingPostId) {
const comments = [...post.comments, {
id: Date.now().toString(),
user: '我的花园',
content: commentText.trim()
}];
return { ...post, comments };
}
return post;
});
this.setData({
posts,
showCommentBar: false,
commentingPostId: null,
commentText: ''
}, () => {
this.updateDisplayedPosts();
wx.showToast({ title: '评论成功', icon: 'success' });
});
},
goToCreatePost() {
wx.navigateTo({
url: '/pages/community/create/index'
});
}
})