From f72d75e3495815ad7f1023f5e2d287248bbc21c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E5=AD=9F?= <3111696955@qq.com>
Date: Thu, 31 Jul 2025 16:47:44 +0800
Subject: [PATCH] =?UTF-8?q?feat(biji):=20=E6=B7=BB=E5=8A=A0=E6=9C=80?=
=?UTF-8?q?=E8=BF=91=E6=9B=B4=E6=96=B0=E7=AC=94=E8=AE=B0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在前端添加 getRecentFiles API 接口
- 在后端添加 getRecentFiles 接口和相关服务方法
- 实现最近更新笔记的获取和展示
- 优化首页初始化逻辑,加载最近更新笔记
---
biji-houdaun/pom.xml | 2 +-
.../bijihoudaun/config/MybatisPlusConfig.java | 21 +++++++++++++++++++
.../controller/MarkdownController.java | 7 +++++++
.../service/MarkdownFileService.java | 7 +++++++
.../service/impl/MarkdownFileServiceImpl.java | 10 ++++++++-
biji-qianduan/src/api/CommonApi.js | 3 +++
biji-qianduan/src/components/HomePage.vue | 19 ++++++++++++++---
7 files changed, 64 insertions(+), 5 deletions(-)
create mode 100644 biji-houdaun/src/main/java/com/test/bijihoudaun/config/MybatisPlusConfig.java
diff --git a/biji-houdaun/pom.xml b/biji-houdaun/pom.xml
index a571b4a..58f0857 100644
--- a/biji-houdaun/pom.xml
+++ b/biji-houdaun/pom.xml
@@ -29,7 +29,7 @@
17
4.5.0
- 3.5.12
+ 3.5.7
diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/config/MybatisPlusConfig.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..3e50436
--- /dev/null
+++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/config/MybatisPlusConfig.java
@@ -0,0 +1,21 @@
+package com.test.bijihoudaun.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MybatisPlusConfig {
+
+ /**
+ * 添加分页插件
+ */
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQLITE));
+ return interceptor;
+ }
+}
\ No newline at end of file
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 e280d8b..9f03a86 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
@@ -94,4 +94,11 @@ public class MarkdownController {
}
return R.fail("文件未找到或更新失败");
}
+
+ @Operation(summary = "获取最近更新的笔记")
+ @GetMapping("/recent")
+ public R> getRecentFiles() {
+ List files = markdownFileService.getRecentFiles(10);
+ return R.success(files);
+ }
}
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 3aa0a73..0f5318b 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
@@ -57,4 +57,11 @@ public interface MarkdownFileService extends IService {
* @return 更新后的文件对象
*/
MarkdownFile updateMarkdownTitle(Long id, String title);
+
+ /**
+ * 获取最近更新的笔记
+ * @param limit 数量
+ * @return 文件列表
+ */
+ List getRecentFiles(int limit);
}
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 4fe9ab9..f87df05 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
@@ -1,7 +1,7 @@
package com.test.bijihoudaun.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.test.bijihoudaun.entity.MarkdownFile;
import com.test.bijihoudaun.mapper.MarkdownFileMapper;
@@ -86,4 +86,12 @@ public class MarkdownFileServiceImpl
}
return file;
}
+
+ @Override
+ public List getRecentFiles(int limit) {
+ Page page = new Page<>(1, limit);
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.orderByDesc("updated_at");
+ return this.page(page, queryWrapper).getRecords();
+ }
}
diff --git a/biji-qianduan/src/api/CommonApi.js b/biji-qianduan/src/api/CommonApi.js
index ef7d1c5..4f44429 100644
--- a/biji-qianduan/src/api/CommonApi.js
+++ b/biji-qianduan/src/api/CommonApi.js
@@ -89,6 +89,9 @@ export const updateMarkdownTitle = (id, newTitle) => {
});
}
+// 获取最近更新的笔记
+export const getRecentFiles = () => axiosApi.get('/api/markdown/recent');
+
diff --git a/biji-qianduan/src/components/HomePage.vue b/biji-qianduan/src/components/HomePage.vue
index d4774b5..95bad66 100644
--- a/biji-qianduan/src/components/HomePage.vue
+++ b/biji-qianduan/src/components/HomePage.vue
@@ -209,7 +209,8 @@ import {
searchMarkdown,
updateGroupingName,
updateMarkdownTitle,
- deleteGrouping as apiDeleteGrouping
+ deleteGrouping as apiDeleteGrouping,
+ getRecentFiles
} from '@/api/CommonApi.js'
import { Plus, Fold, Expand, Folder, Document, Search, Edit, Delete } from "@element-plus/icons-vue";
import { useUserStore } from '../stores/user';
@@ -221,7 +222,7 @@ const searchKeyword = ref('');
const markdownFiles = ref([]);
const categoryTree = ref([]);
-const groupMarkdownFiles = ref({});
+const groupMarkdownFiles = ref([]);
const showEditor = ref(false);
const selectedFile = ref(null);
const activeMenu = ref('all');
@@ -695,6 +696,7 @@ onMounted(() => {
const chushihua = async () => {
await fetchMarkdownFiles();
await fetchGroupings();
+ await fetchRecentFiles();
}
const goToLogin = () => {
@@ -796,9 +798,20 @@ const handleDeleteGroup = async (group) => {
}
};
+const fetchRecentFiles = async () => {
+ try {
+ const res = await getRecentFiles();
+ // 与 selectFile 等接口保持一致,axios拦截器已处理一层data
+ groupMarkdownFiles.value = res.data;
+ } catch (error) {
+ console.error('获取最近文件失败:', error);
+ ElMessage.error('获取最近文件失败');
+ }
+};
+
const resetToHomeView = () => {
selectedFile.value = null;
- groupMarkdownFiles.value = []; // 清空笔记列表
+ fetchRecentFiles();
};