161 lines
4.2 KiB
JavaScript
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'
|
|
});
|
|
}
|
|
})
|