diff --git a/packages/core/client/src/application/Application.tsx b/packages/core/client/src/application/Application.tsx index 471ec52164..27cf7d959e 100644 --- a/packages/core/client/src/application/Application.tsx +++ b/packages/core/client/src/application/Application.tsx @@ -167,6 +167,15 @@ export class Application { return this.options.publicPath || '/'; } + getApiUrl(pathname = '') { + let baseURL = this.apiClient.axios['defaults']['baseURL']; + if (!baseURL.startsWith('http://') || !baseURL.startsWith('https://')) { + const { protocol, host } = window.location; + baseURL = `${protocol}//${host}/`; + } + return baseURL + pathname; + } + getRouteUrl(pathname: string) { return this.options.publicPath.replace(/\/$/g, '') + pathname; } diff --git a/packages/core/client/src/application/WebSocketClient.ts b/packages/core/client/src/application/WebSocketClient.ts index cdadcd6fd3..448dab29d6 100644 --- a/packages/core/client/src/application/WebSocketClient.ts +++ b/packages/core/client/src/application/WebSocketClient.ts @@ -41,8 +41,7 @@ export class WebSocketClient { if (!this.app) { return; } - const options = this.app.getOptions(); - const apiBaseURL = options?.apiClient?.['baseURL']; + const apiBaseURL = this.app.getApiUrl(); if (!apiBaseURL) { return; } diff --git a/packages/plugins/@nocobase/plugin-iframe-block/src/client/Iframe.tsx b/packages/plugins/@nocobase/plugin-iframe-block/src/client/Iframe.tsx index 36bcb257d7..955a13bb83 100644 --- a/packages/plugins/@nocobase/plugin-iframe-block/src/client/Iframe.tsx +++ b/packages/plugins/@nocobase/plugin-iframe-block/src/client/Iframe.tsx @@ -26,9 +26,7 @@ export const Iframe: any = observer( const src = React.useMemo(() => { if (mode === 'html') { - const options = app.getOptions(); - const apiBaseURL: string = options?.apiClient?.['baseURL']; - return `${apiBaseURL}iframeHtml:getHtml/${htmlId}?token=${api.auth.getToken()}&v=${field.data?.v || ''}`; + return app.getApiUrl(`iframeHtml:getHtml/${htmlId}?token=${api.auth.getToken()}&v=${field.data?.v || ''}`); } return url; }, [app, url, mode, htmlId, field.data?.v]); diff --git a/packages/plugins/@nocobase/plugin-oidc/src/client/Options.tsx b/packages/plugins/@nocobase/plugin-oidc/src/client/Options.tsx index 9dc2325d25..ca886f0fce 100644 --- a/packages/plugins/@nocobase/plugin-oidc/src/client/Options.tsx +++ b/packages/plugins/@nocobase/plugin-oidc/src/client/Options.tsx @@ -330,12 +330,7 @@ const Usage = observer( const app = useApp(); const url = useMemo(() => { - const options = app.getOptions(); - const apiBaseURL: string = options?.apiClient?.['baseURL']; - const { protocol, host } = window.location; - return apiBaseURL.startsWith('http') - ? `${apiBaseURL}oidc:redirect` - : `${protocol}//${host}${apiBaseURL}oidc:redirect`; + return app.getApiUrl('oidc:redirect'); }, [app]); const copy = (text: string) => { diff --git a/packages/plugins/@nocobase/plugin-saml/src/client/Options.tsx b/packages/plugins/@nocobase/plugin-saml/src/client/Options.tsx index 061a69daf2..62a75786fa 100644 --- a/packages/plugins/@nocobase/plugin-saml/src/client/Options.tsx +++ b/packages/plugins/@nocobase/plugin-saml/src/client/Options.tsx @@ -77,14 +77,8 @@ const Usage = observer( const name = form.values.name ?? record.name; const url = useMemo(() => { - const options = app.getOptions(); - const apiBaseURL: string = options?.apiClient?.['baseURL']; - const { protocol, host } = window.location; const appName = getSubAppName(app.getPublicPath()) || 'main'; - - return apiBaseURL.startsWith('http') - ? `${apiBaseURL}saml:redirect?authenticator=${name}&__appName=${appName}` - : `${protocol}//${host}${apiBaseURL}saml:redirect?authenticator=${name}&__appName=${appName}`; + return app.getApiUrl(`saml:redirect?authenticator=${name}&__appName=${appName}`); }, [app, name]); const copy = (text: string) => {