fix(errors): unify backend error protocol and preserve db detail

This commit is contained in:
miracle authored and GitHub committed 2026-08-05 17:25:21 +08:00
1 parent f1617bbd87
commit c8c40ba839
24 files changed
+1197 -182

No files matched your search

@@ -156,7 +156,7 @@ async function save() {
await store.saveProfiles(cloneProfiles(draft.value));
toast(t("settings.tunnelsSaved"));
} catch (error) {
toast(t("settings.tunnelsSaveFailed", { message: translateBackendError(t, String(error)) }), 5000);
toast(t("settings.tunnelsSaveFailed", { message: translateBackendError(t, error) }), 5000);
} finally {
isSaving.value = false;
}
@@ -175,7 +175,7 @@ async function testSelected() {
testResult.value = { ok: true, message: message ? t("settings.tunnelsTestSuccess") + ": " + message : t("settings.tunnelsTestSuccess") };
} catch (error) {
if (!testGuard.isCurrent(requestId, profile)) return;
testResult.value = { ok: false, message: t("settings.tunnelsTestFailed", { message: translateBackendError(t, String(error)) }) };
testResult.value = { ok: false, message: t("settings.tunnelsTestFailed", { message: translateBackendError(t, error) }) };
} finally {
if (testGuard.isCurrent(requestId, selectedSsh.value || selectedProxy.value)) isTesting.value = false;
}
@@ -3008,7 +3008,7 @@ async function aiTestConn() {
aiTestResult.value = "success";
} catch (e: any) {
aiTestResult.value = "error";
aiTestError.value = translateBackendError(t, e?.message || String(e));
aiTestError.value = translateBackendError(t, e);
} finally {
aiTesting.value = false;
}
@@ -65,7 +65,7 @@ async function refreshTree() {
try {
await connectionStore.refreshAllTree();
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -148,7 +148,7 @@ async function loadTopics(force = false) {
try {
await topicSelectRef.value?.loadTopics();
} catch (e: unknown) {
error.value = translateBackendError(t, formatError(e));
error.value = translateBackendError(t, e);
} finally {
topicsLoading.value = false;
}
@@ -261,7 +261,7 @@ async function loadRuntimeClients() {
}
} catch (e: unknown) {
if (isRuntimeLoadCurrent(loadSeq, currentKey)) {
error.value = translateBackendError(t, formatError(e)) || String(e);
error.value = translateBackendError(t, e);
}
} finally {
if (loadSeq === runtimeLoadSeq) {
@@ -77,7 +77,7 @@ async function loadData() {
throw firstError;
}
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
} finally {
loading.value = false;
}
@@ -100,7 +100,7 @@ async function installExtension(name: string) {
await loadData();
emit("changed");
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
} finally {
installing.value = null;
}
@@ -122,7 +122,7 @@ async function dropExtension(name: string) {
await loadData();
emit("changed");
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
} finally {
dropping.value = null;
}
@@ -2136,7 +2136,7 @@ async function confirmPasteTable() {
await connectionStore.refreshObjectListTreeNode(props.connection.id, props.database, selectedSchema.value);
toast(t("contextMenu.pasteTableCancelledAfterPartial"), 5000);
} catch (e: any) {
toast(t("contextMenu.pasteTableRefreshFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("contextMenu.pasteTableRefreshFailed", { message: translateBackendError(t, e) }), 5000);
}
}
return;
@@ -779,7 +779,7 @@ async function loadMoreObjectGroupChildren() {
try {
await connectionStore.loadMoreObjectGroupChildren(node);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -788,7 +788,7 @@ async function loadAllObjectGroupChildren() {
try {
await connectionStore.loadAllObjectGroupChildren(node);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1150,7 +1150,7 @@ async function openObjectBrowser() {
await toggle();
}
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
openDriverStoreForInstallError(e?.message || String(e));
}
}
@@ -1163,7 +1163,7 @@ async function openUserAdmin() {
connectionStore.activeConnectionId = node.connectionId;
queryStore.openUserAdmin(node.connectionId);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1175,7 +1175,7 @@ async function openProcessList() {
connectionStore.activeConnectionId = node.connectionId;
queryStore.openProcessList(node.connectionId);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1193,7 +1193,7 @@ async function openServerDashboard() {
queryStore.openMysqlDashboard(node.connectionId);
}
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1205,7 +1205,7 @@ async function openDamengJobAdmin() {
connectionStore.activeConnectionId = node.connectionId;
queryStore.openDamengJobAdmin(node.connectionId);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1240,7 +1240,7 @@ async function newQuery() {
const options = await getDatabaseOptions(node.connectionId);
queryStore.createTab(node.connectionId, resolveDefaultDatabase(connection, options), undefined, "query");
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
openDriverStoreForInstallError(e?.message || String(e));
}
}
@@ -1312,7 +1312,7 @@ async function newSelectTemplate() {
});
openSqlTemplateTab(context.node.connectionId!, context.node.database!, context.node.schema, context.node.catalog, sql);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1332,7 +1332,7 @@ async function newInsertTemplate() {
});
openSqlTemplateTab(context.node.connectionId!, context.node.database!, context.node.schema, context.node.catalog, sql);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1351,7 +1351,7 @@ async function newUpdateTemplate() {
});
openSqlTemplateTab(context.node.connectionId!, context.node.database!, context.node.schema, context.node.catalog, sql);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1370,7 +1370,7 @@ async function newDeleteTemplate() {
});
openSqlTemplateTab(context.node.connectionId!, context.node.database!, context.node.schema, context.node.catalog, sql);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
}
}
@@ -1424,7 +1424,7 @@ async function refresh() {
try {
await connectionStore.refreshTreeNode(node);
} catch (e: any) {
toast(t("connection.connectFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("connection.connectFailed", { message: translateBackendError(t, e) }), 5000);
openDriverStoreForInstallError(e?.message || String(e), node);
}
}
@@ -2539,7 +2539,7 @@ async function confirmEditDatabaseProperties() {
showEditDatabasePropertiesDialog.value = false;
await connectionStore.loadDatabases(node.connectionId, { force: true });
} catch (e: any) {
toast(t("contextMenu.tableOperationFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("contextMenu.tableOperationFailed", { message: translateBackendError(t, e) }), 5000);
} finally {
editDatabasePropertiesLoading.value = false;
}
@@ -2611,7 +2611,7 @@ async function confirmEditSchemaComment() {
showEditSchemaCommentDialog.value = false;
await connectionStore.loadSchemas(node.connectionId, node.database, { force: true });
} catch (e: any) {
toast(t("contextMenu.tableOperationFailed", { message: translateBackendError(t, e?.message || String(e)) }), 5000);
toast(t("contextMenu.tableOperationFailed", { message: translateBackendError(t, e) }), 5000);
} finally {
schemaCommentLoading.value = false;
}