This commit is contained in:
mzltMpfqGS
2026-04-15 19:45:16 +08:00
commit e4a087e67e
301 changed files with 35048 additions and 0 deletions

View File

@@ -0,0 +1,250 @@
// pages/article-detail/article-detail.js
// 文章详情逻辑处理
const app = getApp()
const api = require('../../services/api')
Page({
data: {
articleId: null,
article: null,
commentList: [],
commentPage: 1,
commentPageSize: 10,
commentHasMore: true,
commentLoading: false,
commentContent: '',
replyTo: null,
isFavorite: false,
isLike: false,
likeCount: 0,
favoriteCount: 0
},
onLoad(options) {
if (options.id) {
this.setData({ articleId: options.id })
this.loadArticleDetail()
this.loadCommentList()
}
},
onShow() {
if (this.data.articleId) {
api.getArticleDetail(this.data.articleId).then(res => {
if (res.code === 200 && res.data) {
this.setData({
isFavorite: res.data.isFavorite || false,
isLike: res.data.isLike || false,
likeCount: res.data.likeCount || 0,
favoriteCount: res.data.favoriteCount || 0
})
}
})
}
},
onShareAppMessage() {
const article = this.data.article
if (article) {
return {
title: article.title,
path: `/pages/article-detail/article-detail?id=${article.id}`,
imageUrl: article.coverImage
}
}
},
// 加载文章详情
loadArticleDetail() {
wx.showLoading({ title: '加载中...' })
api.getArticleDetail(this.data.articleId).then(res => {
wx.hideLoading()
if (res.code === 200) {
this.setData({
article: res.data,
isFavorite: res.data.isFavorite || false,
isLike: res.data.isLike || false,
likeCount: res.data.likeCount || 0,
favoriteCount: res.data.favoriteCount || 0
})
this.addViewCount()
} else {
wx.showToast({ title: res.message || '加载失败', icon: 'none' })
}
}).catch(() => {
wx.hideLoading()
wx.showToast({ title: '加载失败', icon: 'none' })
})
},
// 增加浏览次数
addViewCount() {
api.addViewCount({ articleId: this.data.articleId }).then(() => {
const article = this.data.article
if (article) {
article.viewCount = (article.viewCount || 0) + 1
this.setData({ article })
}
})
},
// 加载评论列表
loadCommentList() {
if (this.data.commentLoading || !this.data.commentHasMore) return
this.setData({ commentLoading: true })
api.getCommentList({
articleId: this.data.articleId,
page: this.data.commentPage,
pageSize: this.data.commentPageSize
}).then(res => {
this.setData({ commentLoading: false })
if (res.code === 200) {
const list = res.data.list || []
this.setData({
commentList: this.data.commentPage === 1 ? list : this.data.commentList.concat(list),
commentHasMore: list.length >= this.data.commentPageSize
})
}
}).catch(() => {
this.setData({ commentLoading: false })
})
},
// 触底加载更多评论
onReachBottom() {
if (this.data.commentHasMore && !this.data.commentLoading) {
this.setData({ commentPage: this.data.commentPage + 1 })
this.loadCommentList()
}
},
// 收藏文章
onFavorite() {
if (!app.checkLogin()) return
const isFavorite = !this.data.isFavorite
api.updateFavorite({ articleId: this.data.articleId, isFavorite }).then(res => {
if (res.code === 200) {
this.setData({
isFavorite,
favoriteCount: isFavorite ? this.data.favoriteCount + 1 : this.data.favoriteCount - 1
})
wx.showToast({
title: isFavorite ? '收藏成功' : '取消收藏',
icon: 'success'
})
}
})
},
// 点赞文章
onLike() {
if (!app.checkLogin()) return
const isLike = !this.data.isLike
api.updateLike({ articleId: this.data.articleId, isLike }).then(res => {
if (res.code === 200) {
this.setData({
isLike,
likeCount: isLike ? this.data.likeCount + 1 : this.data.likeCount - 1
})
}
})
},
// 输入评论
onCommentInput(e) {
this.setData({ commentContent: e.detail.value })
},
// 提交评论
submitComment() {
if (!app.checkLogin()) return
const content = this.data.commentContent.trim()
if (!content) {
wx.showToast({ title: '请输入评论内容', icon: 'none' })
return
}
api.addComment({
articleId: this.data.articleId,
content,
parentId: this.data.replyTo ? this.data.replyTo.id : null
}).then(res => {
if (res.code === 200) {
wx.showToast({ title: '评论成功', icon: 'success' })
this.setData({ commentContent: '', replyTo: null })
this.refreshCommentList()
} else {
wx.showToast({ title: res.message || '评论失败', icon: 'none' })
}
})
},
// 刷新评论列表
refreshCommentList() {
this.setData({ commentPage: 1, commentList: [], commentHasMore: true })
this.loadCommentList()
},
// 回复评论
onReply(e) {
const comment = e.currentTarget.dataset.comment
this.setData({ replyTo: comment })
wx.showModal({
title: '回复 ' + comment.nickname,
editable: true,
placeholderText: '请输入回复内容',
success: res => {
if (res.confirm && res.content) {
api.addComment({
articleId: this.data.articleId,
content: res.content,
parentId: comment.id
}).then(res => {
if (res.code === 200) {
wx.showToast({ title: '回复成功', icon: 'success' })
this.refreshCommentList()
}
})
}
}
})
},
// 复制链接
onCopyLink() {
wx.setClipboardData({
data: this.data.article.shareUrl || '',
success: () => {
wx.showToast({ title: '链接已复制', icon: 'success' })
}
})
},
// 关注作者
onFollow() {
if (!app.checkLogin()) return
const article = this.data.article
if (!article || !article.authorId) return
api.followUser({ userId: article.authorId }).then(res => {
if (res.code === 200) {
wx.showToast({ title: '关注成功', icon: 'success' })
article.isFollowing = true
this.setData({ article })
}
})
}
})
/**
* @联系作者16768118056
* @描述:(此项目非免费分享)源码百分百可用,搞定毕设不发愁,支持远程调试安装、二次开发、定制、讲解、文档类。
* @访问https://www.notmaker.com/detail/8326a897119d4542896c863a69d7bbe7/gtt20260415查看完整运行演示。
*/