From c467599302eb9e203a877c88346dc9db8217f6c2 Mon Sep 17 00:00:00 2001 From: lee-zt <2960166273@qq.com> Date: Tue, 3 Jun 2025 21:34:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=AF=84=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/service/impl/CommentServiceImpl.java | 17 ++++-- .../src/main/resources/application-local.yaml | 56 +++++++++---------- .../vue-frontend/src/components/Header.vue | 2 +- .../vue-frontend/src/components/Login.vue | 11 ---- .../vue-frontend/src/stores/postdetail.js | 38 +++++++++++++ .../vue-frontend/src/views/PostDetail.vue | 37 +++++++++++- .../vue-frontend/src/views/UserPage.vue | 2 +- 7 files changed, 114 insertions(+), 49 deletions(-) diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/post/service/impl/CommentServiceImpl.java b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/post/service/impl/CommentServiceImpl.java index 764d485..da21f51 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/post/service/impl/CommentServiceImpl.java +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/java/com/luojia_channel/modules/post/service/impl/CommentServiceImpl.java @@ -185,22 +185,27 @@ public class CommentServiceImpl extends ServiceImpl impl @Transactional(rollbackFor = Exception.class) public void deleteComment(Long id) { validatePostUtil.validateCommentOwnership(id); - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(Comment.class) - .eq(Comment::getTopId, id); - int delete = commentMapper.delete(queryWrapper); - if(delete <= 0) { - throw new PostException("删除评论失败"); - } Comment comment = commentMapper.selectById(id); if(comment.getId().equals(comment.getTopId())) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(Comment.class) + .eq(Comment::getTopId, id); + int delete = commentMapper.delete(queryWrapper); + if(delete <= 0) { + throw new PostException("删除根评论失败"); + } redisUtil.zRemove("post:comment_by_time:" + comment.getPostId(), comment.getId()); redisUtil.zRemove("post:comment_by_hot:" + comment.getPostId(), comment.getId()); redisUtil.delete("comment:reply_by_time:" + comment.getTopId()); redisUtil.delete("comment:reply_by_hot:" + comment.getTopId()); }else{ + int delete = commentMapper.deleteById(id); + if(delete <= 0){ + throw new PostException("删除评论失败"); + } redisUtil.zRemove("comment:reply_by_time:" + comment.getTopId(), comment.getId()); redisUtil.zRemove("comment:reply_by_hot:" + comment.getTopId(), comment.getId()); } + // TODO 如果根评论删除,那么其他评论怎么办,目前做法是删除其下所有的子评论 } diff --git a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml index 7f22acc..00a8f8c 100644 --- a/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml +++ b/珞珈岛-项目相关文件/luojia-island/service/src/main/resources/application-local.yaml @@ -17,38 +17,38 @@ # accessKey: forely # secretKey: Forely123! -lj: - db: - host: 192.168.125.128 - password: MySQL@5678 - redis: - host: 192.168.125.128 - port: 6379 - password: Redis@9012 - rabbitmq: - host: 192.168.125.128 - port: 5672 - username: rabbit_admin - password: Rabbit@3456 - minio: - endpoint: http://192.168.125.128:9000 - accessKey: minio_admin - secretKey: Minio@1234 - #lj: # db: -# host: localhost -# password: 123456 +# host: 192.168.125.128 +# password: MySQL@5678 # redis: -# host: localhost +# host: 192.168.125.128 # port: 6379 -# password: 123456 +# password: Redis@9012 # rabbitmq: -# host: localhost +# host: 192.168.125.128 # port: 5672 -# username: guest -# password: guest +# username: rabbit_admin +# password: Rabbit@3456 # minio: -# endpoint: http://localhost:9005 -# accessKey: leezt -# secretKey: lzt264610 +# endpoint: http://192.168.125.128:9000 +# accessKey: minio_admin +# secretKey: Minio@1234 + +lj: + db: + host: localhost + password: 123456 + redis: + host: localhost + port: 6379 + password: 123456 + rabbitmq: + host: localhost + port: 5672 + username: guest + password: guest + minio: + endpoint: http://localhost:9005 + accessKey: leezt + secretKey: lzt264610 diff --git a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Header.vue b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Header.vue index 033d092..c0d48b6 100644 --- a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Header.vue +++ b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Header.vue @@ -92,7 +92,7 @@ const colleges = ref([ ]); // 默认头像 -const defaultAvatar = require("@/assets/default-avatar/boy_4.png"); +const defaultAvatar = require("@/assets/default-avatar/boy_1.png"); // 计算属性 const isLoggedIn = computed(() => userStore.isLoggedIn); diff --git a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue index 19e715e..f2bf4bc 100644 --- a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue +++ b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/components/Login.vue @@ -180,17 +180,6 @@ async function sendCode() { } -//前端测试登录 -//function Login1() { -// userStore.login({ -// avatar:require('@/assets/default-avatar/boy_1.png'), -// userName: '珈人一号', -// userid:1 -// }); -// emit('LoginSuccess'); -//} - - // 登录 async function login() { if (!isvalidForm.value) return; diff --git a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/stores/postdetail.js b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/stores/postdetail.js index 7f7e9cd..110a493 100644 --- a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/stores/postdetail.js +++ b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/stores/postdetail.js @@ -2,6 +2,20 @@ import { defineStore } from "pinia"; import request from "@/utils/request"; import { ElMessage } from "element-plus"; +// 递归删除子评论的工具函数 +function removeReply(list, commentId) { + for (let i = 0; i < list.length; i++) { + if (list[i].id === commentId) { + list.splice(i, 1); + return true; + } + if (list[i].replies && list[i].replies.length > 0) { + if (removeReply(list[i].replies, commentId)) return true; + } + } + return false; +} + export const usePostDetailStore = defineStore("postDetail", { state: () => ({ post: null, // 帖子主要信息 @@ -229,5 +243,29 @@ export const usePostDetailStore = defineStore("postDetail", { alert(e.response?.message || '发送评论失败,请稍后重试'); } }, + // 删除评论或回复 + async deleteComment(commentId, parentCommentId = null) { + try { + const res = await request.delete('/comment', { params: { id: commentId} }); + if (res.code === 200) { + // 一级评论 + if (!parentCommentId) { + this.comments = this.comments.filter(c => c.id !== commentId); + } else { + // 回复评论,递归删除 + removeReply(this.comments,commentId); + } + // 更新评论数 + if (this.post && this.post.commentCount > 0) { + this.post.commentCount--; + } + ElMessage.success('删除成功'); + } else { + ElMessage.error(res.message || '删除失败'); + } + } catch (e) { + ElMessage.error(e.response?.message || '删除失败,请稍后重试'); + } + }, }, }); \ No newline at end of file diff --git a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/views/PostDetail.vue b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/views/PostDetail.vue index 299f1e1..1f0bbbf 100644 --- a/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/views/PostDetail.vue +++ b/珞珈岛-项目相关文件/luojia-island/vue-frontend/src/views/PostDetail.vue @@ -57,6 +57,11 @@ +
    @@ -78,6 +83,11 @@ {{ reply.createTime ? formatTime(reply.createTime) : '' }} 赞 {{ reply.likeCount ?? 0 }} + @@ -108,6 +118,7 @@