From 527046339a0d27b7f9fc9be7bdc282e54e346224 Mon Sep 17 00:00:00 2001 From: Julian Freeman Date: Wed, 11 Mar 2026 13:51:10 -0400 Subject: [PATCH] optimize --- sidepanel.html | 9 --------- sidepanel.js | 28 +++++++++++----------------- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/sidepanel.html b/sidepanel.html index 8af39fd..60c9ba9 100644 --- a/sidepanel.html +++ b/sidepanel.html @@ -66,15 +66,6 @@ - -
-

自定义指令

-
- - -
-
-
diff --git a/sidepanel.js b/sidepanel.js index 026d2d6..03eb423 100644 --- a/sidepanel.js +++ b/sidepanel.js @@ -3,8 +3,6 @@ const apiKeyInput = document.getElementById('apiKey'); const scriptUrlInput = document.getElementById('scriptUrl'); const modelInput = document.getElementById('modelInput'); const saveConfigBtn = document.getElementById('saveConfig'); -const customInput = document.getElementById('customInput'); -const sendCustomBtn = document.getElementById('sendCustom'); const statusBadge = document.getElementById('statusBadge'); const resultsArea = document.getElementById('results'); @@ -70,11 +68,19 @@ saveConfigBtn.addEventListener('click', () => { addPresetBtn.addEventListener('click', async () => { const name = newPresetName.value.trim(); const sheetName = newPresetSheet.value.trim(); - const fields = newPresetFields.value.trim(); - if (!name || !fields) return alert('请输入名称和字段'); + const rawFields = newPresetFields.value.trim(); + + if (!name || !rawFields) return alert('请输入名称和字段'); + + // 核心逻辑:支持中英文逗号,并清理多余空格 + const normalizedFields = rawFields + .split(/[,,]/) // 使用正则匹配中英文逗号 + .map(f => f.trim()) // 清理每一项前后的空格 + .filter(f => f !== "") // 过滤掉空项 + .join(', '); // 统一用英文逗号+空格连接 const { userPresets = DEFAULT_PRESETS } = await chrome.storage.local.get('userPresets'); - const newPreset = { id: Date.now().toString(), name, sheetName, fields }; + const newPreset = { id: Date.now().toString(), name, sheetName, fields: normalizedFields }; currentPresets = [...userPresets, newPreset]; await chrome.storage.local.set({ userPresets: currentPresets }); @@ -133,8 +139,6 @@ runPresetBtn.addEventListener('click', () => { if (preset) handleExtraction('preset', preset); }); -sendCustomBtn.addEventListener('click', () => handleExtraction('custom', { fields: customInput.value, sheetName: '' })); - async function handleExtraction(type, presetObj) { const { geminiApiKey, googleScriptUrl, geminiModel } = await chrome.storage.local.get(['geminiApiKey', 'googleScriptUrl', 'geminiModel']); @@ -172,7 +176,6 @@ Title: ${pageData.title}`; const geminiResult = await callGemini(geminiApiKey, selectedModel, systemPrompt, pageData.text, userPrompt); let cleanedJson = parseGeminiJson(geminiResult); - // 核心修复:处理 AI 返回数组的情况 if (Array.isArray(cleanedJson)) { cleanedJson = cleanedJson[0] || {}; } @@ -181,28 +184,19 @@ Title: ${pageData.title}`; if (googleScriptUrl) { updateStatus('保存至表格...', 'bg-purple-500 text-white'); - - // 1. 获取用户预设的业务表头 const businessHeaders = presetObj.fields.split(',').map(f => f.trim()).filter(f => f !== ""); - - // 2. 定义元数据表头(可选,方便您追踪来源) const metaHeaders = ["来源链接", "提取时间"]; - - // 3. 合并总表头顺序 const allHeaders = [...businessHeaders, ...metaHeaders]; - // 4. 构建发送给后端的最终数据 const payload = { sheetName: presetObj.sheetName || '', headers: allHeaders }; - // 将提取的数据填入 payload businessHeaders.forEach(h => { payload[h] = cleanedJson[h] || "N/A"; }); - // 填入元数据 payload["来源链接"] = pageData.url; payload["提取时间"] = new Date().toLocaleString();