// 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 });
});
});