refactor(biji): 重构笔记保存逻辑并修复相关BUG
- 后端:将笔记创建和更新逻辑合并为一个接口,根据ID是否存在自动判断操作类型 - 前端:修复了新建笔记时自动保存导致数据重复创建的问题 - 优化了与后端的数据同步,确保本地状态与服务器保持一致
This commit is contained in:
@@ -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<MarkdownFile> 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")
|
||||
|
||||
@@ -6,15 +6,6 @@ import com.test.bijihoudaun.entity.MarkdownFile;
|
||||
import java.util.List;
|
||||
|
||||
public interface MarkdownFileService extends IService<MarkdownFile> {
|
||||
/**
|
||||
* 创建Markdown文件
|
||||
* @param groupingId 分组ID
|
||||
* @param title 文件标题
|
||||
* @param fileName 文件名
|
||||
* @param content 文件内容
|
||||
* @return 创建的文件对象
|
||||
*/
|
||||
MarkdownFile createMarkdownFile(Long groupingId, String title, String fileName, String content);
|
||||
|
||||
/**
|
||||
* 更新Markdown内容
|
||||
|
||||
@@ -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<MarkdownFile>().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;
|
||||
}
|
||||
|
||||
@@ -461,10 +461,16 @@ const handleSave= async (content, isAutoSave = false) => {
|
||||
editData.value.content = content
|
||||
const filesRes = await updateMarkdown(editData.value);
|
||||
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()
|
||||
await chushihua();
|
||||
} else {
|
||||
if (!isAutoSave) {
|
||||
ElMessage.error(filesRes.msg);
|
||||
|
||||
@@ -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异步更新和数据处理不当导致的渲染崩溃及内容截断问题,确保了预览功能的稳定性。
|
||||
|
||||
BIN
mydatabase.db
BIN
mydatabase.db
Binary file not shown.
Reference in New Issue
Block a user