// scripts/settings.js function getMergedConfig(callback) { chrome.storage.local.get(["customConfig"], (res) => { const merged = JSON.parse(JSON.stringify(defaultConfig)); if (res.customConfig && typeof res.customConfig === "object") { merged.tokenExpireHours = res.customConfig.tokenExpireHours || merged.tokenExpireHours; for (const key in merged.apiConfig) { const override = res.customConfig.apiConfig?.[key]; if (override) { merged.apiConfig[key].url = override.url || merged.apiConfig[key].url; merged.apiConfig[key].requestParams.forEach((param, i) => { if (override.requestParams?.[i]?.field) param.field = override.requestParams[i].field; }); merged.apiConfig[key].responseParams.forEach((param, i) => { if (override.responseParams?.[i]?.field) param.field = override.responseParams[i].field; }); } } } callback(merged); }); } function renderConfig(config) { document.getElementById("tokenExpireHours").value = config.tokenExpireHours; const container = document.getElementById("endpointSection"); container.innerHTML = ""; for (const [key, endpoint] of Object.entries(config.apiConfig)) { const block = document.createElement("div"); block.className = "api-block"; block.innerHTML += `
【${endpoint.name}】
`; const urlRow = document.createElement("div"); urlRow.className = "form-row"; urlRow.innerHTML = ` `; block.appendChild(urlRow); const reqGroup = document.createElement("div"); reqGroup.className = "param-group"; reqGroup.innerHTML = `

请求参数

`; endpoint.requestParams.forEach((param, index) => { const row = document.createElement("div"); row.className = "form-row"; row.innerHTML = ` `; reqGroup.appendChild(row); }); block.appendChild(reqGroup); const resGroup = document.createElement("div"); resGroup.className = "param-group"; resGroup.innerHTML = `

响应字段

`; endpoint.responseParams.forEach((param, index) => { const row = document.createElement("div"); row.className = "form-row"; row.innerHTML = ` `; resGroup.appendChild(row); }); block.appendChild(resGroup); container.appendChild(block); } } function collectUserConfig() { const tokenExpireHours = Math.min(168, parseInt(document.getElementById("tokenExpireHours").value) || 24); const apiConfig = {}; const inputs = document.querySelectorAll("input[data-key]"); for (const input of inputs) { const key = input.dataset.key; const type = input.dataset.type; const index = input.dataset.index; if (!apiConfig[key]) { apiConfig[key] = { requestParams: [], responseParams: [] }; } if (type === "url") { apiConfig[key].url = input.value.trim(); } else if (type === "requestParams") { apiConfig[key].requestParams[index] = { field: input.value.trim() }; } else if (type === "responseParams") { apiConfig[key].responseParams[index] = { field: input.value.trim() }; } } return { tokenExpireHours, apiConfig }; } document.getElementById("saveBtn").addEventListener("click", () => { const newConfig = collectUserConfig(); chrome.storage.local.set({ customConfig: newConfig }, () => { alert("设置已保存!"); }); }); document.getElementById("resetBtn").addEventListener("click", () => { chrome.storage.local.remove("customConfig", () => { alert("已恢复默认设置,刷新页面以生效"); location.reload(); }); }); document.addEventListener("DOMContentLoaded", () => { getMergedConfig(renderConfig); const backBtn = document.getElementById("backToPopup"); backBtn.addEventListener("click", () => { const popupUrl = chrome.runtime.getURL("pages/popup.html"); chrome.tabs.create({ url: popupUrl }); }); });