This commit is contained in:
Julian Freeman
2026-03-11 13:51:10 -04:00
parent 2977d5b4bf
commit 527046339a
2 changed files with 11 additions and 26 deletions

View File

@@ -66,15 +66,6 @@
</div>
</section>
<!-- Chat / Custom Instructions -->
<section class="bg-white p-4 rounded-lg shadow-sm border border-gray-200 mb-4">
<h2 class="text-sm font-semibold mb-2">自定义指令</h2>
<div class="flex gap-2">
<input type="text" id="customInput" class="flex-1 border border-gray-300 rounded px-2 py-1 text-sm focus:ring-1 focus:ring-indigo-500 outline-none" placeholder="例如:查找电池容量...">
<button id="sendCustom" class="bg-indigo-100 text-indigo-700 px-3 py-1 rounded text-sm font-medium hover:bg-indigo-200 transition-colors">执行</button>
</div>
</section>
<!-- Logs / Status -->
<section class="bg-gray-100 rounded-lg p-3 text-xs">
<div class="flex items-center justify-between mb-2">

View File

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