126 lines
4.6 KiB
JavaScript
126 lines
4.6 KiB
JavaScript
// 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 += `<div class="api-name">【${endpoint.name}】</div>`;
|
|
|
|
const urlRow = document.createElement("div");
|
|
urlRow.className = "form-row";
|
|
urlRow.innerHTML = `
|
|
<label>接口地址</label>
|
|
<input data-key="${key}" data-type="url" value="${endpoint.url}" />
|
|
`;
|
|
block.appendChild(urlRow);
|
|
|
|
const reqGroup = document.createElement("div");
|
|
reqGroup.className = "param-group";
|
|
reqGroup.innerHTML = `<h4>请求参数</h4>`;
|
|
endpoint.requestParams.forEach((param, index) => {
|
|
const row = document.createElement("div");
|
|
row.className = "form-row";
|
|
row.innerHTML = `
|
|
<label>${param.label}</label>
|
|
<input data-key="${key}" data-type="requestParams" data-index="${index}" value="${param.field}" />
|
|
`;
|
|
reqGroup.appendChild(row);
|
|
});
|
|
block.appendChild(reqGroup);
|
|
|
|
const resGroup = document.createElement("div");
|
|
resGroup.className = "param-group";
|
|
resGroup.innerHTML = `<h4>响应字段</h4>`;
|
|
endpoint.responseParams.forEach((param, index) => {
|
|
const row = document.createElement("div");
|
|
row.className = "form-row";
|
|
row.innerHTML = `
|
|
<label>${param.label}</label>
|
|
<input data-key="${key}" data-type="responseParams" data-index="${index}" value="${param.field}" />
|
|
`;
|
|
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 });
|
|
});
|
|
});
|