|
|
import http from '../../../utils/api'const baseUrl = require('../../../utils/baseUrl')
Page({ data: { postId: null, // 存储帖子ID
post: null, postHf: [], // 帖子回复列表
replyContent: '', baseUrl: baseUrl, replyTarget: { type: '', // 'post'或'reply'或'comment'
id: '', // 回复或评论的ID
nickName: '', replyIndex: null, commentIndex: null, parentId: null // 父级ID(用于二级评论)
}, replyPlaceholder: '输入您的回复...', isInputFocused: false, inputTransformY: '0', isSubmitting: false, showPreview: false, previewImages: [], previewIndex: 0, loading: false, scrollToId: '', keyboardHeight: 0 },
onLoad: function (options) { const postId = options.id this.setData({ postId: postId }) this.loadPostDetail(postId); this.getforumReply(postId)
// 监听键盘高度变化
wx.onKeyboardHeightChange(res => { if (res.height > 0) { this.setData({ keyboardHeight: res.height }); } }); },
// 加载帖子详情
loadPostDetail: function (postId) { this.setData({ loading: true });
http.forumDetails({ data: { id: postId }, success: res => { console.log('帖子详情:', res); const postData = res.data const images = postData.images ? postData.images.split(',') : [] this.setData({ post: postData, images: images, loading: false }); }, fail: err => { console.error('加载帖子详情失败:', err); wx.showToast({ title: '加载失败', icon: 'none' }); this.setData({ loading: false }); } }) },
// 帖子回复列表
getforumReply(postId) { http.forumReply({ data: { questionId: postId }, success: res => { console.log('回复列表:', res); this.setData({ postHf: res.rows || [] }) }, fail: err => { console.error('加载回复列表失败:', err); this.setData({ postHf: [] }) } }) },
// 滚动监听
onScroll: function (e) { // 可以在这里实现滚动相关逻辑
},
// 输入框获取焦点
onInputFocus: function (e) { this.setData({ isInputFocused: true, inputTransformY: `-${e.detail.height}px` }); },
// 输入框失去焦点
onInputBlur: function () { this.setData({ isInputFocused: false, inputTransformY: '0' }); },
// 回复输入
onReplyInput: function (e) { this.setData({ replyContent: e.detail.value }); },
// 回复一级评论
replyToUser: function (e) { console.log(567,e); const { type, index, username } = e.currentTarget.dataset; const replyItem = this.data.postHf[index]; this.setData({ replyTarget: { type: 'reply', // 回复一级评论
id: replyItem.id, nickName: username, replyIndex: parseInt(index), parentId: null // 一级评论没有父级ID
}, replyPlaceholder: `回复 @${username}...`, replyContent: '', isInputFocused: true });
// 滚动到对应回复位置
setTimeout(() => { this.setData({ scrollToId: `reply-${replyItem.id}` }); }, 100); },
// 清除回复目标
clearReplyTarget: function () { this.setData({ replyTarget: { type: '', id: '', nickName: '', replyIndex: null, commentIndex: null, parentId: null }, replyPlaceholder: '输入您的回复...', replyContent: '' }); },
// 提交回复
submitReply: function () { const { replyContent, replyTarget, postId } = this.data; const content = replyContent.trim();
if (!content) { wx.showToast({ title: '请输入内容', icon: 'none' }); return; }
if (content.length > 500) { wx.showToast({ title: '回复内容不能超过500字', icon: 'none' }); return; }
this.setData({ isSubmitting: true });
// 准备提交数据
const submitData = { questionId: postId, // 帖子ID
content: content // 回复内容
};
// 如果有回复目标,添加父级ID
if (replyTarget.type === 'reply' && replyTarget.id) { submitData.parentId = replyTarget.id; // 回复一级评论
} else if (replyTarget.type === 'comment' && replyTarget.id) { submitData.parentId = replyTarget.id; // 回复二级评论
} // 如果type为'post'或为空,则表示直接回复帖子,parentId为空
console.log('提交数据:', submitData);
// 调用提交接口
http.commentReply({ data: submitData, success: res => { console.log('回复成功:', res); // 提交成功后的处理
this.handleReplySuccess(content, replyTarget); // 刷新回复列表
setTimeout(() => { this.getforumReply(postId); }, 500); }, fail: err => { console.error('回复失败:', err); wx.showToast({ title: '回复失败,请重试', icon: 'none', duration: 2000 }); this.setData({ isSubmitting: false }); } }); },
// 处理回复成功后的UI更新
handleReplySuccess: function (content, replyTarget) { // 清空输入框和回复目标
this.setData({ replyContent: '', replyTarget: { type: '', id: '', nickName: '', replyIndex: null, commentIndex: null, parentId: null }, replyPlaceholder: '输入您的回复...', isInputFocused: false, isSubmitting: false }); // 如果是直接回复帖子,滚动到底部
if (!replyTarget.type || replyTarget.type === 'post') { setTimeout(() => { wx.pageScrollTo({ scrollTop: 9999, duration: 300 }); }, 300); } },
// 图片预览
previewImage: function (e) { const imgIndex = e.currentTarget.dataset.imgIndex; const images = this.data.images;
this.setData({ showPreview: true, previewImages: images, previewIndex: imgIndex }); },
// 图片预览滑动
onSwiperChange: function (e) { this.setData({ previewIndex: e.detail.current }); },
// 隐藏预览
hidePreview: function () { this.setData({ showPreview: false }); },
// 下拉刷新
onPullDownRefresh: function () { if (this.data.postId) { this.loadPostDetail(this.data.postId); this.getforumReply(this.data.postId); } wx.stopPullDownRefresh(); },
// 页面上拉触底
onReachBottom: function () { // 这里可以实现加载更多回复的逻辑
console.log('加载更多回复'); },
// 页面卸载
onUnload: function () { // 移除键盘高度监听
wx.offKeyboardHeightChange(); }});
|