optimize
This commit is contained in:
28
sidepanel.js
28
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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user