diff --git a/dashboard/src/components/folder/BaseFolderItemSelector.vue b/dashboard/src/components/folder/BaseFolderItemSelector.vue
index 32c4a51e9..5cfd29346 100644
--- a/dashboard/src/components/folder/BaseFolderItemSelector.vue
+++ b/dashboard/src/components/folder/BaseFolderItemSelector.vue
@@ -139,14 +139,12 @@
navigateToFolder((item as any).folderId)
"
>
-
- mdi-home
-
+ mdi-home
{{ item.title }}
diff --git a/dashboard/src/utils/request.ts b/dashboard/src/utils/request.ts
index f9f854282..b373badd6 100644
--- a/dashboard/src/utils/request.ts
+++ b/dashboard/src/utils/request.ts
@@ -65,6 +65,33 @@ function normalizeBaseUrl(baseUrl: string | null | undefined): string {
return stripTrailingSlashes(baseUrl?.trim() || "");
}
+export function normalizeConfiguredApiBaseUrl(
+ baseUrl: string | null | undefined,
+): string {
+ return normalizeBaseUrl(baseUrl);
+}
+
+export function getApiBaseUrlValidationError(
+ baseUrl: string | null | undefined,
+): string {
+ const normalizedBaseUrl = normalizeConfiguredApiBaseUrl(baseUrl);
+
+ if (!normalizedBaseUrl) {
+ return "";
+ }
+
+ try {
+ const parsedUrl = new URL(normalizedBaseUrl);
+ if (!["http:", "https:"].includes(parsedUrl.protocol)) {
+ return "API Base URL must use http:// or https://";
+ }
+ } catch {
+ return "API Base URL must be a valid absolute URL";
+ }
+
+ return "";
+}
+
export function getApiBaseUrl(): string {
return normalizeBaseUrl(service.defaults.baseURL);
}
diff --git a/dashboard/src/views/Settings.vue b/dashboard/src/views/Settings.vue
index 04aba2694..e73ac89f6 100644
--- a/dashboard/src/views/Settings.vue
+++ b/dashboard/src/views/Settings.vue
@@ -472,7 +472,7 @@ import SidebarCustomizer from "@/components/shared/SidebarCustomizer.vue";
import WaitingForRestart from "@/components/shared/WaitingForRestart.vue";
import MigrationDialog from "@/components/shared/MigrationDialog.vue";
import BackupDialog from "@/components/shared/BackupDialog.vue";
-import axios from "@/utils/request";
+import axios, { getApiBaseUrlValidationError } from "@/utils/request";
import { useI18n, useModuleI18n } from "@/i18n/composables";
import { useToast } from "@/utils/toast";
diff --git a/dashboard/src/views/WelcomePage.vue b/dashboard/src/views/WelcomePage.vue
index 1cfb787ac..e73967a74 100644
--- a/dashboard/src/views/WelcomePage.vue
+++ b/dashboard/src/views/WelcomePage.vue
@@ -275,7 +275,11 @@