refactor: 统一错误处理并优化代码
- 移除重复的错误提示,统一在axios拦截器中处理 - 优化XSS拦截器,添加请求头白名单 - 修复注册码服务的日期处理问题 - 添加403权限错误处理 - 优化分组查询参数处理
This commit is contained in:
@@ -6,9 +6,10 @@ import axiosApi from '@/utils/axios.js'
|
||||
export const groupingId = (data) => axiosApi.get(`/api/markdown/grouping/${encodeURIComponent(data)}`)
|
||||
// 获取所有分组
|
||||
export const groupingAll = (data) => {
|
||||
const params = new URLSearchParams();
|
||||
if (data) params.append('parentId', data);
|
||||
return axiosApi.get(`/api/groupings?${params.toString()}`);
|
||||
if (data) {
|
||||
return axiosApi.get(`/api/groupings?parentId=${encodeURIComponent(data)}`);
|
||||
}
|
||||
return axiosApi.get('/api/groupings');
|
||||
};
|
||||
// 获取所有Markdown文件
|
||||
export const markdownAll = () => axiosApi.get(`/api/markdown`);
|
||||
|
||||
@@ -92,7 +92,8 @@ const refreshCaptcha = async () => {
|
||||
captchaCode.value = '';
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('获取验证码失败,请重试');
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('获取验证码失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -256,7 +256,8 @@ const resetToHomeView = async () => {
|
||||
groupMarkdownFiles.value = await getRecentFiles(100) || [];
|
||||
updateDisplayedFiles();
|
||||
} catch (error) {
|
||||
ElMessage.error('获取最近文件失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('获取最近文件失败:', error);
|
||||
groupMarkdownFiles.value = [];
|
||||
displayedFiles.value = [];
|
||||
}
|
||||
@@ -298,7 +299,8 @@ const handleSelectFile = async (data) => {
|
||||
showEditor.value = false;
|
||||
activeMenu.value = `group-${data.id}`;
|
||||
} catch (error) {
|
||||
ElMessage.error('获取笔记列表失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('获取笔记列表失败:', error);
|
||||
groupMarkdownFiles.value = [];
|
||||
displayedFiles.value = [];
|
||||
}
|
||||
@@ -379,7 +381,8 @@ const previewFile = async (file) => {
|
||||
selectedFile.value = { ...file, content, isLoading: false };
|
||||
}
|
||||
} catch (error) {
|
||||
ElMessage.error('获取笔记内容失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('获取笔记内容失败:', error);
|
||||
selectedFile.value = null;
|
||||
}
|
||||
};
|
||||
@@ -401,7 +404,8 @@ const deleteNote = (file) => {
|
||||
await fetchGroupings();
|
||||
await resetToHomeView();
|
||||
} catch (error) {
|
||||
ElMessage.error('删除笔记失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('删除笔记失败:', error);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -465,7 +469,8 @@ const handleSearch = async () => {
|
||||
showEditor.value = false;
|
||||
activeMenu.value = 'search';
|
||||
} catch (error) {
|
||||
ElMessage.error('搜索失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('搜索失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -528,7 +533,8 @@ const handleExport = async (format) => {
|
||||
}
|
||||
ElMessage.success(`${format.toUpperCase()} 导出成功`);
|
||||
} catch (error) {
|
||||
ElMessage.error(`导出失败: ${error.message}`);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('导出失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -71,7 +71,8 @@ const fetchTrashItems = async () => {
|
||||
const response = await getTrash();
|
||||
trashItems.value = response || [];
|
||||
} catch (error) {
|
||||
ElMessage.error('获取回收站内容失败');
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('获取回收站内容失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -81,7 +82,8 @@ const handleRestore = async (item) => {
|
||||
ElMessage.success('恢复成功');
|
||||
fetchTrashItems();
|
||||
} catch (error) {
|
||||
ElMessage.error('恢复失败');
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('恢复失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -126,7 +128,8 @@ const handleCaptchaConfirm = async ({ captchaId, captchaCode }) => {
|
||||
pendingItem.value = null;
|
||||
fetchTrashItems();
|
||||
} catch (error) {
|
||||
ElMessage.error('操作失败: ' + (error.response?.data?.msg || error.message));
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('操作失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -81,8 +81,9 @@ const initVditor = () => {
|
||||
const url = res.url;
|
||||
const baseUrl = import.meta.env.VITE_API_BASE_URL || '';
|
||||
vditor.value.insertValue(``);
|
||||
}).catch(() => {
|
||||
ElMessage.error('图片上传失败');
|
||||
}).catch((error) => {
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('图片上传失败:', error);
|
||||
});
|
||||
},
|
||||
},
|
||||
@@ -150,7 +151,8 @@ const save = async (value) => {
|
||||
}
|
||||
} catch (error) {
|
||||
saveStatus.value = '保存失败';
|
||||
ElMessage.error('保存失败: ' + (error.message || '未知错误'));
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('保存失败:', error);
|
||||
} finally {
|
||||
isSaving.value = false;
|
||||
}
|
||||
|
||||
@@ -118,7 +118,8 @@ const handleDeleteGroup = (group) => {
|
||||
ElMessage.success('分类已删除');
|
||||
emit('group-deleted');
|
||||
} catch (error) {
|
||||
ElMessage.error('删除分类失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('删除分类失败:', error);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -113,7 +113,8 @@ const handleSubmit = async () => {
|
||||
emit('group-created'); // 通知父组件刷新
|
||||
handleClose();
|
||||
} catch (error) {
|
||||
ElMessage.error('创建分类失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('创建分类失败:', error);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -154,7 +154,8 @@ const handleSubmit = async () => {
|
||||
emit('move-success');
|
||||
handleClose();
|
||||
} catch (error) {
|
||||
ElMessage.error('移动失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('移动失败:', error);
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
|
||||
@@ -68,7 +68,8 @@ const handleSubmit = async () => {
|
||||
emit('privacy-changed', updatedFile);
|
||||
handleClose();
|
||||
} catch (error) {
|
||||
ElMessage.error('修改笔记状态失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('修改笔记状态失败:', error);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -60,7 +60,8 @@ const handleSubmit = async () => {
|
||||
// 传递新名称给父组件
|
||||
emit('renamed', newName.value);
|
||||
} catch (error) {
|
||||
ElMessage.error('重命名失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('重命名失败:', error);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -80,7 +80,8 @@ const handleSubmit = () => {
|
||||
emit('import-success');
|
||||
handleClose();
|
||||
} catch (error) {
|
||||
ElMessage.error('导入失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('导入失败:', error);
|
||||
}
|
||||
};
|
||||
reader.readAsText(props.fileToImport);
|
||||
|
||||
@@ -59,8 +59,8 @@ const fetchRegistrationStatus = async () => {
|
||||
try {
|
||||
isRegistrationEnabled.value = await getRegistrationStatus();
|
||||
} catch (error) {
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error("Failed to fetch registration status:", error);
|
||||
ElMessage.error('获取注册状态失败');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -69,7 +69,7 @@ const handleToggleRegistration = async (value) => {
|
||||
await toggleRegistration(value);
|
||||
ElMessage.success(`注册功能已${value ? '开启' : '关闭'}`);
|
||||
} catch (error) {
|
||||
ElMessage.error('操作失败');
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
isRegistrationEnabled.value = !value; // Revert on failure
|
||||
}
|
||||
};
|
||||
@@ -80,7 +80,8 @@ const handleGenerateCode = async () => {
|
||||
generatedCode.value = code;
|
||||
ElMessage.success('注册码生成成功');
|
||||
} catch (error) {
|
||||
ElMessage.error('生成注册码失败: ' + error.message);
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('生成注册码失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -115,7 +115,8 @@ const handleCaptchaConfirm = async ({ captchaId, captchaCode }) => {
|
||||
emit('password-updated');
|
||||
handleClose();
|
||||
} catch (error) {
|
||||
ElMessage.error('密码修改失败: ' + (error.response?.data?.msg || error.message));
|
||||
// 错误已在 axios 拦截器中显示,这里不再重复显示
|
||||
console.error('密码修改失败:', error);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
@@ -71,6 +71,13 @@ instance.interceptors.response.use(
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
// 403 - 权限不足
|
||||
if (status === 403) {
|
||||
const msg = data?.msg || '无权操作';
|
||||
ElMessage.error(msg);
|
||||
return Promise.reject(new Error(msg));
|
||||
}
|
||||
|
||||
// 429 - 请求过于频繁
|
||||
if (status === 429) {
|
||||
const msg = data?.msg || '请求过于频繁,请稍后再试';
|
||||
|
||||
Reference in New Issue
Block a user