mirror of
https://github.com/cnlimiter/codex-register.git
synced 2026-05-06 20:02:51 +08:00
feat(proxy): 添加动态代理支持
- 在代理获取逻辑中集成动态代理 API 调用 - 新增动态代理配置界面和 API 接口 - 扩展设置模型以支持动态代理参数 - 更新前端设置页面和 JavaScript 逻辑
This commit is contained in:
@@ -38,6 +38,9 @@ const elements = {
|
||||
closeProxyModal: document.getElementById('close-proxy-modal'),
|
||||
cancelProxyBtn: document.getElementById('cancel-proxy-btn'),
|
||||
proxyModalTitle: document.getElementById('proxy-modal-title'),
|
||||
// 动态代理设置
|
||||
dynamicProxyForm: document.getElementById('dynamic-proxy-form'),
|
||||
testDynamicProxyBtn: document.getElementById('test-dynamic-proxy-btn'),
|
||||
// CPA 设置
|
||||
cpaForm: document.getElementById('cpa-form'),
|
||||
testCpaBtn: document.getElementById('test-cpa-btn'),
|
||||
@@ -202,6 +205,14 @@ function initEventListeners() {
|
||||
elements.proxyItemForm.addEventListener('submit', handleSaveProxyItem);
|
||||
}
|
||||
|
||||
// 动态代理设置
|
||||
if (elements.dynamicProxyForm) {
|
||||
elements.dynamicProxyForm.addEventListener('submit', handleSaveDynamicProxy);
|
||||
}
|
||||
if (elements.testDynamicProxyBtn) {
|
||||
elements.testDynamicProxyBtn.addEventListener('click', handleTestDynamicProxy);
|
||||
}
|
||||
|
||||
// CPA 设置
|
||||
if (elements.cpaForm) {
|
||||
elements.cpaForm.addEventListener('submit', handleSaveCpa);
|
||||
@@ -234,6 +245,12 @@ async function loadSettings() {
|
||||
document.getElementById('proxy-port').value = data.proxy?.port || 7890;
|
||||
document.getElementById('proxy-username').value = data.proxy?.username || '';
|
||||
|
||||
// 动态代理设置
|
||||
document.getElementById('dynamic-proxy-enabled').checked = data.proxy?.dynamic_enabled || false;
|
||||
document.getElementById('dynamic-proxy-api-url').value = data.proxy?.dynamic_api_url || '';
|
||||
document.getElementById('dynamic-proxy-api-key-header').value = data.proxy?.dynamic_api_key_header || 'X-API-Key';
|
||||
document.getElementById('dynamic-proxy-result-field').value = data.proxy?.dynamic_result_field || '';
|
||||
|
||||
// 注册配置
|
||||
document.getElementById('max-retries').value = data.registration?.max_retries || 3;
|
||||
document.getElementById('timeout').value = data.registration?.timeout || 120;
|
||||
@@ -1000,3 +1017,52 @@ async function handleTestCpa() {
|
||||
elements.testCpaBtn.textContent = '🔌 测试连接';
|
||||
}
|
||||
}
|
||||
|
||||
// ============== 动态代理设置 ==============
|
||||
|
||||
async function handleSaveDynamicProxy(e) {
|
||||
e.preventDefault();
|
||||
const data = {
|
||||
enabled: document.getElementById('dynamic-proxy-enabled').checked,
|
||||
api_url: document.getElementById('dynamic-proxy-api-url').value.trim(),
|
||||
api_key: document.getElementById('dynamic-proxy-api-key').value || null,
|
||||
api_key_header: document.getElementById('dynamic-proxy-api-key-header').value.trim() || 'X-API-Key',
|
||||
result_field: document.getElementById('dynamic-proxy-result-field').value.trim()
|
||||
};
|
||||
try {
|
||||
await api.post('/settings/proxy/dynamic', data);
|
||||
toast.success('动态代理设置已保存');
|
||||
document.getElementById('dynamic-proxy-api-key').value = '';
|
||||
} catch (error) {
|
||||
toast.error('保存失败: ' + error.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleTestDynamicProxy() {
|
||||
const apiUrl = document.getElementById('dynamic-proxy-api-url').value.trim();
|
||||
if (!apiUrl) {
|
||||
toast.warning('请先填写动态代理 API 地址');
|
||||
return;
|
||||
}
|
||||
const btn = elements.testDynamicProxyBtn;
|
||||
btn.disabled = true;
|
||||
btn.textContent = '测试中...';
|
||||
try {
|
||||
const result = await api.post('/settings/proxy/dynamic/test', {
|
||||
api_url: apiUrl,
|
||||
api_key: document.getElementById('dynamic-proxy-api-key').value || null,
|
||||
api_key_header: document.getElementById('dynamic-proxy-api-key-header').value.trim() || 'X-API-Key',
|
||||
result_field: document.getElementById('dynamic-proxy-result-field').value.trim()
|
||||
});
|
||||
if (result.success) {
|
||||
toast.success(result.message);
|
||||
} else {
|
||||
toast.error(result.message);
|
||||
}
|
||||
} catch (error) {
|
||||
toast.error('测试失败: ' + error.message);
|
||||
} finally {
|
||||
btn.disabled = false;
|
||||
btn.textContent = '🔌 测试动态代理';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user