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();