diff --git a/my-project-backend/src/main/java/com/example/controller/ForumController.java b/my-project-backend/src/main/java/com/example/controller/ForumController.java index 7878fb9..c4e047e 100644 --- a/my-project-backend/src/main/java/com/example/controller/ForumController.java +++ b/my-project-backend/src/main/java/com/example/controller/ForumController.java @@ -106,4 +106,11 @@ public class ForumController { @RequestParam @Min(0) int page) { return RestBean.success(topicService.comments(tid, page + 1)); } + + @GetMapping("/delete-comment") + public RestBean deleteComment(@RequestParam @Min(0) int id, + @RequestAttribute(Const.ATTR_USER_ID) int uid) { + topicService.deleteComment(id, uid); + return RestBean.success(); + } } diff --git a/my-project-backend/src/main/java/com/example/service/TopicService.java b/my-project-backend/src/main/java/com/example/service/TopicService.java index f3f78a5..8dceec2 100644 --- a/my-project-backend/src/main/java/com/example/service/TopicService.java +++ b/my-project-backend/src/main/java/com/example/service/TopicService.java @@ -24,5 +24,6 @@ public interface TopicService extends IService { void interact(Interact interact, boolean state); List listCollectTopic(int uid); String createComment(AddCommentVO vo, int uid); + void deleteComment(int id, int uid); List comments(int tid, int pageNumber); } diff --git a/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java b/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java index 5f86ac3..dcf3977 100644 --- a/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java +++ b/my-project-backend/src/main/java/com/example/service/impl/TopicServiceImpl.java @@ -74,7 +74,7 @@ public class TopicServiceImpl extends ServiceImpl implements @Override public String createTopic(int uid, TopicCreateVO vo) { - if(!this.textLimitCheck(vo.getContent())) + if(!this.textLimitCheck(vo.getContent(), 20000)) return "文章长度过大,发文失败!"; String key = Const.FORUM_TOPIC_CREATE_COUNTER + uid; if(!flowUtils.limitPeriodCounterCheck(key, 3, 3600)) @@ -161,6 +161,8 @@ public class TopicServiceImpl extends ServiceImpl implements @Override public String createComment(AddCommentVO vo, int uid) { + if(!this.textLimitCheck(JSONObject.parseObject(vo.getContent()), 2000)) + return "评论长度过大,发表失败!"; String key = Const.FORUM_TOPIC_COMMENT_COUNTER + uid; if(!flowUtils.limitPeriodCounterCheck(key, 2, 60)) return "发表评论频繁,请稍后再试!"; @@ -172,6 +174,14 @@ public class TopicServiceImpl extends ServiceImpl implements return null; } + @Override + public void deleteComment(int id, int uid) { + commentMapper.delete(Wrappers.query() + .eq("id", id) + .eq("uid", uid) + ); + } + @Override public List comments(int tid, int pageNumber) { Page comments = Page.of(pageNumber, 10); @@ -279,12 +289,12 @@ public class TopicServiceImpl extends ServiceImpl implements } } - private boolean textLimitCheck(JSONObject object) { + private boolean textLimitCheck(JSONObject object, int limit) { if(object == null) return false; long length = 0; for (Object op : object.getJSONArray("ops")) { length += JSONObject.from(op).getString("insert").length(); } - return length <= 20000; + return length <= limit; } } diff --git a/my-project-frontend/src/components/TopicCommentEditor.vue b/my-project-frontend/src/components/TopicCommentEditor.vue index 5508dfe..dae2db6 100644 --- a/my-project-frontend/src/components/TopicCommentEditor.vue +++ b/my-project-frontend/src/components/TopicCommentEditor.vue @@ -19,6 +19,10 @@ function init() { } function submitComment() { + if(deltaToText(content).length > 2000) { + ElMessage.warning('评论字数长度已经超出最大限制,请缩减评论内容!') + return + } post('/api/forum/add-comment', { tid: props.tid, content: JSON.stringify(content.value), @@ -29,11 +33,17 @@ function submitComment() { }) } -function deltaToSimpleText(delta) { +function deltaToText(delta) { + if(!delta?.ops) return "" let str = '' - for (let op of JSON.parse(delta).ops) { - str += op.insert + for (let ops of delta.ops) { + str += ops.insert } + return str.replace(/\s/g, "") +} + +function deltaToSimpleText(delta) { + let str = deltaToText(JSON.parse(delta)) if(str.length > 35) str = str.substring(0, 35) + "..." return str } @@ -52,7 +62,10 @@ function deltaToSimpleText(delta) { -
+
+
+ 字数统计: {{deltaToText(content).length}}(最大支持2000字) +
发表评论
diff --git a/my-project-frontend/src/views/forum/TopicDetail.vue b/my-project-frontend/src/views/forum/TopicDetail.vue index 0c72943..c809576 100644 --- a/my-project-frontend/src/views/forum/TopicDetail.vue +++ b/my-project-frontend/src/views/forum/TopicDetail.vue @@ -77,6 +77,13 @@ function loadComments(page){ topic.page = page + 1 get(`/api/forum/comments?tid=${tid}&page=${page}`, data => topic.comments = data) } + +function deleteComment(id) { + get(`/api/forum/delete-comment?id=${id}`, () => { + ElMessage.success('删除评论成功!') + loadComments(topic.page - 1) + }) +}