live-forum/server/admin/browser-extension/live-forum-cookie/options/options.js
2026-03-24 11:27:37 +08:00

152 lines
3.7 KiB
JavaScript

/**
* 帅库之家Cookie管理 - 设置页面脚本
*/
// DOM元素
let form;
let messageEl;
/**
* 初始化
*/
document.addEventListener('DOMContentLoaded', async () => {
form = document.getElementById('config-form');
messageEl = document.getElementById('message');
// 绑定事件
form.addEventListener('submit', handleSubmit);
document.getElementById('btn-toggle-key').addEventListener('click', toggleKeyVisibility);
document.getElementById('btn-test').addEventListener('click', testConnection);
// 加载配置
await loadConfig();
});
/**
* 加载配置
*/
async function loadConfig() {
try {
const response = await sendMessage({ action: 'getConfig' });
const config = response.data;
document.getElementById('serverUrl').value = config.serverUrl || '';
document.getElementById('apiKey').value = config.apiKey || '';
document.getElementById('pollInterval').value = config.pollInterval || '5';
} catch (error) {
showMessage('加载配置失败: ' + error.message, 'error');
}
}
/**
* 处理表单提交
*/
async function handleSubmit(event) {
event.preventDefault();
const config = {
serverUrl: document.getElementById('serverUrl').value.trim().replace(/\/$/, ''),
apiKey: document.getElementById('apiKey').value.trim(),
pollInterval: parseInt(document.getElementById('pollInterval').value)
};
try {
await sendMessage({ action: 'saveConfig', config });
showMessage('设置已保存', 'success');
} catch (error) {
showMessage('保存失败: ' + error.message, 'error');
}
}
/**
* 切换API Key可见性
*/
function toggleKeyVisibility() {
const input = document.getElementById('apiKey');
const btn = document.getElementById('btn-toggle-key');
if (input.type === 'password') {
input.type = 'text';
btn.textContent = '隐藏';
} else {
input.type = 'password';
btn.textContent = '显示';
}
}
/**
* 测试连接
*/
async function testConnection() {
const btn = document.getElementById('btn-test');
const originalText = btn.textContent;
const serverUrl = document.getElementById('serverUrl').value.trim().replace(/\/$/, '');
const apiKey = document.getElementById('apiKey').value.trim();
if (!serverUrl || !apiKey) {
showMessage('请先填写服务器地址和API Key', 'error');
return;
}
try {
btn.disabled = true;
btn.textContent = '测试中...';
const response = await fetch(`${serverUrl}/api/crawler/cookie/status`, {
method: 'GET',
headers: {
'X-API-Key': apiKey,
'Content-Type': 'application/json'
}
});
if (!response.ok) {
if (response.status === 401 || response.status === 403) {
throw new Error('API Key无效');
}
throw new Error(`服务器返回 ${response.status}`);
}
const data = await response.json();
if (data.code === 200) {
showMessage('连接成功!服务器正常', 'success');
} else {
throw new Error(data.msg || '未知错误');
}
} catch (error) {
showMessage('连接失败: ' + error.message, 'error');
} finally {
btn.textContent = originalText;
btn.disabled = false;
}
}
/**
* 显示消息
*/
function showMessage(text, type) {
messageEl.textContent = text;
messageEl.className = `message ${type}`;
messageEl.style.display = 'block';
setTimeout(() => {
messageEl.style.display = 'none';
}, 5000);
}
/**
* 发送消息到后台
*/
function sendMessage(message) {
return new Promise((resolve, reject) => {
chrome.runtime.sendMessage(message, (response) => {
if (chrome.runtime.lastError) {
reject(new Error(chrome.runtime.lastError.message));
} else {
resolve(response);
}
});
});
}