feat(pay): 支付跳转功能

- 账号管理:补充订阅状态管理、TeamManager上传说明
 - 新增「支付升级」功能模块描述
 - 系统设置:补充 CPA配置和 TeamManager配置项
This commit is contained in:
cnlimiter
2026-03-16 17:04:54 +08:00
parent c5ab1747c6
commit 19eb172eee
18 changed files with 1174 additions and 3 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 设置
@@ -231,6 +234,14 @@ function initEventListeners() {
if (elements.outlookSettingsForm) {
elements.outlookSettingsForm.addEventListener('submit', handleSaveOutlookSettings);
}
// Team Manager 设置
if (elements.tmForm) {
elements.tmForm.addEventListener('submit', handleSaveTm);
}
if (elements.testTmBtn) {
elements.testTmBtn.addEventListener('click', handleTestTm);
}
}
// 加载设置
@@ -268,6 +279,8 @@ async function loadSettings() {
loadCpaSettings();
// 加载 Outlook 设置
loadOutlookSettings();
// 加载 Team Manager 设置
loadTmSettings();
} catch (error) {
console.error('加载设置失败:', error);
@@ -1066,3 +1079,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 = '🔌 测试连接';
}
}