152 lines
3.7 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
});
|
|
}
|