From 30284849495d215c03c1f36c9b33fd3e34a5d7b0 Mon Sep 17 00:00:00 2001 From: MT-Mint <798521692@qq.com> Date: Mon, 23 Mar 2026 12:00:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=94=9F=E4=BA=A7=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84=E7=94=B1?= =?UTF-8?q?nginx=E4=BB=A3=E7=90=86=E5=88=B0=E5=90=8E=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/api/api.js | 12 +++++------- js/chatbot/core/api-config-builder.js | 2 +- js/chatbot/core/llm-caller.js | 2 +- js/chatbot/core/message-sender.js | 4 ++-- js/history/history_detail_scripts.js | 2 +- js/process/main.js | 2 +- js/process/mineru-structured-translation.js | 4 ++-- js/process/ocr-adapters/mistral-adapter.js | 4 ++-- js/process/ocr-manager.js | 4 ++-- js/process/translation.js | 2 +- js/ui/ocr-settings.js | 12 ++++++++---- js/ui/ui_model_ocr_config.js | 6 ++++-- views/history/history_detail.html | 17 +++++++++++------ 13 files changed, 41 insertions(+), 32 deletions(-) diff --git a/js/api/api.js b/js/api/api.js index c41d4f7..1ec2b40 100644 --- a/js/api/api.js +++ b/js/api/api.js @@ -66,7 +66,7 @@ async function uploadToMistral(fileToProcess, mistralKey) { // 使用统一配置获取代理地址 const proxyUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getMistralUrl('/v1/files') - : 'http://localhost:3456/api/mistral/v1/files'; + : (window.PBX_PROXY_BASE_URL || '/api') + '/mistral/v1/files'; const response = await fetch(proxyUrl, { method: 'POST', @@ -99,9 +99,7 @@ async function uploadFileToOssViaProxy(fileToProcess, fileName) { // 使用统一配置获取代理地址 const proxyUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getOssUploadUrl() - : (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1' - ? 'http://localhost:3456/api/upload/oss' - : '/api/upload/oss'); + : (window.PBX_PROXY_BASE_URL || '/api') + '/upload/oss'; const response = await fetch(proxyUrl, { method: 'POST', @@ -133,7 +131,7 @@ async function getMistralSignedUrl(fileId, mistralKey) { // 使用统一配置获取代理地址 const proxyUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getMistralUrl(`/v1/files/${fileId}/url?expiry=24`) - : `http://localhost:3456/api/mistral/v1/files/${fileId}/url?expiry=24`; + : (window.PBX_PROXY_BASE_URL || '/api') + `/mistral/v1/files/${fileId}/url?expiry=24`; const response = await fetch(proxyUrl, { method: 'GET', @@ -162,7 +160,7 @@ async function callMistralOcr(signedUrl, mistralKey) { // 使用统一配置获取代理地址 const proxyUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getMistralUrl('/v1/ocr') - : 'http://localhost:3456/api/mistral/v1/ocr'; + : (window.PBX_PROXY_BASE_URL || '/api') + '/mistral/v1/ocr'; const response = await fetch(proxyUrl, { method: 'POST', @@ -202,7 +200,7 @@ async function deleteMistralFile(fileId, apiKey) { // 使用统一配置获取代理地址 const deleteUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getMistralUrl(`/v1/files/${fileId}`) - : `http://localhost:3456/api/mistral/v1/files/${fileId}`; + : (window.PBX_PROXY_BASE_URL || '/api') + `/mistral/v1/files/${fileId}`; try { const response = await fetch(deleteUrl, { diff --git a/js/chatbot/core/api-config-builder.js b/js/chatbot/core/api-config-builder.js index 018e1dc..a531f29 100644 --- a/js/chatbot/core/api-config-builder.js +++ b/js/chatbot/core/api-config-builder.js @@ -162,7 +162,7 @@ const proxyBaseUrl = options.proxyBaseUrl || (typeof window !== 'undefined' && window.ProxyConfig ? window.ProxyConfig.getProxyUrl() : null) || (typeof window !== 'undefined' && window.PBX_PROXY_BASE_URL ? window.PBX_PROXY_BASE_URL : null) || - 'http://localhost:3456'; + '/api'; const provider = options.provider || 'openai'; // 获取当前选择的模型ID(如果有模型检测模块) diff --git a/js/chatbot/core/llm-caller.js b/js/chatbot/core/llm-caller.js index e0a75b4..690ec0a 100644 --- a/js/chatbot/core/llm-caller.js +++ b/js/chatbot/core/llm-caller.js @@ -140,7 +140,7 @@ const useProxy = globalProxyMode === 'proxy'; const proxyBaseUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : (window.PBX_PROXY_BASE_URL || 'http://localhost:3456'); + : (window.PBX_PROXY_BASE_URL || '/api'); // 确定提供商(从模型 ID 或配置推断) let provider = 'openai'; diff --git a/js/chatbot/core/message-sender.js b/js/chatbot/core/message-sender.js index 2fefbbf..2ebaecd 100644 --- a/js/chatbot/core/message-sender.js +++ b/js/chatbot/core/message-sender.js @@ -447,7 +447,7 @@ async function sendChatbotMessage(userInput, updateChatbotUI, externalConfig = n const useProxy = globalProxyMode === 'proxy'; const proxyBaseUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : (window.PBX_PROXY_BASE_URL || 'http://localhost:3456'); + : (window.PBX_PROXY_BASE_URL || '/api'); // 在使用代理服务器模式时,API Key 在后端配置,前端可以没有 API Key // 否则,检查前端是否配置了有效的 API Key @@ -1740,7 +1740,7 @@ async function singleChunkSummary(sysPrompt, userInput, config, apiKey) { const useProxy = globalProxyMode === 'proxy'; const proxyBaseUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : (window.PBX_PROXY_BASE_URL || 'http://localhost:3456'); + : (window.PBX_PROXY_BASE_URL || '/api'); // 只做单轮整理,不带历史 let apiConfig; diff --git a/js/history/history_detail_scripts.js b/js/history/history_detail_scripts.js index 220bd77..76aea71 100644 --- a/js/history/history_detail_scripts.js +++ b/js/history/history_detail_scripts.js @@ -808,7 +808,7 @@ async function executeMinerUStructuredTranslation() { // 使用统一配置获取代理地址 const PROXY_BASE = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : (window.PBX_PROXY_BASE_URL || 'http://localhost:3456'); + : (window.PBX_PROXY_BASE_URL || '/api'); // 获取翻译配置 const settings = typeof loadSettings === 'function' ? loadSettings() : {}; diff --git a/js/process/main.js b/js/process/main.js index b22f945..0a51581 100644 --- a/js/process/main.js +++ b/js/process/main.js @@ -800,7 +800,7 @@ const fileType = fileToProcess.name.split('.').pop().toLowerCase(); provider: selectedTranslationModelName, proxyBase: (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : (window.PBX_PROXY_BASE_URL || 'http://localhost:3456'), + : (window.PBX_PROXY_BASE_URL || '/api'), // 允许从设置自定义重试,若无则用默认 maxRetries: (typeof loadSettings === 'function' ? (loadSettings().structuredMaxRetries || undefined) : undefined), retryDelay: (typeof loadSettings === 'function' ? (loadSettings().structuredRetryDelayMs || undefined) : undefined) diff --git a/js/process/mineru-structured-translation.js b/js/process/mineru-structured-translation.js index 73ba5f2..c0536f2 100644 --- a/js/process/mineru-structured-translation.js +++ b/js/process/mineru-structured-translation.js @@ -717,7 +717,7 @@ ${jsonContent} const proxyBase = options.proxyBase || (typeof window !== 'undefined' && window.ProxyConfig ? window.ProxyConfig.getProxyUrl() : null) || (typeof window !== 'undefined' && window.PBX_PROXY_BASE_URL ? window.PBX_PROXY_BASE_URL : null) || - 'http://localhost:3456'; + '/api'; const provider = options.provider || 'aliyun'; // 后端代理端点映射 @@ -836,7 +836,7 @@ ${jsonContent} // 前端发出的请求源头 const proxyUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : (window.PBX_PROXY_BASE_URL || 'http://localhost:3456'); + : (window.PBX_PROXY_BASE_URL || '/api'); const predefinedConfigs = { 'proxy': { endpoint: `${proxyUrl}/api/llm/aliyun/v1/chat/completions`, diff --git a/js/process/ocr-adapters/mistral-adapter.js b/js/process/ocr-adapters/mistral-adapter.js index 8e4f711..8c40193 100644 --- a/js/process/ocr-adapters/mistral-adapter.js +++ b/js/process/ocr-adapters/mistral-adapter.js @@ -12,13 +12,13 @@ class MistralOcrAdapter extends OcrAdapter { this.currentKeyIndex = 0; // 使用统一配置获取代理地址 - // 优先级:config.baseUrl > window.ProxyConfig > 默认值 + // 优先级:config.baseUrl > window.ProxyConfig > PBX_PROXY_BASE_URL > 默认相对路径 if (config.baseUrl && config.baseUrl !== 'https://api.mistral.ai') { this.baseUrl = config.baseUrl.replace(/\/+$/, ''); } else if (typeof window !== 'undefined' && window.ProxyConfig) { this.baseUrl = window.ProxyConfig.getMistralUrl(); } else { - this.baseUrl = 'http://localhost:3456/api/mistral'; + this.baseUrl = (window.PBX_PROXY_BASE_URL || '/api') + '/mistral'; } } diff --git a/js/process/ocr-manager.js b/js/process/ocr-manager.js index a55453b..b7de13f 100644 --- a/js/process/ocr-manager.js +++ b/js/process/ocr-manager.js @@ -97,7 +97,7 @@ class OcrManager { // 使用统一配置获取默认 workerUrl const mineruDefaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : 'http://localhost:3456'; + : (window.PBX_PROXY_BASE_URL || '/api'); return { engine: 'mineru', token: localStorage.getItem('ocrMinerUToken') || '', @@ -113,7 +113,7 @@ class OcrManager { // 使用统一配置获取默认 workerUrl const doc2xDefaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() - : 'http://localhost:3456'; + : (window.PBX_PROXY_BASE_URL || '/api'); return { engine: 'doc2x', token: localStorage.getItem('ocrDoc2XToken') || '', diff --git a/js/process/translation.js b/js/process/translation.js index af517ec..d767b4b 100644 --- a/js/process/translation.js +++ b/js/process/translation.js @@ -705,7 +705,7 @@ async function translateMarkdown( // 所有翻译请求都指向后端代理,由后端决定使用哪个模型 endpoint: (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getLLMProxyUrl('tongyi', '/v1/chat/completions') - : ((window.PBX_PROXY_BASE_URL || 'http://localhost:3456') + '/api/llm/tongyi/v1/chat/completions'), + : ((window.PBX_PROXY_BASE_URL || '/api') + '/llm/tongyi/v1/chat/completions'), modelName: '通义百炼', headers: { 'Content-Type': 'application/json' }, bodyBuilder: (sys, user) => { diff --git a/js/ui/ocr-settings.js b/js/ui/ocr-settings.js index 13de7e2..d5a1e2a 100644 --- a/js/ui/ocr-settings.js +++ b/js/ui/ocr-settings.js @@ -125,7 +125,8 @@ class OcrSettingsManager { this.elements.mineruToken.value = localStorage.getItem(this.keys.mineruToken) || ''; } if (this.elements.mineruWorkerUrl) { - this.elements.mineruWorkerUrl.value = localStorage.getItem(this.keys.mineruWorkerUrl) || 'http://localhost:3456'; + const defaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() : '/api'; + this.elements.mineruWorkerUrl.value = localStorage.getItem(this.keys.mineruWorkerUrl) || defaultUrl; } if (this.elements.mineruEnableOcr) { this.elements.mineruEnableOcr.checked = localStorage.getItem(this.keys.mineruEnableOcr) !== 'false'; @@ -151,7 +152,8 @@ class OcrSettingsManager { this.elements.doc2xToken.value = localStorage.getItem(this.keys.doc2xToken) || ''; } if (this.elements.doc2xWorkerUrl) { - this.elements.doc2xWorkerUrl.value = localStorage.getItem(this.keys.doc2xWorkerUrl) || 'http://localhost:3456'; + const defaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() : '/api'; + this.elements.doc2xWorkerUrl.value = localStorage.getItem(this.keys.doc2xWorkerUrl) || defaultUrl; } if (this.elements.doc2xFormulaMode) { this.elements.doc2xFormulaMode.value = localStorage.getItem(this.keys.doc2xFormulaMode) || 'dollar'; @@ -514,10 +516,11 @@ class OcrSettingsManager { } case 'mineru': + const mineruDefaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() : '/api'; return { engine: 'mineru', token: localStorage.getItem(this.keys.mineruToken) || '', - workerUrl: (localStorage.getItem(this.keys.mineruWorkerUrl) || 'http://localhost:3456').replace(/\/+$/, ''), // 去掉末尾斜杠 + workerUrl: (localStorage.getItem(this.keys.mineruWorkerUrl) || mineruDefaultUrl).replace(/\/+$/, ''), // 去掉末尾斜杠 authKey: localStorage.getItem(this.keys.workerAuthKey) || '', tokenMode: localStorage.getItem(this.keys.mineruTokenMode) || 'backend', // 默认后端转发模式 enableOcr: localStorage.getItem(this.keys.mineruEnableOcr) !== 'false', @@ -527,10 +530,11 @@ class OcrSettingsManager { }; case 'doc2x': + const doc2xDefaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() : '/api'; return { engine: 'doc2x', token: localStorage.getItem(this.keys.doc2xToken) || '', - workerUrl: (localStorage.getItem(this.keys.doc2xWorkerUrl) || 'http://localhost:3456').replace(/\/+$/, ''), // 去掉末尾斜杠 + workerUrl: (localStorage.getItem(this.keys.doc2xWorkerUrl) || doc2xDefaultUrl).replace(/\/+$/, ''), // 去掉末尾斜杠 authKey: localStorage.getItem(this.keys.workerAuthKey) || '', tokenMode: localStorage.getItem(this.keys.doc2xTokenMode) || 'backend', // 默认后端转发模式 formulaMode: localStorage.getItem(this.keys.doc2xFormulaMode) || 'dollar', diff --git a/js/ui/ui_model_ocr_config.js b/js/ui/ui_model_ocr_config.js index a9175b7..ee34cba 100644 --- a/js/ui/ui_model_ocr_config.js +++ b/js/ui/ui_model_ocr_config.js @@ -60,7 +60,8 @@ */ function renderMinerUConfig(container) { // 从 localStorage 加载配置 - const workerUrl = localStorage.getItem('ocrMinerUWorkerUrl') || 'http://localhost:3456'; + const defaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() : '/api'; + const workerUrl = localStorage.getItem('ocrMinerUWorkerUrl') || defaultUrl; const authKey = localStorage.getItem('ocrWorkerAuthKey') || ''; const tokenMode = localStorage.getItem('ocrMinerUTokenMode') || 'backend'; const token = localStorage.getItem('ocrMinerUToken') || ''; @@ -336,7 +337,8 @@ */ function renderDoc2XConfig(container) { // 从 localStorage 加载配置 - const workerUrl = localStorage.getItem('ocrDoc2XWorkerUrl') || 'http://localhost:3456'; + const defaultUrl = (typeof window !== 'undefined' && window.ProxyConfig) ? window.ProxyConfig.getProxyUrl() : '/api'; + const workerUrl = localStorage.getItem('ocrDoc2XWorkerUrl') || defaultUrl; const authKey = localStorage.getItem('ocrWorkerAuthKey') || ''; const tokenMode = localStorage.getItem('ocrDoc2XTokenMode') || 'backend'; const token = localStorage.getItem('ocrDoc2XToken') || ''; diff --git a/views/history/history_detail.html b/views/history/history_detail.html index d95096e..0ae78c6 100644 --- a/views/history/history_detail.html +++ b/views/history/history_detail.html @@ -864,10 +864,13 @@ + - +