From 98c604ed53eeb1ccd0c329a78fb43fd078525b3f Mon Sep 17 00:00:00 2001
From: Veal98 <1912420914@qq.com>
Date: Fri, 14 May 2021 21:43:41 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=8C=E6=AC=A1=E7=82=B9?=
=?UTF-8?q?=E5=87=BB=E5=8F=96=E6=B6=88=E7=BD=AE=E9=A1=B6=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=20+=20=E6=9B=B4=E6=96=B0=E9=85=8D=E5=A5=97=E6=95=99=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 17 +++++++++++---
docs/README.md | 11 ++++++++-
docs/_coverpage.md | 2 +-
.../controller/DiscussPostController.java | 21 ++----------------
.../controller/MessageController.java | 3 ++-
.../323b95b3bc6e43f7a8824b43b1e8100c.jpg | Bin 0 -> 14054 bytes
src/main/resources/static/js/discuss.js | 16 ++++++++-----
.../templates/site/discuss-detail.html | 7 ++++--
.../resources/templates/site/profile.html | 2 +-
9 files changed, 45 insertions(+), 34 deletions(-)
create mode 100644 src/main/resources/static/editor-md-upload/323b95b3bc6e43f7a8824b43b1e8100c.jpg
diff --git a/README.md b/README.md
index 88866230..e8fb05e9 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@
[![fork](https://gitee.com/veal98/Echo/badge/fork.svg?theme=dark)](https://gitee.com/veal98/Echo/members)
[![GitHub stars](https://img.shields.io/github/stars/Veal98/Echo?logo=github)](https://github.com/Veal98/Echo/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/Veal98/Echo?logo=github)](https://github.com/Veal98/Echo/network)
-[![version](https://img.shields.io/badge/version-2.0-brightgreen)]()
+[![version](https://img.shields.io/badge/version-2.1-brightgreen)]()
@@ -67,7 +67,7 @@ Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java
- [Echo 的帖子列表与分页是怎么做的](https://mp.weixin.qq.com/s/R5CtsXaS9hIOOePxQZcZhg)
- [Echo 的评论是如何显示的](https://mp.weixin.qq.com/s/0avudnypPu3EewzoU3sEwA)
- [Echo 的发布评论是怎么做的](https://mp.weixin.qq.com/s/S5bNpzuZFga2u15ik2t2iQ)
-- Echo 的私信列表与详情页是怎么做的
+- [Echo 的私信列表与详情页是怎么做的](https://mp.weixin.qq.com/s/ymYrAsJoilO531lilwdmfg)
- Echo 的发送私信是怎么做的
- Echo 的点赞模块是怎么做的
- Echo 的关注模块是怎么做的
@@ -135,10 +135,20 @@ Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java
![](https://gitee.com/veal98/images/raw/master/img/20210211205558.png)
+帖子发布页(支持 MarkDown):
+
+![](https://gitee.com/veal98/images/raw/master/img/20210512101041.png)
+
+帖子详情页(MarkDown 渲染):
+
+![](https://gitee.com/veal98/images/raw/master/img/20210512101202.png)
+
帖子详情页:
![](https://gitee.com/veal98/images/raw/master/img/20210211205741.png)
+
+
个人主页:
![](https://gitee.com/veal98/images/raw/master/img/20210211205820.png)
@@ -262,7 +272,7 @@ Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java
以下是我觉得本项目还可以添加的功能,同样欢迎各位小伙伴提 issue 指出还可以增加哪些功能,或者直接提 PR 实现该功能:
-- [ ] 发帖支持 Markdown 格式
+- [x] 发帖支持 Markdown 格式
- [ ] 忘记密码(发送邮件找回密码)
- [ ] 查询我的点赞
- [ ] 管理员对帖子的二次点击取消置顶功能
@@ -504,6 +514,7 @@ double score = Math.log10(Math.max(w, 1))
- [freedom_dh](https://gitee.com/dh_free)
- [paulisusu](https://gitee.com/paulisusu)
+- [Max (Lyingfromyou)](https://gitee.com/Lyingfromyou)
> 🔗 友情链接(若您想要出现在这里,可以上方扫描微信二维码联系我):
>
diff --git a/docs/README.md b/docs/README.md
index dccacbf0..db5c15e7 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -40,7 +40,7 @@ Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java
- [Echo 的帖子列表与分页是怎么做的](https://mp.weixin.qq.com/s/R5CtsXaS9hIOOePxQZcZhg)
- [Echo 的评论是如何显示的](https://mp.weixin.qq.com/s/0avudnypPu3EewzoU3sEwA)
- [Echo 的发布评论是怎么做的](https://mp.weixin.qq.com/s/S5bNpzuZFga2u15ik2t2iQ)
-- Echo 的私信列表与详情页是怎么做的
+- [Echo 的私信列表与详情页是怎么做的](https://mp.weixin.qq.com/s/ymYrAsJoilO531lilwdmfg)
- Echo 的发送私信是怎么做的
- Echo 的点赞模块是怎么做的
- Echo 的关注模块是怎么做的
@@ -108,6 +108,14 @@ Echo 是一套前后端不分离的开源社区系统,基于目前主流 Java
![](https://gitee.com/veal98/images/raw/master/img/20210211205558.png)
+帖子发布页(支持 MarkDown):
+
+![](https://gitee.com/veal98/images/raw/master/img/20210512101041.png)
+
+帖子详情页(MarkDown 渲染):
+
+![](https://gitee.com/veal98/images/raw/master/img/20210512101202.png)
+
帖子详情页:
![](https://gitee.com/veal98/images/raw/master/img/20210211205741.png)
@@ -477,6 +485,7 @@ double score = Math.log10(Math.max(w, 1))
- [freedom_dh](https://gitee.com/dh_free)
- [paulisusu](https://gitee.com/paulisusu)
+- [Max (Lyingfromyou)](https://gitee.com/Lyingfromyou)
> 🔗 友情链接(若您想要出现在这里,可以上方扫描微信二维码联系我):
>
diff --git a/docs/_coverpage.md b/docs/_coverpage.md
index 571bc6d9..9091f289 100644
--- a/docs/_coverpage.md
+++ b/docs/_coverpage.md
@@ -1,6 +1,6 @@
![Logo](https://gitee.com/veal98/images/raw/master/img/20210211175136.png)
-# Echo 2.0
+# Echo 2.1
> 🦄 开源社区系统
diff --git a/src/main/java/com/greate/community/controller/DiscussPostController.java b/src/main/java/com/greate/community/controller/DiscussPostController.java
index 7dee75a8..4dda60ca 100644
--- a/src/main/java/com/greate/community/controller/DiscussPostController.java
+++ b/src/main/java/com/greate/community/controller/DiscussPostController.java
@@ -10,9 +10,6 @@ import com.greate.community.util.CommunityConstant;
import com.greate.community.util.CommunityUtil;
import com.greate.community.util.HostHolder;
import com.greate.community.util.RedisKeyUtil;
-import com.qiniu.util.Auth;
-import com.qiniu.util.StringMap;
-import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
@@ -22,8 +19,6 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.util.HtmlUtils;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.*;
@@ -63,18 +58,6 @@ public class DiscussPostController implements CommunityConstant {
@Value("${server.servlet.context-path}")
private String contextPath;
- @Value("${qiniu.key.access}")
- private String accessKey;
-
- @Value("${qiniu.key.secret}")
- private String secretKey;
-
- @Value("${qiniu.bucket.header.name}")
- private String headerBucketName;
-
- @Value("${qiniu.bucket.header.url}")
- private String headerBucketUrl;
-
// editorMd 图片上传地址
@Value("${community.path.editormdUploadPath}")
private String editormdUploadPath;
@@ -251,8 +234,8 @@ public class DiscussPostController implements CommunityConstant {
*/
@PostMapping("/top")
@ResponseBody
- public String setTop(int id) {
- discussPostService.updateType(id, 1);
+ public String updateTop(int id, int type) {
+ discussPostService.updateType(id, type);
// 触发发帖事件,通过消息队列将其存入 Elasticsearch 服务器
Event event = new Event()
diff --git a/src/main/java/com/greate/community/controller/MessageController.java b/src/main/java/com/greate/community/controller/MessageController.java
index 4028c9b8..7065e4bb 100644
--- a/src/main/java/com/greate/community/controller/MessageController.java
+++ b/src/main/java/com/greate/community/controller/MessageController.java
@@ -40,6 +40,8 @@ public class MessageController implements CommunityConstant {
@GetMapping("/letter/list")
public String getLetterList(Model model, Page page) {
// Integer.valueOf("abc"); // 测试统一异常处理(普通请求)
+
+ // 获取当前登录用户信息
User user = hostHolder.getUser();
// 分页信息
page.setLimit(5);
@@ -114,7 +116,6 @@ public class MessageController implements CommunityConstant {
}
return "/site/letter-detail";
-
}
/**
diff --git a/src/main/resources/static/editor-md-upload/323b95b3bc6e43f7a8824b43b1e8100c.jpg b/src/main/resources/static/editor-md-upload/323b95b3bc6e43f7a8824b43b1e8100c.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..85e9127c975cc4ccb0138a839fcadbb7c7ad69f6
GIT binary patch
literal 14054
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
S^k0_}{w2u&n__h5
-
+
+