diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/MarkdownController.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/MarkdownController.java index 3883b6d..e280d8b 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/MarkdownController.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/MarkdownController.java @@ -41,25 +41,6 @@ public class MarkdownController { return R.fail(); } - @Operation(summary = "创建markdown文件") - @Parameters({ - @Parameter(name = "groupingId", description = "分组id",required = true), - @Parameter(name = "title", description = "标题",required = true), - @Parameter(name = "fileName", description = "文件名",required = true), - @Parameter(name = "content", description = "内容",required = true) - }) - @PostMapping - public R createMarkdown( - @RequestParam Long groupingId, - @RequestParam String title, - @RequestParam String fileName, - @RequestBody String content) { - - MarkdownFile file = markdownFileService.createMarkdownFile( - groupingId, title, fileName, content); - - return R.success(file); - } @Operation(summary = "更新Markdown文件") @PostMapping("/updateMarkdown") diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/MarkdownFileService.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/MarkdownFileService.java index 4c3527c..3aa0a73 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/MarkdownFileService.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/MarkdownFileService.java @@ -6,15 +6,6 @@ import com.test.bijihoudaun.entity.MarkdownFile; import java.util.List; public interface MarkdownFileService extends IService { - /** - * 创建Markdown文件 - * @param groupingId 分组ID - * @param title 文件标题 - * @param fileName 文件名 - * @param content 文件内容 - * @return 创建的文件对象 - */ - MarkdownFile createMarkdownFile(Long groupingId, String title, String fileName, String content); /** * 更新Markdown内容 diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/MarkdownFileServiceImpl.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/MarkdownFileServiceImpl.java index fcc3f9f..4fe9ab9 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/MarkdownFileServiceImpl.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/MarkdownFileServiceImpl.java @@ -24,30 +24,17 @@ public class MarkdownFileServiceImpl @Resource SnowflakeIdGenerator snowflakeIdGenerator; - @Override - public MarkdownFile createMarkdownFile(Long groupingId, String title, String fileName, String content) { - MarkdownFile file = new MarkdownFile(); - file.setId(snowflakeIdGenerator.nextId()); - file.setGroupingId(groupingId); - file.setTitle(title); - file.setFileName(fileName); - file.setContent(content); - file.setCreatedAt(new Date()); - file.setUpdatedAt(new Date()); - - markdownFileMapper.insert(file); - return file; - } @Override public MarkdownFile updateMarkdownContent(MarkdownFile markdownFile) { markdownFile.setUpdatedAt(new Date()); - if (markdownFile.getId() != null){ - markdownFileMapper.update(markdownFile, new QueryWrapper().eq("id", markdownFile.getId())); - }else { + // 如果ID为空或0,则视为新文件 + if (markdownFile.getId() == null || markdownFile.getId() == 0L) { markdownFile.setId(snowflakeIdGenerator.nextId()); markdownFile.setCreatedAt(new Date()); - markdownFileMapper.insert(markdownFile); + this.save(markdownFile); // 使用MyBatis-Plus的save方法 + } else { + this.updateById(markdownFile); // 使用MyBatis-Plus的updateById方法 } return markdownFile; } diff --git a/biji-qianduan/src/components/HomePage.vue b/biji-qianduan/src/components/HomePage.vue index 8cfdf44..844901d 100644 --- a/biji-qianduan/src/components/HomePage.vue +++ b/biji-qianduan/src/components/HomePage.vue @@ -460,12 +460,18 @@ const handleSave= async (content, isAutoSave = false) => { extractDeletedImageUrls(imageUrls.value) editData.value.content = content const filesRes = await updateMarkdown(editData.value); - if (filesRes.code===200){ + if (filesRes.code === 200) { + // 关键修复:用后端返回的、带有ID的最新数据更新本地状态 + editData.value = filesRes.data; + if (selectedFile.value) { + selectedFile.value.id = filesRes.data.id; // 确保预览对象也有ID + } + if (!isAutoSave) { ElMessage.success(filesRes.msg); } - await chushihua() - }else { + await chushihua(); + } else { if (!isAutoSave) { ElMessage.error(filesRes.msg); } diff --git a/doc/development_plan.md b/doc/development_plan.md index 5cb0042..2ad6ffd 100644 --- a/doc/development_plan.md +++ b/doc/development_plan.md @@ -64,3 +64,17 @@ - 移除了批量导入/导出的UI。 - 在笔记预览页面添加了“导出为.md”按钮,可将当前笔记内容直接下载为 Markdown 文件。 - 优化了“上传Markdown”功能,用户上传文件后会弹出对话框,让用户选择要导入的分类。 + +## 第五阶段:系统优化与BUG修复 (已完成) + +这个阶段我们对系统进行了深入的优化和问题修复,提升了应用的稳定性和健壮性。 + +- **任务5.1:修复JWT安全漏洞 (已完成)** + - **后端**: 解决了因签名密钥长度不足而导致的安全风险。通过更新密钥并采用 `jjwt` 库的最佳实践重构了 `JwtTokenUtil`,确保了认证系统的安全性。 +- **任务5.2:重构分类系统 (已完成)** + - **前端**: 彻底重构了分类的数据结构和UI,实现了支持无限层级的树状分类系统。使用级联选择器 (`el-cascader`) 优化了新建笔记和分类的体验。 +- **任务5.3:修复笔记保存逻辑 (已完成)** + - **后端**: 重构了笔记保存的业务逻辑,将“新建”和“更新”操作统一到一个接口中,通过判断笔记ID是否存在来智能执行插入或更新,解决了数据重复创建的问题。 + - **前端**: 修复了新建笔记时,后续自动保存操作会重复创建记录的BUG。 +- **任务5.4:修复Markdown预览问题 (已完成)** + - **前端**: 解决了Vditor预览时因DOM异步更新和数据处理不当导致的渲染崩溃及内容截断问题,确保了预览功能的稳定性。 diff --git a/mydatabase.db b/mydatabase.db index a4bfdf7..5db0b01 100644 Binary files a/mydatabase.db and b/mydatabase.db differ