Merge branch 'master' into master

This commit is contained in:
演变
2026-03-17 17:59:47 +08:00
committed by GitHub
30 changed files with 2345 additions and 310 deletions

View File

@@ -44,6 +44,9 @@ const elements = {
// CPA 设置
cpaForm: document.getElementById('cpa-form'),
testCpaBtn: document.getElementById('test-cpa-btn'),
// Team Manager 设置
tmForm: document.getElementById('tm-form'),
testTmBtn: document.getElementById('test-tm-btn'),
// 验证码设置
emailCodeForm: document.getElementById('email-code-form'),
// Outlook 设置
@@ -236,6 +239,12 @@ function initEventListeners() {
if (elements.webuiSettingsForm) {
elements.webuiSettingsForm.addEventListener('submit', handleSaveWebuiSettings);
// Team Manager 设置
if (elements.tmForm) {
elements.tmForm.addEventListener('submit', handleSaveTm);
}
if (elements.testTmBtn) {
elements.testTmBtn.addEventListener('click', handleTestTm);
}
}
@@ -274,6 +283,8 @@ async function loadSettings() {
loadCpaSettings();
// 加载 Outlook 设置
loadOutlookSettings();
// 加载 Team Manager 设置
loadTmSettings();
// Web UI 访问密码提示
if (data.webui?.has_access_password) {
@@ -1100,3 +1111,73 @@ async function handleTestDynamicProxy() {
btn.textContent = '🔌 测试动态代理';
}
}
// ============== Team Manager 设置 ==============
async function loadTmSettings() {
try {
const data = await api.get('/settings/team-manager');
document.getElementById('tm-enabled').checked = data.enabled || false;
document.getElementById('tm-api-url').value = data.api_url || '';
document.getElementById('tm-api-key').value = '';
document.getElementById('tm-api-key').placeholder = data.has_api_key ? '已配置,留空保持不变' : '请输入 API Key';
} catch (error) {
console.error('加载 Team Manager 设置失败:', error);
}
}
async function handleSaveTm(e) {
e.preventDefault();
const data = {
enabled: document.getElementById('tm-enabled').checked,
api_url: document.getElementById('tm-api-url').value,
api_key: document.getElementById('tm-api-key').value || ''
};
try {
await api.post('/settings/team-manager', data);
toast.success('Team Manager 设置已保存');
loadTmSettings();
} catch (error) {
toast.error('保存失败: ' + error.message);
}
}
async function handleTestTm() {
const apiUrl = document.getElementById('tm-api-url').value;
const apiKey = document.getElementById('tm-api-key').value;
if (!apiUrl) {
toast.error('请先填写 API URL');
return;
}
let keyToTest = apiKey;
if (!keyToTest) {
const saved = await api.get('/settings/team-manager');
if (!saved.has_api_key) {
toast.error('请先填写 API Key');
return;
}
keyToTest = 'use_saved_key';
}
elements.testTmBtn.disabled = true;
elements.testTmBtn.innerHTML = '<span class="loading-spinner"></span> 测试中...';
try {
const result = await api.post('/settings/team-manager/test', {
api_url: apiUrl,
api_key: keyToTest
});
if (result.success) {
toast.success(result.message);
} else {
toast.error(result.message);
}
} catch (error) {
toast.error('测试失败: ' + error.message);
} finally {
elements.testTmBtn.disabled = false;
elements.testTmBtn.textContent = '🔌 测试连接';
}
}