feattrash: 优化删除功能和回收站逻辑
- 修改 Markdown 文件和分组的删除逻辑,使用软删除方式 - 更新回收站相关接口和页面展示 -优化前端保存逻辑,支持新建文件和更新文件 - 调整后端 API 接口,使用更合适的 HTTP 方法
This commit is contained in:
@@ -40,7 +40,7 @@ export const uploadImage = (file) => {
|
||||
}
|
||||
|
||||
// 删除Markdown文件
|
||||
export const deleteMarkdown = (id) => axiosApi.post(`/api/markdown/delete?id=${id}`);
|
||||
export const deleteMarkdown = (id) => axiosApi.delete(`/api/markdown/${id}`);
|
||||
// 根据分组ID获取Markdown文件列表
|
||||
export const markdownList = (groupingId) => axiosApi.get(`/api/markdown/grouping/${groupingId}`);
|
||||
|
||||
|
||||
@@ -548,29 +548,41 @@ const debouncedSave = (value) => {
|
||||
const handleSave = async (content) => {
|
||||
saveStatus.value = '正在保存...';
|
||||
try {
|
||||
const newImageUrls = extractImageUrls(content);
|
||||
const deletedImages = originalImages.value.filter(url => !newImageUrls.includes(url));
|
||||
// 构造一个干净的、只包含必要字段的 payload
|
||||
const payload = {
|
||||
id: editData.value.id, // 可能是 null,用于创建
|
||||
title: editData.value.title,
|
||||
groupingId: editData.value.groupingId,
|
||||
content: content,
|
||||
fileName: editData.value.fileName || `${editData.value.title}.md`,
|
||||
};
|
||||
|
||||
if (deletedImages.length > 0) {
|
||||
await deleteImages({ imageUrls: deletedImages });
|
||||
// 调用后端接口
|
||||
const response = await updateMarkdown(payload);
|
||||
|
||||
// 使用后端返回的完整、最新的数据更新前端状态
|
||||
// 这对于新创建的笔记至关重要,因为它会获得一个新的 ID
|
||||
editData.value = response.data;
|
||||
|
||||
// 如果当前正在预览这个文件,也更新 selectedFile
|
||||
if (selectedFile.value && (!selectedFile.value.id || selectedFile.value.id === response.data.id)) {
|
||||
selectedFile.value = response.data;
|
||||
}
|
||||
|
||||
originalImages.value = newImageUrls;
|
||||
|
||||
const payload = {
|
||||
...editData.value,
|
||||
content: content,
|
||||
};
|
||||
const response = await updateMarkdown(payload);
|
||||
editData.value = response.data;
|
||||
selectedFile.value = editData.value;
|
||||
saveStatus.value = '已保存';
|
||||
ElMessage.success('保存成功');
|
||||
await fetchGroupings();
|
||||
|
||||
// 刷新文件列表以反映更改(例如,新文件出现)
|
||||
await fetchMarkdownFiles();
|
||||
// 如果当前在某个分类下,也刷新该分类的列表
|
||||
if (activeMenu.value.startsWith('group-')) {
|
||||
const groupId = activeMenu.value.split('-');
|
||||
await selectFile({ id: groupId, grouping: currentGroupName.value });
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
saveStatus.value = '保存失败';
|
||||
ElMessage.error('保存失败: ' + error.message);
|
||||
ElMessage.error('保存失败: ' + (error.response?.data?.message || error.message));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user