From 80df2c3ad713f04ce327a4a1555351398a215a34 Mon Sep 17 00:00:00 2001 From: Maverick-72 <2983885355@qq.com> Date: Wed, 4 May 2022 09:29:31 +0800 Subject: [PATCH 01/23] =?UTF-8?q?=E6=B2=A1=E5=95=A5=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/src/views/ContentManagement.vue | 7 ++++--- vueblog/src/views/blogDetail/BlogDetail.vue | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/vueblog/src/views/ContentManagement.vue b/vueblog/src/views/ContentManagement.vue index dd7cd364..c76c0c57 100644 --- a/vueblog/src/views/ContentManagement.vue +++ b/vueblog/src/views/ContentManagement.vue @@ -98,15 +98,16 @@ export default { From 12c1cf48b13120ab3a984cadaaebfc0a9133e413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=A4=A9=E6=96=87?= <1002744113@qq.com> Date: Wed, 4 May 2022 22:25:26 +0800 Subject: [PATCH 03/23] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9A=E6=B7=BB=E5=8A=A0=E8=AF=84=E8=AE=BA?= =?UTF-8?q?=E5=92=8C=E5=88=A0=E9=99=A4=E8=AF=84=E8=AE=BA=EF=BC=8C=E4=BD=86?= =?UTF-8?q?=E8=BF=98=E6=9C=89=E4=BA=9B=E9=97=AE=E9=A2=98=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=94=B9=E8=BF=9B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blog/controller/BlogController.java | 8 +- .../blog/controller/CommentController.java | 52 ++++++++++++ .../advice/ProjectExceptionAdvice.java | 12 ++- .../userException/UserArgumentException.java | 9 +++ .../sticki/blog/mapper/BlogGeneralMapper.java | 6 ++ .../cn/sticki/blog/mapper/CommentMapper.java | 10 +++ .../cn/sticki/blog/pojo/domain/Comment.java | 22 +++++ .../filter/AuthenticationTokenFilter.java | 2 +- .../sticki/blog/service/CommentService.java | 33 ++++++++ .../blog/service/impl/CommentServiceImpl.java | 80 +++++++++++++++++++ .../blog/service/impl/UserServiceImpl.java | 2 + 11 files changed, 229 insertions(+), 7 deletions(-) create mode 100644 blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/exception/userException/UserArgumentException.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/mapper/CommentMapper.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/service/CommentService.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/service/impl/CommentServiceImpl.java diff --git a/blog_main/src/main/java/cn/sticki/blog/controller/BlogController.java b/blog_main/src/main/java/cn/sticki/blog/controller/BlogController.java index 7953fc80..3fd67798 100644 --- a/blog_main/src/main/java/cn/sticki/blog/controller/BlogController.java +++ b/blog_main/src/main/java/cn/sticki/blog/controller/BlogController.java @@ -4,7 +4,9 @@ import cn.sticki.blog.pojo.domain.BlogBasic; import cn.sticki.blog.pojo.domain.User; import cn.sticki.blog.pojo.dto.UserBlogActionStatusDTO; -import cn.sticki.blog.pojo.vo.*; +import cn.sticki.blog.pojo.vo.BlogListVO; +import cn.sticki.blog.pojo.vo.HotBlogListVO; +import cn.sticki.blog.pojo.vo.RestTemplate; import cn.sticki.blog.security.AuthenticationFacade; import cn.sticki.blog.service.BlogActionService; import cn.sticki.blog.service.BlogBasicService; @@ -70,9 +72,7 @@ public RestTemplate recommendBlog(@RequestParam(defaultValue = "1") int page) { public RestTemplate searchBlog(@NotNull String key, @RequestParam(defaultValue = "1") int page) { log.debug("searchBlog,search->{},page->{}", key, page); BlogListVO blogListVO = blogBasicService.searchBlog(key, page, pageSize); - IListVO blogList = new ListVO<>(); - blogList.setRecords(blogListVO.getRecords()); - return new RestTemplate(blogList); + return new RestTemplate(blogListVO); } /** diff --git a/blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java b/blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java new file mode 100644 index 00000000..c3d4c599 --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java @@ -0,0 +1,52 @@ +package cn.sticki.blog.controller; + +import cn.sticki.blog.exception.userException.UserArgumentException; +import cn.sticki.blog.pojo.domain.Comment; +import cn.sticki.blog.pojo.domain.User; +import cn.sticki.blog.pojo.vo.RestTemplate; +import cn.sticki.blog.security.AuthenticationFacade; +import cn.sticki.blog.service.CommentService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@Slf4j +@RestController +@RequestMapping("/comment") +public class CommentController { + + @Resource + private AuthenticationFacade authenticationFacade; + + @Resource + private CommentService commentService; + + /** + * 新增评论 + * + * @param comment 必须传入被评论的博客id和评论内容 + */ + @PostMapping + public RestTemplate createComment(@RequestBody Comment comment) { + if (comment.getBlogId() == null || comment.getContent() == null) + throw new UserArgumentException(); + User user = authenticationFacade.getUser(); + comment.setUserId(user.getId()); + commentService.create(comment); + return new RestTemplate(); + } + + /** + * 删除评论 + * + * @param id 评论id + */ + @DeleteMapping + public RestTemplate deleteComment(@RequestParam Integer id) { + User user = authenticationFacade.getUser(); + commentService.checkAndDelete(user.getId(), id); + return new RestTemplate(); + } + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/controller/advice/ProjectExceptionAdvice.java b/blog_main/src/main/java/cn/sticki/blog/controller/advice/ProjectExceptionAdvice.java index 54934a13..06de0051 100644 --- a/blog_main/src/main/java/cn/sticki/blog/controller/advice/ProjectExceptionAdvice.java +++ b/blog_main/src/main/java/cn/sticki/blog/controller/advice/ProjectExceptionAdvice.java @@ -8,12 +8,14 @@ import org.springframework.beans.TypeMismatchException; import org.springframework.http.converter.HttpMessageConversionException; import org.springframework.validation.BindException; +import org.springframework.web.HttpMediaTypeException; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MissingRequestValueException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.NoHandlerFoundException; +import javax.servlet.ServletException; import java.net.ConnectException; import java.util.ArrayList; @@ -32,13 +34,19 @@ public RestTemplate doException(Exception e) { return new RestTemplate(500, "服务器故障,请稍后再试", null, false); } + @ExceptionHandler(ServletException.class) + public RestTemplate doServletException(Exception e) { + log.warn("请求异常,{}", e.getMessage()); + return new RestTemplate(400, "请求异常", null, false); + } + @ExceptionHandler(HttpMessageConversionException.class) public RestTemplate doHttpMessageConversionException(HttpMessageConversionException e) { - e.printStackTrace(); + log.warn("数据异常,{}", e.getMessage()); return new RestTemplate(400, "数据异常", null, false); } - @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + @ExceptionHandler({HttpRequestMethodNotSupportedException.class, HttpMediaTypeException.class}) public RestTemplate doHttpRequestMethodNotSupportedException(Exception e) { log.warn("请求方式异常,{}", e.getMessage()); return new RestTemplate(400, "请求方式异常", null, false); diff --git a/blog_main/src/main/java/cn/sticki/blog/exception/userException/UserArgumentException.java b/blog_main/src/main/java/cn/sticki/blog/exception/userException/UserArgumentException.java new file mode 100644 index 00000000..99a2d8cf --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/exception/userException/UserArgumentException.java @@ -0,0 +1,9 @@ +package cn.sticki.blog.exception.userException; + +public class UserArgumentException extends UserIllegalException { + + public UserArgumentException() { + super("用户参数异常"); + } + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/mapper/BlogGeneralMapper.java b/blog_main/src/main/java/cn/sticki/blog/mapper/BlogGeneralMapper.java index edcb84af..8fc2cef1 100644 --- a/blog_main/src/main/java/cn/sticki/blog/mapper/BlogGeneralMapper.java +++ b/blog_main/src/main/java/cn/sticki/blog/mapper/BlogGeneralMapper.java @@ -20,4 +20,10 @@ public interface BlogGeneralMapper extends BaseMapper { @Update("update blog_general set collection_num = collection_num - 1 where blog_id = #{blogId};") int decreaseCollectionNum(Integer blogId); + @Update("update blog_general set comment_num = comment_num + 1 where blog_id = #{blogId};") + int increaseCommentNum(Integer blogId); + + @Update("update blog_general set comment_num = comment_num - 1 where blog_id = #{blogId};") + int decreaseCommentNum(Integer blogId); + } diff --git a/blog_main/src/main/java/cn/sticki/blog/mapper/CommentMapper.java b/blog_main/src/main/java/cn/sticki/blog/mapper/CommentMapper.java new file mode 100644 index 00000000..dc22d2bb --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/mapper/CommentMapper.java @@ -0,0 +1,10 @@ +package cn.sticki.blog.mapper; + +import cn.sticki.blog.pojo.domain.Comment; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CommentMapper extends BaseMapper { + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java b/blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java new file mode 100644 index 00000000..ecea5d88 --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java @@ -0,0 +1,22 @@ +package cn.sticki.blog.pojo.domain; + +import lombok.Data; + +import java.sql.Timestamp; + +@Data +public class Comment { + + Integer id; // 评论id + + Integer userId; // 用户id + + Integer blogId; // 博客id + + String content; // 评论内容 + + Integer parentId; // 父评论id + + Timestamp createTime; // 创建时间 + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/security/filter/AuthenticationTokenFilter.java b/blog_main/src/main/java/cn/sticki/blog/security/filter/AuthenticationTokenFilter.java index b3627c6f..48cc0211 100644 --- a/blog_main/src/main/java/cn/sticki/blog/security/filter/AuthenticationTokenFilter.java +++ b/blog_main/src/main/java/cn/sticki/blog/security/filter/AuthenticationTokenFilter.java @@ -60,7 +60,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse if (user == null) { user = userMapper.selectById(id); } - log.debug("Token validate successful,user->{}", user); + log.debug("Token get success,user->{}", user); // TODO 获取权限信息封装到Authentication中 // 存入SecurityContextHolder,这里构造一个已认证的 authenticationToken ,之后就不用再认证了。 if (user != null) { diff --git a/blog_main/src/main/java/cn/sticki/blog/service/CommentService.java b/blog_main/src/main/java/cn/sticki/blog/service/CommentService.java new file mode 100644 index 00000000..bb71776e --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/service/CommentService.java @@ -0,0 +1,33 @@ +package cn.sticki.blog.service; + +import cn.sticki.blog.pojo.domain.Comment; + +public interface CommentService { + + /** + * 创建评论 + */ + void create(Comment comment); + + /** + * 删除评论 + * + * @param id 评论id + */ + void delete(int id); + + /** + * 检查评论发表人 + * + * @param userId 用户id + * @param commentId 评论id + * @return 若该评论是该用户发表的,返回true + */ + boolean checkCommentPublisher(int userId, int commentId); + + /** + * 检查发表人并删除评论 + */ + void checkAndDelete(int userId, int commentId); + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/service/impl/CommentServiceImpl.java b/blog_main/src/main/java/cn/sticki/blog/service/impl/CommentServiceImpl.java new file mode 100644 index 00000000..82149598 --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/service/impl/CommentServiceImpl.java @@ -0,0 +1,80 @@ +package cn.sticki.blog.service.impl; + +import cn.sticki.blog.exception.userException.UserIllegalException; +import cn.sticki.blog.mapper.BlogGeneralMapper; +import cn.sticki.blog.mapper.BlogMapper; +import cn.sticki.blog.mapper.CommentMapper; +import cn.sticki.blog.pojo.domain.Blog; +import cn.sticki.blog.pojo.domain.Comment; +import cn.sticki.blog.service.CommentService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.sql.Timestamp; + +@Slf4j +@Service +public class CommentServiceImpl implements CommentService { + + @Resource + private CommentMapper commentMapper; + + @Resource + private BlogMapper blogMapper; + + @Resource + private BlogGeneralMapper blogGeneralMapper; + + @Override + public void create(Comment comment) { + // 检查博客是否存在,检查父评论id是否在该博客下 + boolean exists; + if (comment.getParentId() != null) { + // 判断博客id和父评论id是否正确 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Comment::getBlogId, comment.getBlogId()).eq(Comment::getId, comment.getParentId()); + exists = commentMapper.exists(wrapper); + } else { + // 判断博客id是否存在 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Blog::getId, comment.getBlogId()); + exists = blogMapper.exists(wrapper); + } + if (!exists) throw new UserIllegalException("数据异常"); + comment.setId(null); + comment.setCreateTime(new Timestamp(System.currentTimeMillis())); + commentMapper.insert(comment); + blogGeneralMapper.increaseCommentNum(comment.getId()); + } + + @Override + public void delete(int id) { + int count = commentMapper.deleteById(id); + if (count == 0) + log.warn("comment 删除异常,id->{}", id); + else { + // 减少数量 + blogGeneralMapper.decreaseCommentNum(id); + } + } + + @Override + public boolean checkCommentPublisher(int userId, int commentId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(Comment::getUserId, userId).eq(Comment::getId, commentId); + return commentMapper.exists(wrapper); + } + + @Override + public void checkAndDelete(int userId, int commentId) { + if (!checkCommentPublisher(userId, commentId)) { + log.warn("非法删除评论,id->{},commentId->{}", userId, commentId); + throw new UserIllegalException(); + } else { + delete(commentId); + } + } + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/service/impl/UserServiceImpl.java b/blog_main/src/main/java/cn/sticki/blog/service/impl/UserServiceImpl.java index ddce25fc..eef51386 100644 --- a/blog_main/src/main/java/cn/sticki/blog/service/impl/UserServiceImpl.java +++ b/blog_main/src/main/java/cn/sticki/blog/service/impl/UserServiceImpl.java @@ -19,6 +19,7 @@ import org.jetbrains.annotations.NotNull; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -27,6 +28,7 @@ @Slf4j @Service +@Transactional public class UserServiceImpl implements UserService { @Resource From 2bd976f0dd8222c589557cb48372a55995618b54 Mon Sep 17 00:00:00 2001 From: Maverick-72 <2983885355@qq.com> Date: Thu, 5 May 2022 09:31:22 +0800 Subject: [PATCH 04/23] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E8=8E=B7=E5=8F=96=E5=8D=9A=E5=AE=A2=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/package-lock.json | 100 ++++++++++++++++++ .../P_user/Manage/managecontent.vue | 93 +++++++++++----- .../P_user/NavigationBar/navigationbar.vue | 3 +- .../P_user/PMELeftTabs/lefttabs2.vue | 2 +- vueblog/src/router/index.js | 2 +- vueblog/src/views/PersonalBlog.vue | 6 +- vueblog/src/views/blogDetail/BlogDetail.vue | 4 +- 7 files changed, 173 insertions(+), 37 deletions(-) diff --git a/vueblog/package-lock.json b/vueblog/package-lock.json index 341d0457..03e4626d 100644 --- a/vueblog/package-lock.json +++ b/vueblog/package-lock.json @@ -12,7 +12,9 @@ "bootstrap": "^3.4.1", "core-js": "^3.8.3", "element-ui": "^2.15.6", + "github-markdown-css": "^5.1.0", "jquery": "^3.6.0", + "markdown-it": "^13.0.0", "mavon-editor": "^2.10.4", "qs": "^6.10.3", "vue": "^2.6.14", @@ -3024,6 +3026,11 @@ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -5141,6 +5148,11 @@ "node": ">=6" } }, + "node_modules/github-markdown-css": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/github-markdown-css/-/github-markdown-css-5.1.0.tgz", + "integrity": "sha512-QLtORwHHtUHhPMHu7i4GKfP6Vx5CWZn+NKQXe+cBhslY1HEt0CTEkP4d/vSROKV0iIJSpl4UtlQ16AD8C6lMug==" + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5896,6 +5908,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -6197,6 +6217,29 @@ "node": ">=8" } }, + "node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + } + }, "node_modules/mavon-editor": { "version": "2.10.4", "resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.10.4.tgz", @@ -6211,6 +6254,11 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -8790,6 +8838,11 @@ "node": ">= 0.6" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -11973,6 +12026,11 @@ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -13692,6 +13750,11 @@ "pump": "^3.0.0" } }, + "github-markdown-css": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/github-markdown-css/-/github-markdown-css-5.1.0.tgz", + "integrity": "sha512-QLtORwHHtUHhPMHu7i4GKfP6Vx5CWZn+NKQXe+cBhslY1HEt0CTEkP4d/vSROKV0iIJSpl4UtlQ16AD8C6lMug==" + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -14291,6 +14354,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -14532,6 +14603,25 @@ "semver": "^6.0.0" } }, + "markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "requires": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + } + } + }, "mavon-editor": { "version": "2.10.4", "resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.10.4.tgz", @@ -14546,6 +14636,11 @@ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -16540,6 +16635,11 @@ "mime-types": "~2.1.24" } }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", diff --git a/vueblog/src/components/P_user/Manage/managecontent.vue b/vueblog/src/components/P_user/Manage/managecontent.vue index f3d027f7..2ebc7052 100644 --- a/vueblog/src/components/P_user/Manage/managecontent.vue +++ b/vueblog/src/components/P_user/Manage/managecontent.vue @@ -2,6 +2,8 @@
+
    @@ -30,7 +32,10 @@
    这里啥也没有啊
-
+
+ 啥也没搜到! +
+
{{ item.title }}
@@ -95,35 +100,42 @@ export default { // 显示遍历的列表 List: [], // 博客页数 - page:1, + page:0, // 搜索博客 searchblog:"", config:{ + params:{status:"0",page:"0"}, headers:{ - 'token':localStorage.getItem('token',{ - params:{ - status:"" - } - }) + 'token':localStorage.getItem('token') } } } }, - created(){ + async mounted(){ // 获取全部用户博客数据显示各种状态下的数据 - this.GetData() + // await this.GetData() + this.$refs.noneSearch.style.display="none" }, + // watch:{ + // config:{ + // handler(newName, oldName) { + // console.log('注意此时的config对象变化了',this.config); + // }, + // immediate: true + // } + // }, methods:{ - GetData(){ - console.log("开始调用") - this.$axios.get("/blog-console/blog-list",this.config).then(res=>{ - console.log("获取全部用户博客返回数据",res) - this.allList=res.data.data.blogList - this.List=this.allList + async GetData(){ + this.List=[] + await this.$axios.get("/blog-console/blog-list",this.config).then(res=>{ + this.allList=res.data.data.records + // this.page=res.data.data.pages + this.List=this.List.concat(this.allList) + // 将传参的页数标记增大1 + this.config.params.page+1 if(this.List.length>0){ this.$refs.writeBlog.style.display="none" } - console.log("此时应该展示的用户博客",this.List); }) }, // 手动选择部分 @@ -132,33 +144,43 @@ export default { }, // 滑动触底时调用 async infiniteHandler($state) { - console.log("其实已经到底了") - this.$axios - .get("/blog/list?page="+this.page) + await this.$axios + .get("/blog-console/blog-list",this.config) .then((res) => { - console.log("获取列表接口返回值",res) - if(res.data.data.length) { - this.page +=1; // 下一页 - this.allList = this.allList.concat(res.data.data); + if(res.data.data.records.length>0) { + this.config.params.page +=1; // 下一页 + this.allList = this.allList.concat(res.data.data.records); this.List=this.allList - console.log("此时所有的博客列表是",this.List) $state.loaded(); }else { - $state.complete(); + $state.complete(); } }) + if(this.List.length>0){ + this.$refs.writeBlog.style.display="none" + this.$refs.noneSearch.style.display="none" + } + console.log("此时所有的博客列表是",this.List) }, // 查找关键字博客列表 SearchBlog(){ this.$axios.get("/blog/search",{params:{ key:this.searchblog, }}).then(res=>{ - console.log("搜索博客返回的数据",res) + console.log("搜索返回的数据是",res.data) + if(res.data.data.records.length==0){ + // 显示啥都没搜到 + this.$refs.firstContent.style.display="none" + this.$refs.noneSearch.style.display="block" + }else{ + this.$refs.firstContent.style.display="block" + this.$refs.noneSearch.style.display="none" + this.List=res.data.records + } }) }, // 跳转至博客具体内容列表 TurnToShow(index){ - console.log("获取到的文章ID是",index) var routeUrl= this.$router.resolve({name:'BlogDetail',params:{blogId:index}}) window.open(routeUrl.href, '_blank'); }, @@ -173,6 +195,9 @@ export default { this.ScreenList[i].chose=false } this.ScreenList[index].chose=true + this.config.params.status=(index-1).toString() + this.config.params.page=1 + this.GetData()//所有博客 } } } @@ -225,7 +250,19 @@ export default { } .screening-conditionsB .writeBlog{ width: 100%; - height: 100%; + height: 500px; + text-align: center; + /* display: flex; + align-items: center; + justify-content: center; */ +} +.screening-conditionsB .nonesearch{ + width: 100%; + height: 500px; + font-size: 20px; + font-weight: 800; + color: red; + text-align: center; /* display: flex; align-items: center; justify-content: center; */ diff --git a/vueblog/src/components/P_user/NavigationBar/navigationbar.vue b/vueblog/src/components/P_user/NavigationBar/navigationbar.vue index fba09b48..f59ba996 100644 --- a/vueblog/src/components/P_user/NavigationBar/navigationbar.vue +++ b/vueblog/src/components/P_user/NavigationBar/navigationbar.vue @@ -177,7 +177,8 @@ export default { this.recentList = []; // 获取文章列表 await this.$axios.get("/blog-console/blog-list",{headers:{'token':localStorage.getItem('token')}}).then((res) => { - this.recentList = this.recentList.concat(res.data.data.blogList); + console.log("获取博客列表成功",res) + this.recentList = this.recentList.concat(res.data.data.records); console.log("获取到的博客列表数据", this.recentList); this.DataChange(); }); diff --git a/vueblog/src/components/P_user/PMELeftTabs/lefttabs2.vue b/vueblog/src/components/P_user/PMELeftTabs/lefttabs2.vue index 64275adb..c90c5575 100644 --- a/vueblog/src/components/P_user/PMELeftTabs/lefttabs2.vue +++ b/vueblog/src/components/P_user/PMELeftTabs/lefttabs2.vue @@ -13,7 +13,7 @@
密码
- {{}} + 修改密码
diff --git a/vueblog/src/router/index.js b/vueblog/src/router/index.js index c55767dd..f53258e8 100644 --- a/vueblog/src/router/index.js +++ b/vueblog/src/router/index.js @@ -20,7 +20,7 @@ const routes = [ { path: '/', name: 'Index', - redirect:{name:"Home"} + redirect:{name:"PersonalBlog"} }, { diff --git a/vueblog/src/views/PersonalBlog.vue b/vueblog/src/views/PersonalBlog.vue index fabe51e1..a8660a74 100644 --- a/vueblog/src/views/PersonalBlog.vue +++ b/vueblog/src/views/PersonalBlog.vue @@ -133,7 +133,7 @@ export default { await this.$axios .post("/login/login", qs.stringify(params)) .then((res) => { - console.log("登录成功",res) + console.log("登录成功",res.data.data) // 将token设置到本地浏览器中 window.localStorage.setItem("token", res.headers.token); window.localStorage.setItem( @@ -147,10 +147,8 @@ export default { .get("/user", this.config) .then((res) => { localStorage.setItem("userMessage", JSON.stringify(res.data.data)); - }) - .then((res) => { this.userMessage = res.data.data - }); + }) }, TurnToEditPage() { // 跳转至编辑页面 diff --git a/vueblog/src/views/blogDetail/BlogDetail.vue b/vueblog/src/views/blogDetail/BlogDetail.vue index 0d6e50af..7aaf31de 100644 --- a/vueblog/src/views/blogDetail/BlogDetail.vue +++ b/vueblog/src/views/blogDetail/BlogDetail.vue @@ -161,7 +161,7 @@ @@ -218,6 +371,120 @@ export default { display: none; } +/*文章点赞收藏底部开始*/ +.fixed1 { + width: 1070px; + height: 48px; + background-color: pink; + /*position: relative;*/ + position: fixed; + /*bottom: 0;*/ + top: 735px; + z-index: 10; +} +.fixed2 { + width: 1070px; + height: 48px; + background-color: green; +} +.fixedNavbar { + width: 1070px; + height: 48px; + background-color: pink; + /*position: relative;*/ + position: fixed; + /*bottom: 0;*/ + top: 735px; + z-index: 10; +} + +.right-toolbox { + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + padding: 17px 24px; + height: 64px; + box-sizing: border-box; + background: #fff; + box-shadow: 0 -1px 8px 0 rgba(0, 0, 0, 0.06); + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} +.toolbox-left { + display: flex; + align-items: center; +} +.profile-box { + display: flex; + flex-wrap: nowrap; + align-items: center; +} +.profile-box .profile-img { + width: 32px; + height: 32px; + border-radius: 32px; + border: 1px solid #f5f6f7; + margin-right: 8px; +} +.profile-box .profile-name { + height: 24px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 16px; + font-weight: 600; + color: #222226; + line-height: 24px; + margin-right: 8px; +} +.profile-attend { + position: relative; +} +.profile-attend a { + display: block; + min-width: 60px; + height: 28px; + background: #fff; + border-radius: 16px; + font-size: 14px; + line-height: 28px; + text-align: center; + border: 1px solid #ccccd8; + color: #555666; +} +.profile-attend a:hover { + border: 1px solid #555666; +} + +.toolbox-middle { + display: flex; +} +.toolbox-middle .item-box { + display: flex; + align-items: center; + margin-right: 20px; +} +.toolbox-middle .item-box img { + width: 24px; + height: 24px; + margin-right: 4px; +} +.toolbox-middle .item-box span { + color: #999aaa; + font-size: 14px; +} + +/*文章点赞收藏底部结束*/ + +/*评论开始*/ +.test-box { + width: 1070px; + height: 100px; + background-color: skyblue; +} +/*评论结束*/ + .text { font-size: 14px; } @@ -257,6 +524,7 @@ export default { /*博客详情开始*/ .main-rt { width: 1070px; + position: relative; } .article-info { display: flex; @@ -280,6 +548,11 @@ export default { height: 16px; line-height: 32px; } +.article-info .collection { + display: flex; + align-items: center; + cursor: pointer; +} /*博客详情结束*/ /* 左边开始 */ From dd75eca62c55ec887e094280eabfff59518b1f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=A4=A9=E6=96=87?= <1002744113@qq.com> Date: Thu, 5 May 2022 22:23:53 +0800 Subject: [PATCH 06/23] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=AF=84=E8=AE=BA=E5=88=97=E8=A1=A8=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E5=B9=B6=E5=9C=A8=E8=8E=B7=E5=8F=96=E5=8D=9A?= =?UTF-8?q?=E5=AE=A2=E5=86=85=E5=AE=B9=E6=8E=A5=E5=8F=A3=E7=9A=84=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E4=B8=AD=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E9=A1=B5=E7=9A=84=E8=AF=84=E8=AE=BA=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blog/controller/CommentController.java | 12 +++ .../blog/mapper/CommentBasicMapper.java | 10 +++ .../cn/sticki/blog/pojo/domain/Comment.java | 2 + .../sticki/blog/pojo/domain/CommentBasic.java | 30 +++++++ .../cn/sticki/blog/pojo/dto/CommentDTO.java | 17 ++++ .../cn/sticki/blog/pojo/vo/BlogContentVO.java | 2 + .../cn/sticki/blog/pojo/vo/CommentListVO.java | 13 +++ .../java/cn/sticki/blog/pojo/vo/ListVO.java | 2 +- .../sticki/blog/service/CommentService.java | 12 ++- .../service/impl/BlogBasicServiceImpl.java | 5 ++ .../blog/service/impl/CommentServiceImpl.java | 81 ++++++++++++++++++- .../impl/UserCollectBlogServiceImpl.java | 7 +- blog_main/src/main/resources/application.yml | 2 +- 13 files changed, 187 insertions(+), 8 deletions(-) create mode 100644 blog_main/src/main/java/cn/sticki/blog/mapper/CommentBasicMapper.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/pojo/domain/CommentBasic.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/pojo/dto/CommentDTO.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/pojo/vo/CommentListVO.java diff --git a/blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java b/blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java index c3d4c599..b2e92ebd 100644 --- a/blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java +++ b/blog_main/src/main/java/cn/sticki/blog/controller/CommentController.java @@ -3,6 +3,7 @@ import cn.sticki.blog.exception.userException.UserArgumentException; import cn.sticki.blog.pojo.domain.Comment; import cn.sticki.blog.pojo.domain.User; +import cn.sticki.blog.pojo.vo.CommentListVO; import cn.sticki.blog.pojo.vo.RestTemplate; import cn.sticki.blog.security.AuthenticationFacade; import cn.sticki.blog.service.CommentService; @@ -49,4 +50,15 @@ public RestTemplate deleteComment(@RequestParam Integer id) { return new RestTemplate(); } + /** + * 获取评论列表 + * + * @param blogId 评论的博客id + */ + @GetMapping("/list") + public RestTemplate getCommentList(@RequestParam Integer blogId, @RequestParam Integer page, @RequestParam(defaultValue = "3") Integer pageSize) { + CommentListVO commentListVO = commentService.getList(blogId, page, pageSize); + return new RestTemplate(commentListVO); + } + } diff --git a/blog_main/src/main/java/cn/sticki/blog/mapper/CommentBasicMapper.java b/blog_main/src/main/java/cn/sticki/blog/mapper/CommentBasicMapper.java new file mode 100644 index 00000000..65cea46b --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/mapper/CommentBasicMapper.java @@ -0,0 +1,10 @@ +package cn.sticki.blog.mapper; + +import cn.sticki.blog.pojo.domain.CommentBasic; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CommentBasicMapper extends BaseMapper { + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java b/blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java index ecea5d88..28568436 100644 --- a/blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java +++ b/blog_main/src/main/java/cn/sticki/blog/pojo/domain/Comment.java @@ -17,6 +17,8 @@ public class Comment { Integer parentId; // 父评论id + Integer parentUserId; // 回复的用户id + Timestamp createTime; // 创建时间 } diff --git a/blog_main/src/main/java/cn/sticki/blog/pojo/domain/CommentBasic.java b/blog_main/src/main/java/cn/sticki/blog/pojo/domain/CommentBasic.java new file mode 100644 index 00000000..b4e8b7d6 --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/pojo/domain/CommentBasic.java @@ -0,0 +1,30 @@ +package cn.sticki.blog.pojo.domain; + +import lombok.Data; + +import java.sql.Timestamp; + +@Data +public class CommentBasic { + + Integer id; // 评论id + + Integer blogId; // 博客id + + Integer userId; // 发表评论的用户id + + String nickname; // 用户昵称 + + String avatarUrl; // 头像链接 + + String content; // 评论内容 + + Timestamp createTime; // 发表时间 + + Integer parentId; // 父评论id + + Integer parentUserId; // 回复的用户id + + String parentNickname; // 回复的用户昵称 + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/pojo/dto/CommentDTO.java b/blog_main/src/main/java/cn/sticki/blog/pojo/dto/CommentDTO.java new file mode 100644 index 00000000..a040c0b4 --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/pojo/dto/CommentDTO.java @@ -0,0 +1,17 @@ +package cn.sticki.blog.pojo.dto; + +import cn.sticki.blog.pojo.domain.CommentBasic; +import lombok.Data; + +import java.util.List; + +@Data +public class CommentDTO { + + CommentBasic info; + + List sub; + + long subCount; + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/pojo/vo/BlogContentVO.java b/blog_main/src/main/java/cn/sticki/blog/pojo/vo/BlogContentVO.java index 113108fa..4fc30981 100644 --- a/blog_main/src/main/java/cn/sticki/blog/pojo/vo/BlogContentVO.java +++ b/blog_main/src/main/java/cn/sticki/blog/pojo/vo/BlogContentVO.java @@ -14,4 +14,6 @@ public class BlogContentVO { User author; + CommentListVO comment; + } diff --git a/blog_main/src/main/java/cn/sticki/blog/pojo/vo/CommentListVO.java b/blog_main/src/main/java/cn/sticki/blog/pojo/vo/CommentListVO.java new file mode 100644 index 00000000..1c950642 --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/pojo/vo/CommentListVO.java @@ -0,0 +1,13 @@ +package cn.sticki.blog.pojo.vo; + +import cn.sticki.blog.pojo.dto.CommentDTO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +public class CommentListVO extends ListVO { + + long allCount = 0; // 总评论数量(包括二级评论) + +} diff --git a/blog_main/src/main/java/cn/sticki/blog/pojo/vo/ListVO.java b/blog_main/src/main/java/cn/sticki/blog/pojo/vo/ListVO.java index 6ce2b329..3c0e9c8c 100644 --- a/blog_main/src/main/java/cn/sticki/blog/pojo/vo/ListVO.java +++ b/blog_main/src/main/java/cn/sticki/blog/pojo/vo/ListVO.java @@ -18,7 +18,7 @@ public class ListVO implements IListVO { long total = 0; /** - * 每页显示条数,默认 10 + * 每页显示条数,默认 20 */ long size = 20; diff --git a/blog_main/src/main/java/cn/sticki/blog/service/CommentService.java b/blog_main/src/main/java/cn/sticki/blog/service/CommentService.java index bb71776e..3759f9b5 100644 --- a/blog_main/src/main/java/cn/sticki/blog/service/CommentService.java +++ b/blog_main/src/main/java/cn/sticki/blog/service/CommentService.java @@ -1,6 +1,7 @@ package cn.sticki.blog.service; import cn.sticki.blog.pojo.domain.Comment; +import cn.sticki.blog.pojo.vo.CommentListVO; public interface CommentService { @@ -23,11 +24,20 @@ public interface CommentService { * @param commentId 评论id * @return 若该评论是该用户发表的,返回true */ - boolean checkCommentPublisher(int userId, int commentId); + boolean checkPublisher(int userId, int commentId); /** * 检查发表人并删除评论 */ void checkAndDelete(int userId, int commentId); + /** + * 获取评论信息列表 + * + * @param blogId 博客id + * @param page 当前页 + * @param pageSize 页大小 + */ + CommentListVO getList(int blogId, int page, int pageSize); + } diff --git a/blog_main/src/main/java/cn/sticki/blog/service/impl/BlogBasicServiceImpl.java b/blog_main/src/main/java/cn/sticki/blog/service/impl/BlogBasicServiceImpl.java index 101eb47e..d5725851 100644 --- a/blog_main/src/main/java/cn/sticki/blog/service/impl/BlogBasicServiceImpl.java +++ b/blog_main/src/main/java/cn/sticki/blog/service/impl/BlogBasicServiceImpl.java @@ -9,6 +9,7 @@ import cn.sticki.blog.pojo.vo.BlogContentVO; import cn.sticki.blog.pojo.vo.BlogListVO; import cn.sticki.blog.service.BlogBasicService; +import cn.sticki.blog.service.CommentService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -31,6 +32,9 @@ public class BlogBasicServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Comment::getBlogId, comment.getBlogId()).eq(Comment::getId, comment.getParentId()); - exists = commentMapper.exists(wrapper); + Comment parentComment = commentMapper.selectOne(wrapper); + if (parentComment != null) { + exists = true; + // 如果父评论还有上一级评论,则设置父评论的上一级评论为当前评论的父评论,如此,所有子评论的父评论id都一定是一级评论 + comment.setParentId(parentComment.getParentId() != null ? parentComment.getParentId() : parentComment.getId()); + // 为了防止有歧义难以理解,故改写成了上面这句 + // if (parentComment.getParentId() != null) comment.setParentId(parentComment.getParentId()); + comment.setParentUserId(parentComment.getUserId()); + } } else { // 判断博客id是否存在 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -61,7 +82,7 @@ public void delete(int id) { } @Override - public boolean checkCommentPublisher(int userId, int commentId) { + public boolean checkPublisher(int userId, int commentId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Comment::getUserId, userId).eq(Comment::getId, commentId); return commentMapper.exists(wrapper); @@ -69,7 +90,7 @@ public boolean checkCommentPublisher(int userId, int commentId) { @Override public void checkAndDelete(int userId, int commentId) { - if (!checkCommentPublisher(userId, commentId)) { + if (!checkPublisher(userId, commentId)) { log.warn("非法删除评论,id->{},commentId->{}", userId, commentId); throw new UserIllegalException(); } else { @@ -77,4 +98,56 @@ public void checkAndDelete(int userId, int commentId) { } } + @Override + public CommentListVO getList(int blogId, int page, int pageSize) { + CommentListVO vo = new CommentListVO(); + // 先查总数量 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CommentBasic::getBlogId, blogId); // 只要博客id一致即可 + Long count = commentBasicMapper.selectCount(wrapper); + vo.setAllCount(count); + if (count == 0) return vo; // 若总数为0,直接返回 + + // 以时间排序,只查该博客下没有父评论id的,存入父评论组数中 + wrapper.orderByDesc(CommentBasic::getCreateTime).isNull(CommentBasic::getParentId); + IPage iPage = new Page<>(page, pageSize); + commentBasicMapper.selectPage(iPage, wrapper); + BeanUtil.copyProperties(iPage, vo, "records"); + // 复制父评论 + ArrayList dtoList = new ArrayList<>(); + for (CommentBasic record : iPage.getRecords()) { + CommentDTO dto = new CommentDTO(); + dto.setInfo(record); + dtoList.add(dto); + } + vo.setRecords(dtoList); + + // 查询子评论 + // 先获取父评论的id列表 + ArrayList idList = new ArrayList<>(); + for (CommentBasic commentBasic : iPage.getRecords()) { + idList.add(commentBasic.getId()); + } + // 以父评论id查询所有子评论,按时间排序 + wrapper.clear(); + wrapper.eq(CommentBasic::getBlogId, blogId) + .in(CommentBasic::getParentId, idList) + .orderByDesc(CommentBasic::getCreateTime); + // 查询所有子评论 + List subList = commentBasicMapper.selectList(wrapper); + // 将子评论填充到父评论下 + for (CommentDTO commentDTO : dtoList) { + Integer parentId = commentDTO.getInfo().getId(); + ArrayList tempSub = new ArrayList<>(); + for (CommentBasic sub : subList) { + if (Objects.equals(parentId, sub.getParentId())) + tempSub.add(sub); + } + commentDTO.setSub(tempSub); + commentDTO.setSubCount(tempSub.size()); + } + + return vo; + } + } diff --git a/blog_main/src/main/java/cn/sticki/blog/service/impl/UserCollectBlogServiceImpl.java b/blog_main/src/main/java/cn/sticki/blog/service/impl/UserCollectBlogServiceImpl.java index 92795f15..8f6a11bc 100644 --- a/blog_main/src/main/java/cn/sticki/blog/service/impl/UserCollectBlogServiceImpl.java +++ b/blog_main/src/main/java/cn/sticki/blog/service/impl/UserCollectBlogServiceImpl.java @@ -70,7 +70,12 @@ public BlogListVO getCollectBlogList(@NotNull Integer userId, int page, int page wrapper.eq(UserCollectBlog::getUserId, userId); IPage iPage = new Page<>(page, pageSize); userCollectBlogMapper.selectPage(iPage, wrapper); + BlogListVO blogListVO = BeanUtil.copyProperties(iPage, BlogListVO.class); List userCollectBlogList = iPage.getRecords(); + // 若为空,则直接返回 + if (userCollectBlogList.isEmpty()) { + return blogListVO; + } ArrayList blogIdList = new ArrayList<>(); for (UserCollectBlog blog : userCollectBlogList) { blogIdList.add(blog.getBlogId()); @@ -79,7 +84,7 @@ public BlogListVO getCollectBlogList(@NotNull Integer userId, int page, int page LambdaQueryWrapper blogWrapper = new LambdaQueryWrapper<>(); blogWrapper.in(BlogBasic::getId, blogIdList); List blogBasicList = blogBasicMapper.selectList(blogWrapper); - BlogListVO blogListVO = BeanUtil.copyProperties(iPage, BlogListVO.class, "records"); + blogListVO.setRecords(blogBasicList); return blogListVO; } diff --git a/blog_main/src/main/resources/application.yml b/blog_main/src/main/resources/application.yml index 2e1b1ac7..9d47223a 100644 --- a/blog_main/src/main/resources/application.yml +++ b/blog_main/src/main/resources/application.yml @@ -119,7 +119,7 @@ security: # 过期时间 单位秒 1天后过期=86400 7天后过期=604800 expiration: 604800 # 配置不需要认证的接口,中间不能加空格 - ant-matchers: /login/**,/blog/**,/resource/**,/user,/register/** + ant-matchers: /login/**,/blog/**,/resource/**,/user,/register/**,/comment/list jetcache: statIntervalMinutes: 15 From 89424c57d82b1ec452e4675982575b490edc7308 Mon Sep 17 00:00:00 2001 From: Maverick-72 <2983885355@qq.com> Date: Thu, 5 May 2022 22:34:58 +0800 Subject: [PATCH 07/23] =?UTF-8?q?=E5=8D=9A=E5=AE=A2=E6=94=B6=E8=97=8F?= =?UTF-8?q?=EF=BC=8C=E7=82=B9=E8=B5=9E=E5=88=97=E8=A1=A8=EF=BC=8C=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=9A=84Prover=E7=BB=84=E4=BB=B6=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=8F=8D=E5=BA=94=E6=9C=AA=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../P_user/Manage/managecontent.vue | 45 +++-- .../P_user/PMELeftTabs/lefttabs.vue | 2 +- .../P_user/PMELeftTabs/lefttabs5.vue | 154 ++++++++++++++++++ .../P_user/PMELeftTabs/lefttabs8.vue | 153 +++++++++++++++++ vueblog/src/views/PersonalMessageEdit.vue | 31 ++-- 5 files changed, 358 insertions(+), 27 deletions(-) create mode 100644 vueblog/src/components/P_user/PMELeftTabs/lefttabs5.vue create mode 100644 vueblog/src/components/P_user/PMELeftTabs/lefttabs8.vue diff --git a/vueblog/src/components/P_user/Manage/managecontent.vue b/vueblog/src/components/P_user/Manage/managecontent.vue index 2ebc7052..a8dbc795 100644 --- a/vueblog/src/components/P_user/Manage/managecontent.vue +++ b/vueblog/src/components/P_user/Manage/managecontent.vue @@ -36,17 +36,30 @@ 啥也没搜到!
-
+
-
{{ item.title }}
-
{{ item.description }}
-
- {{ item.releaseTime }}. - {{ item.viewNum }}阅读 . - {{ item.likeNum }}点赞 . - {{ item.commentNum }}评论 . - {{ item.collectionNum }}收藏 +
{{ item.title }}
+
{{ item.description }}
+
+ {{ item.releaseTime }}. + {{ item.viewNum }}阅读 . + {{ item.likeNum }}点赞 . + {{ item.commentNum }}评论 . + {{ item.collectionNum }}收藏 +
+
+ +

这是一段内容这是一段内容确定删除吗?

+
+ 取消 + 确定 +
+ 删除 +
@@ -108,7 +121,8 @@ export default { headers:{ 'token':localStorage.getItem('token') } - } + }, + visible2:false } }, async mounted(){ @@ -204,7 +218,7 @@ export default { } - \ No newline at end of file diff --git a/vueblog/src/components/P_user/PMELeftTabs/lefttabs8.vue b/vueblog/src/components/P_user/PMELeftTabs/lefttabs8.vue new file mode 100644 index 00000000..5e648b1a --- /dev/null +++ b/vueblog/src/components/P_user/PMELeftTabs/lefttabs8.vue @@ -0,0 +1,153 @@ + + + + + \ No newline at end of file diff --git a/vueblog/src/views/PersonalMessageEdit.vue b/vueblog/src/views/PersonalMessageEdit.vue index 3c1366dd..7b815475 100644 --- a/vueblog/src/views/PersonalMessageEdit.vue +++ b/vueblog/src/views/PersonalMessageEdit.vue @@ -42,12 +42,18 @@
-
- +
+
-
- +
+ +
+
+ +
+
+
@@ -62,19 +68,23 @@ import TopBarA from "@/components/content/topbar/TopBar"; import ButtomView from "@/components/P_user/ButtomView/ButtomView.vue" import TabsContent from "@/components/P_user/PMELeftTabs/lefttabs.vue"; import TabsContent2 from "@/components/P_user/PMELeftTabs/lefttabs2.vue" +import TabsContent5 from "@/components/P_user/PMELeftTabs/lefttabs5.vue" +import TabsContent8 from "@/components/P_user/PMELeftTabs/lefttabs8.vue" export default{ components:{ TopBarA, ButtomView, TabsContent, - TabsContent2 + TabsContent2, + TabsContent5, + TabsContent8, }, data(){ return { leftNavigation:[{name:"个人资料",chose:true},{name:"账号设置",chose:false}, {name:"隐私设置",chose:false},{name:"信息认证",chose:false} ,{name:"我的收藏",chose:false},{name:"浏览历史",chose:false}, - {name:"内容管理",chose:false}], + {name:"内容管理",chose:false},{name:"我的点赞",chose:false}], userMessage:{ username:"默认参数P", nickname:"默认参数P", @@ -115,14 +125,7 @@ export default{ this.leftNavigation[i].chose=false } this.leftNavigation[index].chose=true - // this.$refs.upload.submit(); - if(index==0){ - this.$refs.tabs1.style.display="block"; - this.$refs.tabs2.style.display="none" - }else{ - this.$refs.tabs2.style.display="block" - this.$refs.tabs1.style.display="none" - } + if(index==6){ this.$router.push('/ContentManagement') } From 9cdb302bccf415e734c61458414d13e425d9fe81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=A4=A9=E6=96=87?= <1002744113@qq.com> Date: Fri, 6 May 2022 16:49:57 +0800 Subject: [PATCH 08/23] =?UTF-8?q?=E6=96=B0=E5=A2=9Eip=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=EF=BC=8C=E5=B9=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86ip=E8=AE=BF=E9=97=AE=E9=99=90=E5=88=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sticki/blog/config/MybatisPlusConfig.java | 6 +- .../blog/config/SpringSecurityConfig.java | 15 +++-- .../blog/controller/BlogActionController.java | 2 +- .../sticki/blog/enumeration/CacheSpace.java | 5 ++ .../blog/security/filter/IPLimitFilter.java | 56 +++++++++++++++++++ .../cn/sticki/blog/util/RequestUtils.java | 45 +++++++++++++++ 6 files changed, 121 insertions(+), 8 deletions(-) create mode 100644 blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java create mode 100644 blog_main/src/main/java/cn/sticki/blog/util/RequestUtils.java diff --git a/blog_main/src/main/java/cn/sticki/blog/config/MybatisPlusConfig.java b/blog_main/src/main/java/cn/sticki/blog/config/MybatisPlusConfig.java index 57319e63..d40e582c 100644 --- a/blog_main/src/main/java/cn/sticki/blog/config/MybatisPlusConfig.java +++ b/blog_main/src/main/java/cn/sticki/blog/config/MybatisPlusConfig.java @@ -1,6 +1,7 @@ package cn.sticki.blog.config; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -8,10 +9,11 @@ @Configuration public class MybatisPlusConfig { - @Bean // 配置分页 + @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 配置分页助手 + interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); // 阻止恶意的全表更新删除 return interceptor; } diff --git a/blog_main/src/main/java/cn/sticki/blog/config/SpringSecurityConfig.java b/blog_main/src/main/java/cn/sticki/blog/config/SpringSecurityConfig.java index 5cb0281e..e3e42a88 100644 --- a/blog_main/src/main/java/cn/sticki/blog/config/SpringSecurityConfig.java +++ b/blog_main/src/main/java/cn/sticki/blog/config/SpringSecurityConfig.java @@ -1,11 +1,11 @@ package cn.sticki.blog.config; import cn.sticki.blog.security.filter.AuthenticationTokenFilter; +import cn.sticki.blog.security.filter.IPLimitFilter; import cn.sticki.blog.security.handler.AuthAccessDeniedHandler; import cn.sticki.blog.security.handler.AuthenticationEntryPointHandler; import cn.sticki.blog.security.handler.LoginFailureHandler; import cn.sticki.blog.security.handler.LoginSuccessHandler; -import cn.sticki.blog.util.ResponseUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -57,12 +57,15 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private AuthenticationEntryPointHandler authenticationEntryPointHandler; - /** - * 自定义登录逻辑验证器 - */ + // /** + // * 自定义登录逻辑验证器 + // */ // @Autowired // private UserAuthenticationProvider userAuthenticationProvider; + /** + * 用户认证过滤器 + */ @Autowired private AuthenticationTokenFilter authenticationTokenFilter; // @@ -73,7 +76,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { // private AccessDeniedHandler accessDeniedHandler; @Autowired - private ResponseUtils responseUtils; + private IPLimitFilter ipLimitFilter; // @Resource // private AuthenticationFailureHandlerAdvice authenticationFailureHandlerAdvice; @@ -114,6 +117,8 @@ protected void configure(HttpSecurity http) throws Exception { http.headers().cacheControl(); // 添加JWT过滤器 http.addFilterAt(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); + // 添加ip限制过滤器 + http.addFilterBefore(ipLimitFilter, UsernamePasswordAuthenticationFilter.class); } @Bean diff --git a/blog_main/src/main/java/cn/sticki/blog/controller/BlogActionController.java b/blog_main/src/main/java/cn/sticki/blog/controller/BlogActionController.java index a082026d..0a73b688 100644 --- a/blog_main/src/main/java/cn/sticki/blog/controller/BlogActionController.java +++ b/blog_main/src/main/java/cn/sticki/blog/controller/BlogActionController.java @@ -17,7 +17,7 @@ @Slf4j @RestController -@RequestMapping("/blog") +@RequestMapping("/action/blog") public class BlogActionController { @Resource diff --git a/blog_main/src/main/java/cn/sticki/blog/enumeration/CacheSpace.java b/blog_main/src/main/java/cn/sticki/blog/enumeration/CacheSpace.java index 163e4d3f..be999615 100644 --- a/blog_main/src/main/java/cn/sticki/blog/enumeration/CacheSpace.java +++ b/blog_main/src/main/java/cn/sticki/blog/enumeration/CacheSpace.java @@ -27,4 +27,9 @@ public class CacheSpace { */ public static final String UserService_MailVerify = "userService:mailVerify:"; + /** + * ip 计数 + */ + public static final String IpService_Count = "ipService:Count:"; + } diff --git a/blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java b/blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java new file mode 100644 index 00000000..505b0079 --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java @@ -0,0 +1,56 @@ +package cn.sticki.blog.security.filter; + +import cn.sticki.blog.enumeration.CacheSpace; +import cn.sticki.blog.pojo.vo.RestTemplate; +import cn.sticki.blog.util.RequestUtils; +import cn.sticki.blog.util.ResponseUtils; +import com.alicp.jetcache.Cache; +import com.alicp.jetcache.anno.CreateCache; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.annotation.Resource; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Slf4j +@Component +public class IPLimitFilter extends OncePerRequestFilter { + + private final int time = 5; + + private final int count = 30; + + @Resource + private ResponseUtils responseUtils; + + @CreateCache(name = CacheSpace.IpService_Count, expire = time) + private Cache cache; + + /** + * ip访问限制过滤器 + */ + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + // todo 有待优化,目前逻辑为,连续访问30次,需要冷却5s + // 获取当前ip + String ip = RequestUtils.getIPAddress(request); + // ip计数 + Integer ipCount = cache.get(ip); + if (ipCount == null) ipCount = 0; + if (ipCount > count) { + // ip访问超过限制 + responseUtils.objectToJson(response, new RestTemplate(408, "访问频繁,请稍后再试")); + } else { + ipCount++; + cache.put(ip, ipCount); + //放行 + filterChain.doFilter(request, response); + } + } + +} \ No newline at end of file diff --git a/blog_main/src/main/java/cn/sticki/blog/util/RequestUtils.java b/blog_main/src/main/java/cn/sticki/blog/util/RequestUtils.java new file mode 100644 index 00000000..2f71ed9f --- /dev/null +++ b/blog_main/src/main/java/cn/sticki/blog/util/RequestUtils.java @@ -0,0 +1,45 @@ +package cn.sticki.blog.util; + +import javax.servlet.http.HttpServletRequest; + +public class RequestUtils { + + public static String getIPAddress(HttpServletRequest request) { + String ip = null; + + //X-Forwarded-For:Squid 服务代理 + String ipAddresses = request.getHeader("X-Forwarded-For"); + + if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { + //Proxy-Client-IP:apache 服务代理 + ipAddresses = request.getHeader("Proxy-Client-IP"); + } + + if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { + //WL-Proxy-Client-IP:weblogic 服务代理 + ipAddresses = request.getHeader("WL-Proxy-Client-IP"); + } + + if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { + //HTTP_CLIENT_IP:有些代理服务器 + ipAddresses = request.getHeader("HTTP_CLIENT_IP"); + } + + if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { + //X-Real-IP:nginx服务代理 + ipAddresses = request.getHeader("X-Real-IP"); + } + + //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP + if (ipAddresses != null && ipAddresses.length() != 0) { + ip = ipAddresses.split(",")[0]; + } + + //还是不能获取到,最后再通过request.getRemoteAddr();获取 + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) { + ip = request.getRemoteAddr(); + } + return ip; + } + +} From 4f9efaeed1edabe467579ba4b32f5dd032d6d9f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E6=81=8B?= <1960849016@qq.com> Date: Fri, 6 May 2022 21:54:53 +0800 Subject: [PATCH 09/23] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=8D=9A=E5=AE=A2=E8=AF=84=E8=AE=BA=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/src/assets/css/base.css | 5 +- .../blogDetail/blogComment/commentLike.png | Bin 0 -> 688 bytes .../blogComment/commentLikeActive.png | Bin 0 -> 512 bytes .../blogDetail/blogComment/commentReply.png | Bin 0 -> 331 bytes vueblog/src/router/index.js | 2 +- vueblog/src/views/blogDetail/BlogDetail.vue | 17 +- .../blogDetail/childComps/BlogComment.vue | 331 ++++++++++++++++++ .../views/home/childComps/HomeArticleItem.vue | 2 +- 8 files changed, 344 insertions(+), 13 deletions(-) create mode 100644 vueblog/src/assets/img/blogDetail/blogComment/commentLike.png create mode 100644 vueblog/src/assets/img/blogDetail/blogComment/commentLikeActive.png create mode 100644 vueblog/src/assets/img/blogDetail/blogComment/commentReply.png create mode 100644 vueblog/src/views/blogDetail/childComps/BlogComment.vue diff --git a/vueblog/src/assets/css/base.css b/vueblog/src/assets/css/base.css index 9ae2e42a..c25b0579 100644 --- a/vueblog/src/assets/css/base.css +++ b/vueblog/src/assets/css/base.css @@ -53,4 +53,7 @@ a { .right { float: right; -} \ No newline at end of file +} +ol, ul { + list-style: none; +} diff --git a/vueblog/src/assets/img/blogDetail/blogComment/commentLike.png b/vueblog/src/assets/img/blogDetail/blogComment/commentLike.png new file mode 100644 index 0000000000000000000000000000000000000000..a77866ddad0de66d9c6cd2ab7b2ebe5acace499d GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U}O#O32_B-|NsBr(9jUNYE@cV zT4+Nv6%&&d5s?!bmjM(Bjm?RO$Ow(f2oKK;3j>O$hlQnw zMx=#@XM{#%ghc{TI*=U}nFitlRYm~0>0uFRq2WL+AVzq28b}<-4oeFQgD}#eT%ce$ zkewD54pfgU2Km|Y(KqOctL<>j+C<{eEHiQdQ22}}E3{?Zyo)-3> z^$IW`!b*btf*BZ@m|594xVZVmB_yS!WfTp~EF7J^ynO=0BBSFIQq!`sb8__bjmMmYfZqt@++YcQ+a`N=qbC<5&d-(Y2i?{DSe*X6J*Y7`nk9j5f z0E3*x)5S5w;`G`};lWIX60Hx#MWwaP1RRgvV{moViP*4k(W2~|pa0i)iQg=BG28j+ zPU^YICu=+(l&A5n_FjBr^3O?Mc4o0(zjfP=(eH=_^KU*d zt?cn{7w^*yp}EJJo8%@l@IFocy{}rA>B6NHof+2;Gcc^rx| zp3YpvvRrwFv+u9NyoZH@cP6b2+Fx;5m0{m8hLz7l*01HU59LX4*Uk$tHcw^`Kefxz zT~qzTmnPwqt0m2)vO64ov-2*PINxxzXc4V=^?>D~K$rk;BCGqel?TGD*i@d|H5Kl% o^YK4bzb~fz-g_~jKi>No=i7P5Nx4ql4-9bzPgg&ebxsLQ01(6$T>t<8 literal 0 HcmV?d00001 diff --git a/vueblog/src/assets/img/blogDetail/blogComment/commentLikeActive.png b/vueblog/src/assets/img/blogDetail/blogComment/commentLikeActive.png new file mode 100644 index 0000000000000000000000000000000000000000..7e25cddbe1bd8d8baed7faf48af448f76c639f94 GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyy8?VdT!Hj|AZTd#A8r0W()@p@ z>Hknm5Ie%;f4KSoFysFbrvJlC{)Za>4>$WCYW640^iR0ypD^P;p{9R_Nva)k>3(Fe2Cr+9+W6px*>o#rK zy6w>6lc&#~yL9dPEak-aeD0~SFu9@0xlPwnpipB z38{D#aL&5*f13n@<%$1aT4wFDe$5s){avY7;EU;26K%r2Cb&(qo4jk@QvXSBUL9!q z&TDeFs$|<$+bva1yQH4Xn>%e&`*lVS4M)2dch0H*4O={;({|Fs3gv{u>*ux$GBh{~ z{dl*hfQ#WnNkap1`b literal 0 HcmV?d00001 diff --git a/vueblog/src/assets/img/blogDetail/blogComment/commentReply.png b/vueblog/src/assets/img/blogDetail/blogComment/commentReply.png new file mode 100644 index 0000000000000000000000000000000000000000..0baf7256e1288e900c3387161e7e7c925b9a5926 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy;Q>A&u0T3BH#amZD=DcgCMGR3 zCNnfDGa@2AA|f+1GCedREi5uEG$K6=gwjI8GeX1Dfha62Jq*YQOA8B61CpU(KsJO6 zB7vx(bkhr<(K01Le!&dvJiLj1?3|AEa(vPAatbG@^lNhS#7$z^`c(L{c#ZFcny}AzeGk8oX*5|cz5Gm3 zcjnTo55r7yZ|#s)pRs=TE6)Rex2#N4Hi+N${?KOob@n2s)$?S8P1C-=;RZU1!PC{x JWt~$(69CVngLD7@ literal 0 HcmV?d00001 diff --git a/vueblog/src/router/index.js b/vueblog/src/router/index.js index 33874587..6dcf316f 100644 --- a/vueblog/src/router/index.js +++ b/vueblog/src/router/index.js @@ -22,7 +22,7 @@ const routes = [ { path: '/', name: 'Index', - redirect:{name:"PersonalBlog"} + redirect:{name:"Home"} }, { diff --git a/vueblog/src/views/blogDetail/BlogDetail.vue b/vueblog/src/views/blogDetail/BlogDetail.vue index 65a4a71f..8b8fe874 100644 --- a/vueblog/src/views/blogDetail/BlogDetail.vue +++ b/vueblog/src/views/blogDetail/BlogDetail.vue @@ -163,6 +163,7 @@
+ @@ -206,7 +207,7 @@
-
1111111111111111111111
+
@@ -215,12 +216,14 @@ + + diff --git a/vueblog/src/views/home/childComps/HomeArticleItem.vue b/vueblog/src/views/home/childComps/HomeArticleItem.vue index 127e43cd..7ec0d466 100644 --- a/vueblog/src/views/home/childComps/HomeArticleItem.vue +++ b/vueblog/src/views/home/childComps/HomeArticleItem.vue @@ -112,7 +112,7 @@ export default { addLikeNum(id, index) { this.blogIdForm.blogId = id; this.$axios - .post("/blog/like", qs.stringify(this.blogIdForm), { + .post("/action/blog/like", qs.stringify(this.blogIdForm), { headers: { token: localStorage.getItem("token") }, }) .then((res) => { From b63215dde7f027f26f5c043e0cc73f6f22ae94df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=A4=A9=E6=96=87?= <1002744113@qq.com> Date: Sat, 7 May 2022 22:07:06 +0800 Subject: [PATCH 10/23] =?UTF-8?q?=E4=BC=98=E5=8C=96GET=20/user=20=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/sticki/blog/controller/UserController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog_main/src/main/java/cn/sticki/blog/controller/UserController.java b/blog_main/src/main/java/cn/sticki/blog/controller/UserController.java index 1bb9cbdd..a7aee35c 100644 --- a/blog_main/src/main/java/cn/sticki/blog/controller/UserController.java +++ b/blog_main/src/main/java/cn/sticki/blog/controller/UserController.java @@ -45,10 +45,10 @@ public class UserController { public RestTemplate getByUsername(String username) { User user = authenticationFacade.getUser(); User getUser = null; - if (username == null && user != null) { + if ((username == null || username.length() != 0) && user != null) { getUser = user; log.debug("getByUsername, sessionUser ,user->{}", getUser.getClass()); - } else if (username != null) { + } else if (username != null && username.length() != 0) { getUser = userService.getByUsername(username); log.debug("getByUsername, userService.getByUsername ,user->{}", getUser); } From 2db5586f15e73bee008f33446b28e5d371231290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E6=81=8B?= <1960849016@qq.com> Date: Sun, 8 May 2022 21:26:44 +0800 Subject: [PATCH 11/23] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=8D=9A=E5=AE=A2?= =?UTF-8?q?=E4=B8=80=E7=BA=A7=E8=AF=84=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/src/main.js | 7 - vueblog/src/router/index.js | 18 - vueblog/src/views/blogDetail/BlogDetail.vue | 1125 +++++++++-------- .../blogDetail/childComps/BlogComment.vue | 199 ++- vueblog/vue.config.js | 2 +- 5 files changed, 727 insertions(+), 624 deletions(-) diff --git a/vueblog/src/main.js b/vueblog/src/main.js index d2e2747b..80511c25 100644 --- a/vueblog/src/main.js +++ b/vueblog/src/main.js @@ -37,10 +37,3 @@ new Vue({ }).$mount('#app') -/* 路由发生变化修改页面title */ -router.beforeEach((to, from, next) => { - if (to.meta.title) { - document.title = to.meta.title - } - next() -}) diff --git a/vueblog/src/router/index.js b/vueblog/src/router/index.js index 6dcf316f..ae8642f2 100644 --- a/vueblog/src/router/index.js +++ b/vueblog/src/router/index.js @@ -34,41 +34,26 @@ const routes = [ path: '/login', name: 'Login', component: Login, - meta: { - title: '登录' - } }, { path: '/register', name: 'register', component: Register, - meta: { - title: '注册' - } }, { path: '/blog/search', name: 'BlogSearch', component: BlogSearch, - meta: { - title: '博客搜索' - } }, { path: '/blog/add', name: 'BlogAdd', component: BlogEdit, - meta: { - title: '创作博客' - } }, { path: '/blog/publish', name: 'BlogPublishSuccess', component: BlogPublishSuccess, - meta: { - title: '发布成功' - } }, { path: '/blog/:blogId', @@ -84,9 +69,6 @@ const routes = [ path: '/Personal_Blog', name: 'PersonalBlog', component: PersonalBlog, - meta: { - title: '个人中心' - } }, { path: '/PersonalMessageEdit', diff --git a/vueblog/src/views/blogDetail/BlogDetail.vue b/vueblog/src/views/blogDetail/BlogDetail.vue index 8b8fe874..9272ab2b 100644 --- a/vueblog/src/views/blogDetail/BlogDetail.vue +++ b/vueblog/src/views/blogDetail/BlogDetail.vue @@ -1,6 +1,6 @@ diff --git a/vueblog/src/views/blogDetail/childComps/BlogComment.vue b/vueblog/src/views/blogDetail/childComps/BlogComment.vue index 9bdf8368..85a8f7ce 100644 --- a/vueblog/src/views/blogDetail/childComps/BlogComment.vue +++ b/vueblog/src/views/blogDetail/childComps/BlogComment.vue @@ -1,13 +1,12 @@ @@ -157,6 +211,7 @@ export default { /*height: 100px;*/ /*background-color: skyblue;*/ margin-top: 10px; + margin-bottom: 10px; padding: 16px 24px 24px 24px; border-radius: 2px; background: #fff; @@ -173,6 +228,13 @@ export default { /*评论标题结束*/ +/* 回复一级评论开始 */ +.first-edit-box { + padding-left: 40px; + padding-bottom: 14px; +} +/* 回复一级评论结束 */ + /*写评论开始*/ .comment-edit-box { display: flex; @@ -277,6 +339,10 @@ export default { text-overflow: ellipsis; white-space: nowrap; } +.right-box .comment-top .user-box .date { + font-size: 14px; + color: #777888; +} .right-box .comment-top img { width: 16px; height: 16px; @@ -326,6 +392,17 @@ export default { border-top: 0; padding-top: 0; } +.replay-box .right-box .comment-top .user-box .name { + margin-right: 0; +} +.replay-box .right-box .comment-top .user-box .text { + color: #999aaa; + margin: 0 6px; +} +.replay-box .right-box .comment-top .user-box .nick-name { + color: #777888; + margin-right: 10px; +} /* 评论显示结束 */ /*评论盒子结束*/ diff --git a/vueblog/vue.config.js b/vueblog/vue.config.js index 63ee2fdd..2a7ae04e 100644 --- a/vueblog/vue.config.js +++ b/vueblog/vue.config.js @@ -9,7 +9,7 @@ module.exports = { proxy: { '/api': { // target:'https://192.168.201.130/api/v1', - target: 'https://local.sticki.cn/api/v1',// 后端接口 + target: 'https://api.scblogs.cn/v1',// 后端接口 changeOrigin: true, // 是否跨域 pathRewrite: { '/api': '' From 5b8a787a3bd60cf743050084575bfcedc73f4ad1 Mon Sep 17 00:00:00 2001 From: Maverick-72 <2983885355@qq.com> Date: Sun, 8 May 2022 22:28:38 +0800 Subject: [PATCH 12/23] =?UTF-8?q?5.8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/vue.config.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vueblog/vue.config.js b/vueblog/vue.config.js index 63ee2fdd..65cf9e2c 100644 --- a/vueblog/vue.config.js +++ b/vueblog/vue.config.js @@ -9,7 +9,10 @@ module.exports = { proxy: { '/api': { // target:'https://192.168.201.130/api/v1', - target: 'https://local.sticki.cn/api/v1',// 后端接口 + + // target: 'https://local.sticki.cn/api/v1',// 后端接口 + target: 'https://api.scblogs.cn/v1/user?username=stick',// 后端接口 + changeOrigin: true, // 是否跨域 pathRewrite: { '/api': '' From d835ec794ee832749e6e03a00e90367d45d2c500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=A4=A9=E6=96=87?= <1002744113@qq.com> Date: Mon, 9 May 2022 08:53:13 +0800 Subject: [PATCH 13/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E6=8E=A5=E5=8F=A3=E7=9A=84=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/sticki/blog/security/filter/IPLimitFilter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java b/blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java index 505b0079..1ba7a057 100644 --- a/blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java +++ b/blog_main/src/main/java/cn/sticki/blog/security/filter/IPLimitFilter.java @@ -45,12 +45,15 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse if (ipCount > count) { // ip访问超过限制 responseUtils.objectToJson(response, new RestTemplate(408, "访问频繁,请稍后再试")); + response.sendError(403, "Reject request"); } else { ipCount++; cache.put(ip, ipCount); //放行 filterChain.doFilter(request, response); } + // 打印访问情况 + log.info("{} {} {} {}", request.getRemoteAddr(), request.getMethod(), response.getStatus(), request.getServletPath()); } } \ No newline at end of file From 294d0944db33449346d6aee642c0aab546008e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E6=81=8B?= <1960849016@qq.com> Date: Mon, 9 May 2022 11:10:58 +0800 Subject: [PATCH 14/23] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../blogDetail/childComps/BlogComment.vue | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/vueblog/src/views/blogDetail/childComps/BlogComment.vue b/vueblog/src/views/blogDetail/childComps/BlogComment.vue index 85a8f7ce..251c6a93 100644 --- a/vueblog/src/views/blogDetail/childComps/BlogComment.vue +++ b/vueblog/src/views/blogDetail/childComps/BlogComment.vue @@ -38,7 +38,7 @@ {{ item.info.nickname }} {{ item.info.createTime }} -
+
-
+
+ +
+ + +
+
@@ -159,6 +165,7 @@ export default { content: "", parentId: "", }, + a:null, isShowFirstEditBox: false, isComment: {}, }; @@ -182,8 +189,9 @@ export default { this.$emit("func"); }); }, - showFirstEditBox() { - this.isShowFirstEditBox = !this.isShowFirstEditBox; + showFirstEditBox(index) { + // this.isShowFirstEditBox = !this.isShowFirstEditBox; + this.a = index; }, // 发布二级评论 secondComment(parentId) { @@ -404,5 +412,16 @@ export default { margin-right: 10px; } /* 评论显示结束 */ + +/* 分页开始 */ +.pagination-box { + text-align: center; +} +.comment-list-container .pagination-box .el-pagination .is-background .el-pager li:not(.disabled).active { + background-color: #555666; +} + +/* 分页结束 */ + /*评论盒子结束*/ From 441d6f672541afac2882e94f6f9625764492dd00 Mon Sep 17 00:00:00 2001 From: Maverick-72 <2983885355@qq.com> Date: Mon, 9 May 2022 14:05:17 +0800 Subject: [PATCH 15/23] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/src/views/blogDetail/childComps/BlogComment.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vueblog/src/views/blogDetail/childComps/BlogComment.vue b/vueblog/src/views/blogDetail/childComps/BlogComment.vue index 85a8f7ce..06c51230 100644 --- a/vueblog/src/views/blogDetail/childComps/BlogComment.vue +++ b/vueblog/src/views/blogDetail/childComps/BlogComment.vue @@ -38,7 +38,7 @@ {{ item.info.nickname }} {{ item.info.createTime }}
-
+
From 0d9ce7c8367611db06923e222f57c1fcab1d3050 Mon Sep 17 00:00:00 2001 From: Maverick-72 <2983885355@qq.com> Date: Mon, 9 May 2022 14:30:25 +0800 Subject: [PATCH 16/23] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/src/views/blogDetail/childComps/BlogComment.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vueblog/src/views/blogDetail/childComps/BlogComment.vue b/vueblog/src/views/blogDetail/childComps/BlogComment.vue index 2c4a0911..251c6a93 100644 --- a/vueblog/src/views/blogDetail/childComps/BlogComment.vue +++ b/vueblog/src/views/blogDetail/childComps/BlogComment.vue @@ -47,7 +47,7 @@
From 7338eb1eca74ee42e863039dfdb09ee759db5224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E6=81=8B?= <1960849016@qq.com> Date: Mon, 9 May 2022 20:56:10 +0800 Subject: [PATCH 17/23] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=8A=B6=E6=80=81=E4=B8=8B=E5=8D=9A=E5=AE=A2?= =?UTF-8?q?=E8=AF=84=E8=AE=BA=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=8C=85=E6=8B=AC?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=98=BE=E7=A4=BA=EF=BC=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=AF=84=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/src/views/blogDetail/BlogDetail.vue | 5 +- .../blogDetail/childComps/BlogComment.vue | 170 ++++++++++++++---- 2 files changed, 141 insertions(+), 34 deletions(-) diff --git a/vueblog/src/views/blogDetail/BlogDetail.vue b/vueblog/src/views/blogDetail/BlogDetail.vue index 9272ab2b..ab9d5de6 100644 --- a/vueblog/src/views/blogDetail/BlogDetail.vue +++ b/vueblog/src/views/blogDetail/BlogDetail.vue @@ -207,7 +207,7 @@
- +
@@ -300,6 +300,9 @@ // 滚动结束 methods: { + recordsChange(records) { + this.comment = records + }, // 获取评论 getComment(){ console.log("获取评论") diff --git a/vueblog/src/views/blogDetail/childComps/BlogComment.vue b/vueblog/src/views/blogDetail/childComps/BlogComment.vue index 251c6a93..0a708300 100644 --- a/vueblog/src/views/blogDetail/childComps/BlogComment.vue +++ b/vueblog/src/views/blogDetail/childComps/BlogComment.vue @@ -6,7 +6,7 @@
- +
{{ item.info.nickname }} {{ item.info.createTime }}
-
- - 回复 +
+
+ 删除 +
+
+ + 回复 +
-
+
- +
{{ child.createTime }}
- - 回复 +
+ 删除 +
+
+ + 回复 +
+ +
+
+
+ +
+
+ +
+ 评论 +
+
+
+
+
-
- +
+
+
123
@@ -153,6 +198,8 @@ export default { props: ["facomment"], data() { return { + // 头像 + avatarUrl: "", // 父评论 comment: { blogId: this.$route.params.blogId, @@ -165,17 +212,29 @@ export default { content: "", parentId: "", }, - a:null, - isShowFirstEditBox: false, - isComment: {}, + childComment2: { + blogId: this.$route.params.blogId, + content: "", + parentId: "", + }, + firstId: null, + secondId: null, + // 分页 + blogId: this.$route.params.blogId, + page: "2", + pageSize: "3", }; }, - watch: { - // facomment(a, b) { - // this.isComment = a.records; - // }, + created() { + this.avatarUrl = window.localStorage.avatarUrl; }, methods: { + showFirstEditBox(id) { + this.firstId = id; + }, + showSecondEditBox(id) { + this.secondId = id; + }, // 发布一级评论 firstComment() { this.$axios @@ -189,10 +248,6 @@ export default { this.$emit("func"); }); }, - showFirstEditBox(index) { - // this.isShowFirstEditBox = !this.isShowFirstEditBox; - this.a = index; - }, // 发布二级评论 secondComment(parentId) { this.childComment.parentId = parentId; @@ -203,11 +258,50 @@ export default { .then((res) => { console.log(res); this.childComment.content = ""; - this.isShowFirstEditBox = false; // 更新评论列表 this.$emit("func"); }); }, + // 发布三级评论 + thirdComment(parentId) { + this.childComment2.parentId = parentId; + this.$axios + .post("/comment", this.childComment2, { + headers: { token: localStorage.getItem("token") }, + }) + .then((res) => { + console.log(res); + this.childComment2.content = ""; + // 更新评论列表 + this.$emit("func"); + }); + }, + // 删除评论 + deleteComment(id) { + this.$axios + .delete("/comment", { + params: { id: id }, + headers: { token: localStorage.getItem("token") }, + }) + .then((res) => { + console.log("删除", res); + this.$emit("func"); + }); + }, + // 分页 + page1(page) { + this.$axios + .get("/comment/list", { + params: { + blogId: this.blogId, + page: page, + pageSize: this.pageSize, + }, + }) + .then((res) => { + this.$emit("recordsChange", res.data.data); + }); + }, }, }; @@ -377,11 +471,16 @@ export default { line-height: 22px; word-break: break-word; } + +.comment-list-item .comment-btn .delete { + color: #999aaa; + margin-right: 10px; +} .comment-list-item .comment-btn { display: none; } .comment-list-item:hover .comment-btn { - display: block; + display: flex; } /* 子评论 */ @@ -417,7 +516,12 @@ export default { .pagination-box { text-align: center; } -.comment-list-container .pagination-box .el-pagination .is-background .el-pager li:not(.disabled).active { +.comment-list-container + .pagination-box + .el-pagination + .is-background + .el-pager + li:not(.disabled).active { background-color: #555666; } From b2bb1515ec6a52f677d8737de1976b11b0543723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E6=81=8B?= <1960849016@qq.com> Date: Wed, 11 May 2022 10:55:53 +0800 Subject: [PATCH 18/23] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=8D=9A=E5=AE=A2?= =?UTF-8?q?=E8=AF=84=E8=AE=BA=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vueblog/src/axios.js | 39 ++++++++++++++++++- .../blogDetail/childComps/BlogComment.vue | 2 +- .../src/views/login/childComps/LoginItem.vue | 5 +-- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/vueblog/src/axios.js b/vueblog/src/axios.js index 1e741478..be3d6677 100644 --- a/vueblog/src/axios.js +++ b/vueblog/src/axios.js @@ -1,4 +1,41 @@ import axios from "axios"; +import ElementUI from 'element-ui'; // axios.defaults.baseURL="https://local.sticki.cn/api/v1" -axios.defaults.baseURL="/api" +axios.defaults.baseURL = "/api" + +// 前置拦截 +axios.interceptors.request.use(config => { + return config +}) + +// 后置拦截 +axios.interceptors.response.use(response => { + let res = response.data; + console.log("===============") + console.log(res) + console.log("===============") + + if (res.code === 200) { + return response + } else if (res.code === 401) { + ElementUI.Message.error("未登录") + return Promise.reject(response.data.message) + } else { + ElementUI.Message.error("错误") + return Promise.reject(response.data.message) + } +}, + error => { + console.log("00"); + console.log(error) + if (error.response.data) { + error.message = error.response.data.message + } + if (error.response.status === 401) { + ElementUI.Message.error("未登录") + } + ElementUI.Message.error(error.message) + return Promise.reject(error) + } +) diff --git a/vueblog/src/views/blogDetail/childComps/BlogComment.vue b/vueblog/src/views/blogDetail/childComps/BlogComment.vue index 0a708300..617a6772 100644 --- a/vueblog/src/views/blogDetail/childComps/BlogComment.vue +++ b/vueblog/src/views/blogDetail/childComps/BlogComment.vue @@ -186,7 +186,7 @@
-
123
+
123
diff --git a/vueblog/src/views/login/childComps/LoginItem.vue b/vueblog/src/views/login/childComps/LoginItem.vue index e893cde0..6404830b 100644 --- a/vueblog/src/views/login/childComps/LoginItem.vue +++ b/vueblog/src/views/login/childComps/LoginItem.vue @@ -46,6 +46,7 @@