diff --git a/biji-houdaun/pom.xml b/biji-houdaun/pom.xml index e8a2c58..73f4d53 100644 --- a/biji-houdaun/pom.xml +++ b/biji-houdaun/pom.xml @@ -47,7 +47,6 @@ org.springframework.boot spring-boot-starter-aop - org.xerial diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/GroupingController.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/GroupingController.java index b9213bf..31cae62 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/GroupingController.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/GroupingController.java @@ -35,17 +35,20 @@ public class GroupingController { @Operation(summary = "更新分组名称") @PutMapping("/{id}") public R updateGrouping( - @PathVariable Long id, + @PathVariable String id, @RequestBody Grouping grouping) { - grouping.setId(id); + + long l = Long.parseLong(id); + grouping.setId(l); Grouping updated = groupingService.updateGrouping(grouping); return R.success(updated); } @Operation(summary = "删除分组") @DeleteMapping("/{id}") - public R deleteGrouping(@PathVariable Long id) { - groupingService.deleteGrouping(id); + public R deleteGrouping(@PathVariable String id) { + Long idLong = Long.parseLong(id); + groupingService.deleteGrouping(idLong); return R.success(); } } diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/ImageController.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/ImageController.java index ca7b26d..f9bf92d 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/ImageController.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/ImageController.java @@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.util.List; + @Tag(name = "markdown接口") @RestController @RequestMapping("/api/images") @@ -28,14 +30,39 @@ public class ImageController { }) @PostMapping public R uploadImage( - @RequestParam(required = false) Long markdownId, + @RequestParam(required = false) String markdownId, @RequestParam("file") MultipartFile file) { try { - Image image = imageService.uploadImage(markdownId, file); + Long markdownIdLong = Long.parseLong(markdownId); + Image image = imageService.uploadImage(markdownIdLong, file); return R.success(image); } catch (IOException e) { return R.fail(); } } + + @Operation(summary = "根据id删除图片") + @DeleteMapping("/{id}") + public R deleteImage(@PathVariable Long id) { + boolean result = imageService.deleteImage(id); + if (result) { + return R.success(); + } else { + return R.fail(); + } + } + + @Operation(summary = "根据url删除图片") + @DeleteMapping + public R deleteImageByUrl(@RequestParam String url) { + boolean result = imageService.deleteImageByUrl(url); + if (result) { + return R.success(); + } else { + return R.fail(); + } + } + + } diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/ImageService.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/ImageService.java index b657300..1ae546e 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/ImageService.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/ImageService.java @@ -31,4 +31,19 @@ public interface ImageService extends IService { * @return 图片列表 */ List getMarkdownImages(Long markdownId); + + /** + * 根据URL删除图片 + * @param url + * @return + */ + boolean deleteImageByUrl(String url); + + /** + * 根据URL批量更新图片ID + * @param list + * @param markdownId + * @return + */ + boolean updateImageId(List list, Long markdownId); } diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/ImageServiceImpl.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/ImageServiceImpl.java index 0edab47..08a2baf 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/ImageServiceImpl.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/ImageServiceImpl.java @@ -1,5 +1,7 @@ package com.test.bijihoudaun.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.stream.CollectorUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -87,4 +89,38 @@ public class ImageServiceImpl .orderByDesc("created_at"); return this.list(queryWrapper); } + + @Override + public boolean deleteImageByUrl(String url) { + Image image = imageMapper.selectOne(new QueryWrapper().eq("url", url)); + if (image == null) { + return false; + } + try { + // 删除文件系统中的图片 + Path filePath = Paths.get(uploadDir, image.getStoredName()); + Files.deleteIfExists(filePath); + + // 删除数据库记录 + this.removeById(image.getId()); + return true; + } catch (IOException e) { + throw new RuntimeException("删除图片失败", e); + } + } + + @Override + public boolean updateImageId(List list, Long markdownId) { + if (CollUtil.isEmpty( list)) { + return false; + } + for (String url : list) { + Image image = imageMapper.selectOne(new QueryWrapper().eq("url", url)); + if (image != null) { + image.setMarkdownId(markdownId); + this.updateById(image); + } + } + return true; + } } diff --git a/biji-qianduan/src/components/HomePage.vue b/biji-qianduan/src/components/HomePage.vue index e2f47c1..cf4a23e 100644 --- a/biji-qianduan/src/components/HomePage.vue +++ b/biji-qianduan/src/components/HomePage.vue @@ -49,13 +49,18 @@

{{ selectedFile.title }}

清空 - 编辑 + 编辑 删除 返回 保存
- + @@ -139,6 +146,8 @@ import '@kangc/v-md-editor/lib/theme/style/github.css'; import {groupingId, groupingAll, markdownAll, addGroupings, Preview, updateMarkdown} from '@/api/CommonApi.js' import {DArrowRight} from "@element-plus/icons-vue"; + + const markdownFiles = ref([]); const groupings = ref([]); const groupFiles = ref({}); @@ -154,6 +163,8 @@ const newNoteForm = ref({ title: '', groupingId: null }); const editData=ref(null) + + // 获取所有分组 const fetchGroupings = async () => { try { @@ -197,6 +208,10 @@ const fetchGroupings = async () => { } }; +const handleCopyCodeSuccess = () => { + ElMessage.success('代码已复制到剪贴板'); +}; + // 获取所有Markdown文件(确保ID为字符串) const fetchMarkdownFiles = async () => { try { @@ -277,8 +292,17 @@ const editNote = (file) => { showEditor.value = true; }; -const handleImageUpload=()=>{ - console.log(666) +const handleImageUpload=(event,insertImage,files)=>{ + console.log(files) + + // 插入图片 + insertImage({ + // 图片地址 + url: + 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1269952892,3525182336&fm=26&gp=0.jpg' + // 图片描述 + // desc: '七龙珠', + }); } // 在编辑页面,按Ctrl+S保存笔记,或者点击保存,对数据进行保存 diff --git a/biji-qianduan/src/main.js b/biji-qianduan/src/main.js index aad05d8..c88dc20 100644 --- a/biji-qianduan/src/main.js +++ b/biji-qianduan/src/main.js @@ -4,33 +4,47 @@ import router from './router/' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' -import VMdEditor from '@kangc/v-md-editor'; -import '@kangc/v-md-editor/lib/style/base-editor.css'; -import githubTheme from '@kangc/v-md-editor/lib/theme/github.js'; -import '@kangc/v-md-editor/lib/theme/style/github.css'; +// 1. 导入编辑器和预览组件 +import VMdEditor from '@kangc/v-md-editor' +import VMdPreview from '@kangc/v-md-editor/lib/preview' -import VMdPreview from '@kangc/v-md-editor/lib/preview'; -import '@kangc/v-md-editor/lib/style/preview.css'; -import '@kangc/v-md-editor/lib/theme/style/github.css'; +// 2. 导入基础样式 +import '@kangc/v-md-editor/lib/style/base-editor.css' +import '@kangc/v-md-editor/lib/style/preview.css' +// 3. 导入主题和样式 +import githubTheme from '@kangc/v-md-editor/lib/theme/github' +import '@kangc/v-md-editor/lib/theme/style/github.css' + +// 4. 导入复制代码插件及其样式 +import createCopyCodePlugin from '@kangc/v-md-editor/lib/plugins/copy-code/index' +import '@kangc/v-md-editor/lib/plugins/copy-code/copy-code.css' + +// 5. 导入高亮库 +import hljs from 'highlight.js' const app = createApp(App) -// highlightjs -import hljs from 'highlight.js'; +// 6. 配置编辑器 VMdEditor.use(githubTheme, { Hljs: hljs, -}); +}) + +// 7. 配置预览组件 VMdPreview.use(githubTheme, { Hljs: hljs, -}); +}) -// // 配置Markdown编辑器 -app.use(VMdEditor); -app.use(VMdPreview); +// 8. 为编辑器和预览分别添加复制插件 +VMdEditor.use(createCopyCodePlugin()) +VMdPreview.use(createCopyCodePlugin()) // 注意这里使用同一个插件创建函数 -// 使用Element Plus和路由 +// 9. 注册组件 +app.use(VMdEditor) +app.use(VMdPreview) + +// 10. 使用Element Plus和路由 app.use(ElementPlus) app.use(router) -app.mount('#app') +app.mount('#app') \ No newline at end of file diff --git a/mydatabase.db b/mydatabase.db index b641547..206014a 100644 Binary files a/mydatabase.db and b/mydatabase.db differ