From fbc2e5ac9164a68517f0dff1b31ce7f5a9a0b886 Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 3 May 2026 19:48:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E6=89=80=E6=9C=89?= =?UTF-8?q?=E7=A1=AC=E7=BC=96=E7=A0=81=E7=9A=84localhost:8080=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建utils/config.ts集中管理API_BASE和文件URL - 删除.env文件(VITE_SERVER_API_URL=http://localhost:8080) - env.ts默认API前缀改为/api/v1匹配后端路由 - 替换16处硬编码的localhost:8080引用 --- .../src/components/app-sidebar/team-switcher.vue | 8 +++----- .../src/components/marketing-layout/the-header.vue | 14 +++----------- frontend/src/layouts/admin.vue | 7 ++----- .../src/pages/admin/agent-apps/[id]/card-types.vue | 2 +- frontend/src/pages/admin/agent-apps/[id]/edit.vue | 2 +- .../src/pages/admin/agent-apps/[id]/recharge.vue | 2 +- frontend/src/pages/admin/agent-apps/invite.vue | 2 +- frontend/src/pages/admin/agent-apps/request.vue | 2 +- .../src/pages/admin/applications/[id]/security.vue | 3 +-- .../src/pages/admin/applications/[id]/settings.vue | 3 +-- .../admin/applications/components/app-card.vue | 4 +++- .../pages/admin/applications/components/columns.ts | 3 ++- frontend/src/pages/admin/applications/create.vue | 3 +-- frontend/src/pages/admin/card-types/index.vue | 2 +- frontend/src/pages/admin/dynamic-code.vue | 2 +- frontend/src/utils/config.ts | 8 ++++++++ frontend/src/utils/env.ts | 2 +- 17 files changed, 32 insertions(+), 37 deletions(-) create mode 100644 frontend/src/utils/config.ts diff --git a/frontend/src/components/app-sidebar/team-switcher.vue b/frontend/src/components/app-sidebar/team-switcher.vue index de88f3a..3ee089c 100644 --- a/frontend/src/components/app-sidebar/team-switcher.vue +++ b/frontend/src/components/app-sidebar/team-switcher.vue @@ -3,6 +3,8 @@ import { ref } from 'vue' import type { Team } from './types' +import { getFileUrl } from '@/utils/config' + const { teams } = defineProps<{ teams: Team[] }>() @@ -10,11 +12,7 @@ const { teams } = defineProps<{ const activeTeam = ref(teams[0]) function getAssetUrl(path: string) { - if (!path) - return '' - if (path.startsWith('http')) - return path - return `${import.meta.env.VITE_API_BASE || 'http://localhost:8080'}${path}` + return getFileUrl(path) } diff --git a/frontend/src/components/marketing-layout/the-header.vue b/frontend/src/components/marketing-layout/the-header.vue index a0ed28a..42274bc 100644 --- a/frontend/src/components/marketing-layout/the-header.vue +++ b/frontend/src/components/marketing-layout/the-header.vue @@ -7,6 +7,7 @@ import { useRoute, useRouter } from 'vue-router' import ThemePopover from '@/components/custom-theme/theme-popover.vue' import LanguageChange from '@/components/language-change.vue' +import { getFileUrl } from '@/utils/config' const { t } = useI18n() const mode = useColorMode() @@ -31,20 +32,11 @@ const siteSettings = ref({ const siteName = computed(() => siteSettings.value.siteName) const userAvatar = computed(() => { - const avatar = currentUser.value?.avatar - if (!avatar) - return '' - if (avatar.startsWith('http')) - return avatar - return `${import.meta.env.VITE_API_BASE || 'http://localhost:8080'}${avatar}` + return getFileUrl(currentUser.value?.avatar) }) function getAssetUrl(path: string) { - if (!path) - return '' - if (path.startsWith('http')) - return path - return `${import.meta.env.VITE_API_BASE || 'http://localhost:8080'}${path}` + return getFileUrl(path) } const logoSrc = computed(() => { diff --git a/frontend/src/layouts/admin.vue b/frontend/src/layouts/admin.vue index 66269d1..6bb1341 100644 --- a/frontend/src/layouts/admin.vue +++ b/frontend/src/layouts/admin.vue @@ -7,6 +7,7 @@ import LanguageChange from '@/components/language-change.vue' import ThemePopover from '@/components/custom-theme/theme-popover.vue' import ToggleTheme from '@/components/toggle-theme.vue' import api from '@/services/api' +import { getFileUrl } from '@/utils/config' const router = useRouter() @@ -72,11 +73,7 @@ const breadcrumbs = computed(() => { }) function getAssetUrl(path: string) { - if (!path) - return '' - if (path.startsWith('http')) - return path - return `${import.meta.env.VITE_API_BASE || 'http://localhost:8080'}${path}` + return getFileUrl(path) } function updateFavicon(favicon: string) { diff --git a/frontend/src/pages/admin/agent-apps/[id]/card-types.vue b/frontend/src/pages/admin/agent-apps/[id]/card-types.vue index d7c41b1..36713e2 100644 --- a/frontend/src/pages/admin/agent-apps/[id]/card-types.vue +++ b/frontend/src/pages/admin/agent-apps/[id]/card-types.vue @@ -5,6 +5,7 @@ import { useRoute, useRouter } from 'vue-router' import { toast } from 'vue-sonner' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' interface CardType { id: number @@ -23,7 +24,6 @@ interface CardTypePermission { const route = useRoute() const router = useRouter() -const API_BASE = 'http://localhost:8080/api/v1' const loading = ref(true) const saving = ref(false) diff --git a/frontend/src/pages/admin/agent-apps/[id]/edit.vue b/frontend/src/pages/admin/agent-apps/[id]/edit.vue index cb9b435..a7c74f2 100644 --- a/frontend/src/pages/admin/agent-apps/[id]/edit.vue +++ b/frontend/src/pages/admin/agent-apps/[id]/edit.vue @@ -7,10 +7,10 @@ import { toast } from 'vue-sonner' import type { AgentApp } from '@/pages/admin/agent-apps/data/schema' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' const route = useRoute() const router = useRouter() -const API_BASE = 'http://localhost:8080/api/v1' const loading = ref(true) const saving = ref(false) diff --git a/frontend/src/pages/admin/agent-apps/[id]/recharge.vue b/frontend/src/pages/admin/agent-apps/[id]/recharge.vue index 7dc9535..6ec6912 100644 --- a/frontend/src/pages/admin/agent-apps/[id]/recharge.vue +++ b/frontend/src/pages/admin/agent-apps/[id]/recharge.vue @@ -5,10 +5,10 @@ import { useRoute, useRouter } from 'vue-router' import { toast } from 'vue-sonner' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' const route = useRoute() const router = useRouter() -const API_BASE = 'http://localhost:8080/api/v1' const loading = ref(true) const saving = ref(false) diff --git a/frontend/src/pages/admin/agent-apps/invite.vue b/frontend/src/pages/admin/agent-apps/invite.vue index 58eceb2..5a6a492 100644 --- a/frontend/src/pages/admin/agent-apps/invite.vue +++ b/frontend/src/pages/admin/agent-apps/invite.vue @@ -5,9 +5,9 @@ import { useRouter } from 'vue-router' import { toast } from 'vue-sonner' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' const router = useRouter() -const API_BASE = 'http://localhost:8080/api/v1' const saving = ref(false) const applications = ref>([]) diff --git a/frontend/src/pages/admin/agent-apps/request.vue b/frontend/src/pages/admin/agent-apps/request.vue index c9d3c56..90b67a8 100644 --- a/frontend/src/pages/admin/agent-apps/request.vue +++ b/frontend/src/pages/admin/agent-apps/request.vue @@ -5,9 +5,9 @@ import { useRouter } from 'vue-router' import { toast } from 'vue-sonner' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' const router = useRouter() -const API_BASE = 'http://localhost:8080/api/v1' const saving = ref(false) const applications = ref>([]) diff --git a/frontend/src/pages/admin/applications/[id]/security.vue b/frontend/src/pages/admin/applications/[id]/security.vue index eebcd8a..a4367b1 100644 --- a/frontend/src/pages/admin/applications/[id]/security.vue +++ b/frontend/src/pages/admin/applications/[id]/security.vue @@ -5,11 +5,10 @@ import { useRoute } from 'vue-router' import { toast } from 'vue-sonner' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' const route = useRoute() -const API_BASE = 'http://localhost:8080/api/v1' - const loading = ref(false) const saving = ref(false) diff --git a/frontend/src/pages/admin/applications/[id]/settings.vue b/frontend/src/pages/admin/applications/[id]/settings.vue index f09eee7..8833d05 100644 --- a/frontend/src/pages/admin/applications/[id]/settings.vue +++ b/frontend/src/pages/admin/applications/[id]/settings.vue @@ -5,11 +5,10 @@ import { useRoute } from 'vue-router' import { toast } from 'vue-sonner' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' const route = useRoute() -const API_BASE = 'http://localhost:8080/api/v1' - const loading = ref(false) const saving = ref(false) diff --git a/frontend/src/pages/admin/applications/components/app-card.vue b/frontend/src/pages/admin/applications/components/app-card.vue index 41960ad..cbfb979 100644 --- a/frontend/src/pages/admin/applications/components/app-card.vue +++ b/frontend/src/pages/admin/applications/components/app-card.vue @@ -4,6 +4,8 @@ import { useRouter } from 'vue-router' import type { App } from '../data/schema' +import { getFileUrl } from '@/utils/config' + const props = defineProps<{ app: App }>() @@ -25,7 +27,7 @@ function formatDate(date: string | Date) {
- +
diff --git a/frontend/src/pages/admin/applications/components/columns.ts b/frontend/src/pages/admin/applications/components/columns.ts index a0c0f46..60c1cfa 100644 --- a/frontend/src/pages/admin/applications/components/columns.ts +++ b/frontend/src/pages/admin/applications/components/columns.ts @@ -22,6 +22,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' +import { getFileUrl } from '@/utils/config' export function getColumns(actions: { onGoToSettings: (app: App) => void @@ -55,7 +56,7 @@ export function getColumns(actions: { h('div', { class: 'h-8 w-8 rounded bg-primary/10 flex items-center justify-center flex-shrink-0 overflow-hidden' }, [ row.original.icon_url ? h('img', { - src: `http://localhost:8080${row.original.icon_url}`, + src: getFileUrl(row.original.icon_url), alt: row.getValue('name') as string, class: 'w-full h-full object-cover', }) diff --git a/frontend/src/pages/admin/applications/create.vue b/frontend/src/pages/admin/applications/create.vue index 681e5e0..33c9327 100644 --- a/frontend/src/pages/admin/applications/create.vue +++ b/frontend/src/pages/admin/applications/create.vue @@ -5,10 +5,9 @@ import { useRouter } from 'vue-router' import { toast } from 'vue-sonner' import { BasicPage } from '@/components/global-layout' +import { API_BASE } from '@/utils/config' const router = useRouter() - -const API_BASE = 'http://localhost:8080/api/v1' const loading = ref(false) const showSuccessDialog = ref(false) const createdAppId = ref(null) diff --git a/frontend/src/pages/admin/card-types/index.vue b/frontend/src/pages/admin/card-types/index.vue index 1312450..6937e09 100644 --- a/frontend/src/pages/admin/card-types/index.vue +++ b/frontend/src/pages/admin/card-types/index.vue @@ -11,11 +11,11 @@ import ConfirmDialog from '@/components/confirm-dialog.vue' import SingleFilter from '@/components/data-table/single-filter.vue' import { BasicPage } from '@/components/global-layout' import DataTable from '@/pages/admin/card-types/components/data-table.vue' +import { API_BASE } from '@/utils/config' const { t } = useI18n() const router = useRouter() -const API_BASE = 'http://localhost:8080/api/v1' interface Application { id: string diff --git a/frontend/src/pages/admin/dynamic-code.vue b/frontend/src/pages/admin/dynamic-code.vue index ab70b0c..71b4e9a 100644 --- a/frontend/src/pages/admin/dynamic-code.vue +++ b/frontend/src/pages/admin/dynamic-code.vue @@ -2,7 +2,7 @@ import { Code, Eye, Loader2 } from 'lucide-vue-next' import { onMounted, ref } from 'vue' -const API_BASE = 'http://localhost:8080/api/v1' +import { API_BASE } from '@/utils/config' interface DynamicCode { id: string diff --git a/frontend/src/utils/config.ts b/frontend/src/utils/config.ts new file mode 100644 index 0000000..63e809c --- /dev/null +++ b/frontend/src/utils/config.ts @@ -0,0 +1,8 @@ +export const API_BASE = import.meta.env.VITE_API_BASE_URL || '/api/v1' + +export function getFileUrl(path: string): string { + if (!path) return '' + if (path.startsWith('http')) return path + const base = import.meta.env.VITE_API_BASE || '' + return `${base}${path}` +} diff --git a/frontend/src/utils/env.ts b/frontend/src/utils/env.ts index d7fa747..b85a793 100644 --- a/frontend/src/utils/env.ts +++ b/frontend/src/utils/env.ts @@ -10,7 +10,7 @@ import { z } from 'zod' const EnvSchema = z.object({ VITE_SERVER_API_URL: z.string().default(''), - VITE_SERVER_API_PREFIX: z.string().default('/api'), + VITE_SERVER_API_PREFIX: z.string().default('/api/v1'), VITE_SERVER_API_TIMEOUT: z.coerce.number().default(5000), })