From c5866839fdedcd383999a7c97da296712e39cb95 Mon Sep 17 00:00:00 2001 From: xiaozzzi <42293085+xiaozzzi@users.noreply.github.com> Date: Tue, 16 Apr 2024 18:24:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=B4=E6=97=B6=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E8=89=B2=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../article/backup/ArticleBackupService.java | 13 +++- .../article/draft/ArticleController.java | 12 +++- .../backend/server/utils/ArticleUtil.java | 44 ++++++++++--- .../src/main/resources/exportTemplate.html | 61 +++++++++++++------ .../src/views/index/SettingConfigBlog.vue | 2 +- 5 files changed, 100 insertions(+), 32 deletions(-) diff --git a/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/backup/ArticleBackupService.java b/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/backup/ArticleBackupService.java index 7589557..4ad7333 100644 --- a/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/backup/ArticleBackupService.java +++ b/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/backup/ArticleBackupService.java @@ -9,6 +9,8 @@ import cn.hutool.core.util.ZipUtil; import com.blossom.backend.base.param.ParamEnum; import com.blossom.backend.base.param.ParamService; import com.blossom.backend.base.param.pojo.ParamEntity; +import com.blossom.backend.base.paramu.UserParamEnum; +import com.blossom.backend.base.paramu.UserParamService; import com.blossom.backend.base.user.UserService; import com.blossom.backend.base.user.pojo.UserEntity; import com.blossom.backend.server.article.backup.pojo.BackupFile; @@ -56,6 +58,9 @@ public class ArticleBackupService { @Autowired private ParamService paramService; + @Autowired + private UserParamService userParamService; + @Autowired private UserService userService; @@ -126,6 +131,8 @@ public class ArticleBackupService { // 用户信息 UserEntity user = userService.selectById(userId); + final String BLOG_COLOR = userParamService.getValue(userId, UserParamEnum.WEB_BLOG_COLOR).getParamValue(); + final File backLogFile = new File(backupFile.getRootPath() + "/" + "log.txt"); final List backLogs = new ArrayList<>(); log.info("[文章备份] 开始备份, 本次备份文件名称 [{}], 用户ID [{}]", backupFile.getFilename(), userId); @@ -186,7 +193,7 @@ public class ArticleBackupService { articleDetail.setName(article.getN()); // 文章 markdown 内容 - String content = getContentByType(articleDetail, type, user); + String content = getContentByType(articleDetail, type, user, BLOG_COLOR); content = formatContent(content, toLocal, article.getI(), article.getN()); String id = String.valueOf(articleDetail.getId()); String version = String.valueOf(articleDetail.getVersion()); @@ -357,14 +364,14 @@ public class ArticleBackupService { * @param type 类型 * @return 对应的内容 */ - private String getContentByType(ArticleEntity article, BackupTypeEnum type, UserEntity user) { + private String getContentByType(ArticleEntity article, BackupTypeEnum type, UserEntity user, String blogColor) { if (type == BackupTypeEnum.MARKDOWN) { return StrUtil.isBlank(article.getMarkdown()) ? "文章无内容" : article.getMarkdown(); } else if (type == BackupTypeEnum.HTML) { ArticleEntity export = new ArticleEntity(); export.setName(article.getName().substring(article.getName().lastIndexOf("/"))); export.setHtml(article.getHtml()); - return ArticleUtil.toHtml(article, user); + return ArticleUtil.toHtml(article, user, blogColor); } return ""; } diff --git a/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/draft/ArticleController.java b/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/draft/ArticleController.java index 4eeb1cd..813b899 100644 --- a/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/draft/ArticleController.java +++ b/blossom-backend/backend/src/main/java/com/blossom/backend/server/article/draft/ArticleController.java @@ -7,6 +7,8 @@ import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.blossom.backend.base.auth.AuthContext; import com.blossom.backend.base.auth.annotation.AuthIgnore; +import com.blossom.backend.base.paramu.UserParamEnum; +import com.blossom.backend.base.paramu.UserParamService; import com.blossom.backend.base.user.UserService; import com.blossom.backend.server.article.draft.pojo.*; import com.blossom.backend.server.article.open.ArticleOpenService; @@ -60,6 +62,7 @@ public class ArticleController { private final DocService docService; private final DocSortChecker docSortChecker; private final ImportManager importManager; + private final UserParamService userParamService; /** * 查询列表 @@ -260,7 +263,9 @@ public class ArticleController { if (StrUtil.isBlank(article.getHtml())) { article.setHtml("文章无内容"); } - String reportHtml = ArticleUtil.toHtml(article, userService.selectById(AuthContext.getUserId())); + String reportHtml = ArticleUtil.toHtml(article, + userService.selectById(AuthContext.getUserId()), + userParamService.getValue(AuthContext.getUserId(), UserParamEnum.WEB_BLOG_COLOR).getParamValue()); try (InputStream is = new ByteArrayInputStream(reportHtml.getBytes(StandardCharsets.UTF_8)); BufferedInputStream bis = new BufferedInputStream(is)) { String filename = URLEncodeUtil.encode(article.getName() + ".html"); @@ -331,6 +336,9 @@ public class ArticleController { XzException404.throwBy(ObjUtil.isNull(visit), "文章不存在或您无权限查看"); ArticleEntity article = baseService.selectById(visit.getArticleId(), false, false, true, visit.getUserId()); resp.setContentType("text/html"); - return ArticleUtil.toHtml(article, userService.selectById(visit.getUserId())); + return ArticleUtil.toHtml( + article, + userService.selectById(visit.getUserId()), + userParamService.getValue(visit.getUserId(), UserParamEnum.WEB_BLOG_COLOR).getParamValue()); } } diff --git a/blossom-backend/backend/src/main/java/com/blossom/backend/server/utils/ArticleUtil.java b/blossom-backend/backend/src/main/java/com/blossom/backend/server/utils/ArticleUtil.java index 82e07c6..dd6f39b 100644 --- a/blossom-backend/backend/src/main/java/com/blossom/backend/server/utils/ArticleUtil.java +++ b/blossom-backend/backend/src/main/java/com/blossom/backend/server/utils/ArticleUtil.java @@ -102,6 +102,32 @@ public class ArticleUtil { } + /** + * + */ + private static final String SCRIPT_TAG_BLOG_COLOR = " " + + ""; + private static final String prefix = "\n" + "
\n" + @@ -115,7 +141,7 @@ public class ArticleUtil { "
\n" + "
\n" + "
《{BLOSSOM_EXPORT_HTML_ARTICLE_NAME}》
\n" + - "
目录
\n" + + "
目录
\n" + "
"; private static final String suffix = "
"; @@ -136,15 +162,19 @@ public class ArticleUtil { /** * 将文章转换为 html 格式 * - * @param article 文章 - * @param user 用户, 用户获取作者 + * @param article 文章 + * @param user 用户, 用户获取作者 + * @param blogColor 主颜色 * @return html 内容 */ - public static String toHtml(ArticleEntity article, UserEntity user) { - return htmlTag + prefix + public static String toHtml(ArticleEntity article, UserEntity user, String blogColor) { + return htmlTag + + SCRIPT_TAG_BLOG_COLOR + .replaceAll("\\{BLOSSOM_WEB_BLOG_COLOR}", blogColor) + // 替换作者, 文章名称 - .replaceAll("\\{BLOSSOM_EXPORT_HTML_AUTHOR}", user.getNickName()) - .replaceAll("\\{BLOSSOM_EXPORT_HTML_ARTICLE_NAME}", article.getName()) + + prefix + .replaceAll("\\{BLOSSOM_EXPORT_HTML_AUTHOR}", user.getNickName()) + .replaceAll("\\{BLOSSOM_EXPORT_HTML_ARTICLE_NAME}", article.getName()) + article.getHtml() + suffix; } diff --git a/blossom-backend/backend/src/main/resources/exportTemplate.html b/blossom-backend/backend/src/main/resources/exportTemplate.html index de2049c..075bd67 100644 --- a/blossom-backend/backend/src/main/resources/exportTemplate.html +++ b/blossom-backend/backend/src/main/resources/exportTemplate.html @@ -1397,7 +1397,7 @@ padding-left: 15px; border-right: 1px solid #eeeeee; overflow-x: hidden; - overflow-y: scroll + overflow-y: scroll; } .toc > h1, @@ -1406,50 +1406,78 @@ .toc > h4, .toc > h5, .toc > h6 { - margin: 0; + margin-top: 0; + margin-bottom: 0; + line-height: 27px; font-size: 15px; font-weight: 300; cursor: pointer; - color: #727272 + color: #727272; + position: relative; } + .toc > h1::after, + .toc > h2::after, + .toc > h3::after, + .toc > h4::after, + .toc > h5::after, + .toc > h6::after { + content: ""; + position: absolute; + top: 20%; + left: -5px; + width: 2px; + height: 60%; + background: var(--bl-color-primary); + border-radius: 10px; + opacity: 0; + transition: opacity 0.1s; + } + + + .toc > h1:hover, .toc > h2:hover, .toc > h3:hover, .toc > h4:hover, .toc > h5:hover, .toc > h6:hover { - color: #3b3b3b + color: var(--bl-color-primary); } - .toc-h1 { - margin-top: 5px !important; - padding-top: 5px + .toc > h1:hover::after, + .toc > h2:hover::after, + .toc > h3:hover::after, + .toc > h4:hover::after, + .toc > h5:hover::after, + .toc > h6:hover::after { + opacity: 1; } .toc-h2 { - padding-left: 10px + margin-left: 10px; } .toc-h3 { - padding-left: 20px + margin-left: 20px; } .toc-h4 { - padding-left: 30px + margin-left: 30px; } .toc-h5 { - padding-left: 40px + margin-left: 40px; } .toc-h6 { - padding-left: 50px + margin-left: 50px; }