From a606b5766abb0dd9de050addf39f0a76fdebd164 Mon Sep 17 00:00:00 2001 From: "guangfei.zhao" Date: Tue, 11 Nov 2025 11:27:56 +0800 Subject: [PATCH] feat: add base url utility and update api endpoints --- .env | 4 ++-- .env.production | 4 ++-- ragflow_web/.env | 3 ++- ragflow_web/.env.production | 3 ++- ragflow_web/package.json | 1 - ragflow_web/src/hooks/logic-hooks.ts | 5 ++-- ragflow_web/src/hooks/use-send-message.ts | 3 ++- .../src/pages/document-viewer/image/index.tsx | 3 ++- ragflow_web/src/pages/search/hooks.ts | 3 ++- ragflow_web/src/utils/url.ts | 24 +++++++++++++++++++ src/hooks/agent-hooks.ts | 4 ++-- .../knowledge/configuration/common-items.tsx | 2 +- 12 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 ragflow_web/src/utils/url.ts diff --git a/.env b/.env index 443945c..a4f4a3b 100644 --- a/.env +++ b/.env @@ -1,6 +1,6 @@ # VITE_API_BASE_URL -# VITE_API_BASE_URL = http://154.9.253.114:9380 -VITE_API_BASE_URL = http://150.158.121.95 +VITE_API_BASE_URL = http://154.9.253.114:9380 +# VITE_API_BASE_URL = http://150.158.121.95 # VITE_FLASK_API_BASE_URL VITE_FLASK_API_BASE_URL = http://150.158.121.95 diff --git a/.env.production b/.env.production index 633c27f..4fa458c 100644 --- a/.env.production +++ b/.env.production @@ -1,7 +1,7 @@ # 生产环境 FastAPI 后台服务配置 -VITE_API_BASE_URL = http://150.158.121.95 +# VITE_API_BASE_URL = http://150.158.121.95 # FastAPI 后台服务配置 154 内存不够,使用 150 作为后台 -# VITE_API_BASE_URL = http://154.9.253.114:9380 +VITE_API_BASE_URL = http://154.9.253.114:9380 VITE_RSA_PUBLIC_KEY="-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArq9XTUSeYr2+N1h3Afl/z8Dse/2yD0ZGrKwx+EEEcdsBLca9Ynmx3nIB5obmLlSfmskLpBo0UACBmB5rEjBp2Q2f3AG3Hjd4B+gNCG6BDaawuDlgANIhGnaTLrIqWrrcm4EMzJOnAOI1fgzJRsOOUEfaS318Eq9OVO3apEyCCt0lOQK6PuksduOjVxtltDav+guVAA068NrPYmRNabVKRNLJpL8w4D44sfth5RvZ3q9t+6RTArpEtc5sh5ChzvqPOzKGMXW83C95TxmXqpbK6olN4RevSfVjEAgCydH6HN6OhtOQEcnrU97r9H0iZOWwbw3pVrZiUkuRD1R56Wzs2wIDAQAB diff --git a/ragflow_web/.env b/ragflow_web/.env index 5642399..c1af80c 100644 --- a/ragflow_web/.env +++ b/ragflow_web/.env @@ -1,3 +1,4 @@ PORT=9222 RAGFLOW_BASE=/ragflow/ -UMI_APP_API_BASE_URL=http://150.158.121.95 \ No newline at end of file +# UMI_APP_API_BASE_URL=http://150.158.121.95 +UMI_APP_API_BASE_URL=http://154.9.253.114:9380 diff --git a/ragflow_web/.env.production b/ragflow_web/.env.production index 5642399..c1af80c 100644 --- a/ragflow_web/.env.production +++ b/ragflow_web/.env.production @@ -1,3 +1,4 @@ PORT=9222 RAGFLOW_BASE=/ragflow/ -UMI_APP_API_BASE_URL=http://150.158.121.95 \ No newline at end of file +# UMI_APP_API_BASE_URL=http://150.158.121.95 +UMI_APP_API_BASE_URL=http://154.9.253.114:9380 diff --git a/ragflow_web/package.json b/ragflow_web/package.json index 71a5b7d..99caad5 100644 --- a/ragflow_web/package.json +++ b/ragflow_web/package.json @@ -143,7 +143,6 @@ "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^18.0.11", "@types/react-syntax-highlighter": "^15.5.11", - "@types/testing-library__jest-dom": "^6.0.0", "@types/uuid": "^9.0.8", "@types/webpack-env": "^1.18.4", "@umijs/lint": "^4.1.1", diff --git a/ragflow_web/src/hooks/logic-hooks.ts b/ragflow_web/src/hooks/logic-hooks.ts index d7afe63..15802d7 100644 --- a/ragflow_web/src/hooks/logic-hooks.ts +++ b/ragflow_web/src/hooks/logic-hooks.ts @@ -6,6 +6,7 @@ import { IAnswer, Message } from '@/interfaces/database/chat'; import { IKnowledgeFile } from '@/interfaces/database/knowledge'; import { IClientConversation, IMessage } from '@/pages/chat/interface'; import api from '@/utils/api'; +import { withBaseUrl } from '@/utils/url'; import { getAuthorization } from '@/utils/authorization-util'; import { buildMessageUuid } from '@/utils/chat'; import { PaginationProps, message } from 'antd'; @@ -239,7 +240,7 @@ export const useSendMessageWithSse = ( initializeSseRef(); try { setDoneValue(body, false); - const response = await fetch(url, { + const response = await fetch(withBaseUrl(url), { method: 'POST', headers: { [Authorization]: getAuthorization(), @@ -319,7 +320,7 @@ export const useSendMessageWithSse = ( export const useSpeechWithSse = (url: string = api.tts) => { const read = useCallback( async (body: any) => { - const response = await fetch(url, { + const response = await fetch(withBaseUrl(url), { method: 'POST', headers: { [Authorization]: getAuthorization(), diff --git a/ragflow_web/src/hooks/use-send-message.ts b/ragflow_web/src/hooks/use-send-message.ts index 8d602f2..2faad1c 100644 --- a/ragflow_web/src/hooks/use-send-message.ts +++ b/ragflow_web/src/hooks/use-send-message.ts @@ -3,6 +3,7 @@ import { Authorization } from '@/constants/authorization'; import { IReferenceObject } from '@/interfaces/database/chat'; import { BeginQuery } from '@/pages/agent/interface'; import api from '@/utils/api'; +import { withBaseUrl } from '@/utils/url'; import { getAuthorization } from '@/utils/authorization-util'; import { EventSourceParserStream } from 'eventsource-parser/stream'; import { useCallback, useRef, useState } from 'react'; @@ -108,7 +109,7 @@ export const useSendMessageBySSE = (url: string = api.completeConversation) => { initializeSseRef(); try { setDone(false); - const response = await fetch(url, { + const response = await fetch(withBaseUrl(url), { method: 'POST', headers: { [Authorization]: getAuthorization(), diff --git a/ragflow_web/src/pages/document-viewer/image/index.tsx b/ragflow_web/src/pages/document-viewer/image/index.tsx index 2e574a7..da8709e 100644 --- a/ragflow_web/src/pages/document-viewer/image/index.tsx +++ b/ragflow_web/src/pages/document-viewer/image/index.tsx @@ -3,6 +3,7 @@ import { useEffect, useState } from 'react'; import { Authorization } from '@/constants/authorization'; import { getAuthorization } from '@/utils/authorization-util'; +import { withBaseUrl } from '@/utils/url'; interface ImageProps { src: string; @@ -15,7 +16,7 @@ const Image = ({ src, preview = false }: ImageProps) => { useEffect(() => { const loadImage = async () => { try { - const response = await fetch(src, { + const response = await fetch(withBaseUrl(src), { headers: { [Authorization]: getAuthorization(), }, diff --git a/ragflow_web/src/pages/search/hooks.ts b/ragflow_web/src/pages/search/hooks.ts index abfecd6..4cbcbe0 100644 --- a/ragflow_web/src/pages/search/hooks.ts +++ b/ragflow_web/src/pages/search/hooks.ts @@ -10,6 +10,7 @@ import { } from '@/hooks/logic-hooks'; import { IAnswer } from '@/interfaces/database/chat'; import api from '@/utils/api'; +import { withBaseUrl } from '@/utils/url'; import { get, isEmpty, isEqual, trim } from 'lodash'; import { ChangeEventHandler, @@ -156,7 +157,7 @@ export const useFetchBackgroundImage = () => { const fetchImage = useCallback(async () => { try { const res = await fetch( - '/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN', + withBaseUrl('/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN'), ); const ret = await res.json(); const url = get(ret, 'images.0.url'); diff --git a/ragflow_web/src/utils/url.ts b/ragflow_web/src/utils/url.ts new file mode 100644 index 0000000..cf30c27 --- /dev/null +++ b/ragflow_web/src/utils/url.ts @@ -0,0 +1,24 @@ +export const getBaseUrl = (): string => { + const url = process.env.UMI_APP_API_BASE_URL || ''; + return url.replace(/\/+$/, ''); +}; + +const isAbsoluteUrl = (u: string): boolean => { + if (!u) return false; + const lower = u.toLowerCase(); + return ( + lower.startsWith('http://') || + lower.startsWith('https://') || + lower.startsWith('data:') || + lower.startsWith('blob:') + ); +}; + +export const withBaseUrl = (input: string): string => { + if (!input) return input; + if (isAbsoluteUrl(input)) return input; + const base = getBaseUrl(); + if (!base) return input; + if (input.startsWith('/')) return `${base}${input}`; + return `${base}/${input}`; +}; \ No newline at end of file diff --git a/src/hooks/agent-hooks.ts b/src/hooks/agent-hooks.ts index 3173b5f..4247b16 100644 --- a/src/hooks/agent-hooks.ts +++ b/src/hooks/agent-hooks.ts @@ -47,9 +47,9 @@ export const useAgentList = (initialParams?: IAgentPaginationParams) => { const envMode = import.meta.env.MODE; let response: any = null; // if (envMode === 'flask') { - response = await agentService.teamlistCanvas(params); + // response = await agentService.teamlistCanvas(params); // } else { - // response = await agentService.listCanvas(params); + response = await agentService.listCanvas(params); // } const res = response.data || {}; logger.info('useAgentList fetchAgentList', res); diff --git a/src/pages/knowledge/configuration/common-items.tsx b/src/pages/knowledge/configuration/common-items.tsx index 7c3ff07..fa1eba4 100644 --- a/src/pages/knowledge/configuration/common-items.tsx +++ b/src/pages/knowledge/configuration/common-items.tsx @@ -351,7 +351,7 @@ export function PipelineSelectorItem() { try { const envMode = import.meta.env.MODE; // const service = envMode === 'flask' ? agentService.teamlistCanvas : agentService.listCanvas; - const service = agentService.teamlistCanvas; + const service = agentService.listCanvas; const res = await service({ canvas_category: AgentCategory.DataflowCanvas, page_size: 100 }); const data = res?.data?.data || {}; const list = data.canvas || [];