fix: SearXNG API 地址改为必填,保存时校验格式

This commit is contained in:
thzxx
2026-06-12 12:48:05 +08:00
parent 2bdcb2735f
commit f16d0238f7
3 changed files with 19 additions and 4 deletions
+4 -1
View File
@@ -446,7 +446,10 @@ async function handleWebSearchSearxng(
timeRange: string, timeRange: string,
_enhanceSnippets: boolean _enhanceSnippets: boolean
): Promise<ToolResult> { ): Promise<ToolResult> {
const url = getSetting<string>('searxng_url', 'https://search.metona.cn'); const url = getSetting<string>('searxng_url', '');
if (!url) {
return { success: false, error: 'SearXNG API 地址未配置。请在 SearXNG 设置中填写 API 地址。' };
}
const engines = getSetting<string>('searxng_engines', 'google,bing,duckduckgo,wikipedia'); const engines = getSetting<string>('searxng_engines', 'google,bing,duckduckgo,wikipedia');
const language = getSetting<string>('searxng_language', 'zh-CN'); const language = getSetting<string>('searxng_language', 'zh-CN');
const safesearch = getSetting<number>('searxng_safesearch', 1); const safesearch = getSetting<number>('searxng_safesearch', 1);
+14 -2
View File
@@ -10,7 +10,7 @@ import { logInfo, logSuccess } from '../services/log-service.js';
/** 默认 SearXNG 配置 */ /** 默认 SearXNG 配置 */
const DEFAULTS = { const DEFAULTS = {
enabled: false, enabled: false,
url: 'https://search.metona.cn', url: '',
engines: 'google,bing,duckduckgo,wikipedia', engines: 'google,bing,duckduckgo,wikipedia',
language: 'zh-CN', language: 'zh-CN',
safesearch: 1, safesearch: 1,
@@ -113,7 +113,19 @@ export function initSearxngModal(): void {
// ── 保存按钮 ── // ── 保存按钮 ──
document.querySelector('#btnSaveSearxng')!.addEventListener('click', async () => { document.querySelector('#btnSaveSearxng')!.addEventListener('click', async () => {
searxngConfig.url = (document.querySelector('#searxngUrl') as HTMLInputElement).value.trim(); const url = (document.querySelector('#searxngUrl') as HTMLInputElement).value.trim();
if (!url) {
const { showToast } = await import('./toast.js');
showToast('SearXNG API 地址不能为空', 'error');
return;
}
if (!/^https?:\/\/.+/.test(url)) {
const { showToast } = await import('./toast.js');
showToast('SearXNG API 地址格式不正确,需以 http:// 或 https:// 开头', 'error');
return;
}
searxngConfig.url = url;
searxngConfig.engines = (document.querySelector('#searxngEngines') as HTMLInputElement).value.trim(); searxngConfig.engines = (document.querySelector('#searxngEngines') as HTMLInputElement).value.trim();
searxngConfig.language = (document.querySelector('#searxngLanguage') as HTMLSelectElement).value; searxngConfig.language = (document.querySelector('#searxngLanguage') as HTMLSelectElement).value;
searxngConfig.safesearch = parseInt((document.querySelector('#searxngSafeSearch') as HTMLSelectElement).value); searxngConfig.safesearch = parseInt((document.querySelector('#searxngSafeSearch') as HTMLSelectElement).value);
+1 -1
View File
@@ -732,7 +732,7 @@
<div class="setting-group"> <div class="setting-group">
<label class="setting-label">SearXNG API 地址</label> <label class="setting-label">SearXNG API 地址</label>
<input class="setting-input" id="searxngUrl" type="url" placeholder="https://search.metona.cn" style="margin-bottom:6px;"> <input class="setting-input" id="searxngUrl" type="url" placeholder="https://search.metona.cn" required style="margin-bottom:6px;">
<p class="text-muted" style="font-size:11px;">SearXNG 实例的根地址,无需带 /search 路径</p> <p class="text-muted" style="font-size:11px;">SearXNG 实例的根地址,无需带 /search 路径</p>
</div> </div>