124 lines
4.0 KiB
JavaScript
124 lines
4.0 KiB
JavaScript
import request from '../../../utils/request';
|
|
|
|
Page({
|
|
data: {
|
|
myPublishedPosts: [],
|
|
current: 1,
|
|
pageSize: 10,
|
|
hasMore: true,
|
|
isLoading: false,
|
|
isRefreshing: false
|
|
},
|
|
|
|
onLoad() {
|
|
this.loadMyPosts(true);
|
|
},
|
|
|
|
onPullDownRefresh() {
|
|
if (this.data.isLoading) return;
|
|
this.setData({ isRefreshing: true });
|
|
this.loadMyPosts(true).then(() => {
|
|
this.setData({ isRefreshing: false });
|
|
});
|
|
},
|
|
|
|
onReachBottom() {
|
|
if (this.data.hasMore && !this.data.isLoading) {
|
|
this.loadMyPosts(false);
|
|
}
|
|
},
|
|
|
|
async loadMyPosts(reset = false) {
|
|
if (this.data.isLoading) return;
|
|
this.setData({ isLoading: true });
|
|
|
|
const current = reset ? 1 : this.data.current;
|
|
const { pageSize } = this.data;
|
|
|
|
try {
|
|
const res = await request.post('/post/myPost', {
|
|
current,
|
|
pageSize
|
|
});
|
|
|
|
const data = res.data || res || {};
|
|
const records = data.records || data.list || [];
|
|
|
|
const posts = records.map(item => {
|
|
const imgList = item.imgList || [];
|
|
return {
|
|
id: item.id,
|
|
content: item.content || '',
|
|
time: this._formatTime(item.createdAt || item.createTime),
|
|
images: imgList.map(img => img.url),
|
|
likes: item.likeList || [],
|
|
comments: item.commentList || [],
|
|
hasReviewed: item.hasReviewed
|
|
};
|
|
});
|
|
|
|
if (reset) {
|
|
this.setData({
|
|
myPublishedPosts: posts,
|
|
current: current + 1,
|
|
hasMore: posts.length >= pageSize,
|
|
isLoading: false
|
|
});
|
|
} else {
|
|
this.setData({
|
|
myPublishedPosts: [...this.data.myPublishedPosts, ...posts],
|
|
current: current + 1,
|
|
hasMore: posts.length >= pageSize,
|
|
isLoading: false
|
|
});
|
|
}
|
|
} catch (err) {
|
|
console.error('Load my posts failed', err);
|
|
this.setData({ isLoading: false });
|
|
wx.showToast({ title: '加载失败', icon: 'none' });
|
|
}
|
|
},
|
|
|
|
_formatTime(dateStr) {
|
|
if (!dateStr) return '';
|
|
const d = new Date(dateStr);
|
|
const now = new Date();
|
|
const diffMs = now - d;
|
|
const diffMin = Math.floor(diffMs / 60000);
|
|
if (diffMin < 1) return '刚刚';
|
|
if (diffMin < 60) return diffMin + '分钟前';
|
|
const diffHour = Math.floor(diffMin / 60);
|
|
if (diffHour < 24) return diffHour + '小时前';
|
|
const diffDay = Math.floor(diffHour / 24);
|
|
if (diffDay < 7) return diffDay + '天前';
|
|
const month = (d.getMonth() + 1).toString().padStart(2, '0');
|
|
const day = d.getDate().toString().padStart(2, '0');
|
|
return `${month}-${day}`;
|
|
},
|
|
|
|
deletePost(e) {
|
|
const postId = e.currentTarget.dataset.id;
|
|
wx.showModal({
|
|
title: '删除动态',
|
|
content: '确定要删除这条动态吗?',
|
|
confirmColor: '#EF5350',
|
|
success: (res) => {
|
|
if (!res.confirm) return;
|
|
wx.showLoading({ title: '删除中...' });
|
|
|
|
// Use new API: POST /post/delete with ids array
|
|
request.post('/post/delete', { ids: [postId] }).then(() => {
|
|
wx.hideLoading();
|
|
wx.showToast({ title: '已删除', icon: 'success' });
|
|
// Remove from list locally
|
|
const newList = this.data.myPublishedPosts.filter(p => p.id !== postId);
|
|
this.setData({ myPublishedPosts: newList });
|
|
}).catch(() => {
|
|
wx.hideLoading();
|
|
wx.showToast({ title: '删除失败', icon: 'none' });
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|