/** * HuggingFace 保活管理器 - 前端交互脚本 */ // Toast 通知函数 function showToast(message, type = 'info') { const container = document.getElementById('toast-container'); const toast = document.createElement('div'); toast.className = `toast toast-${type}`; const icons = { success: '', error: '', warning: '', info: '' }; toast.innerHTML = ` ${icons[type] || icons.info} ${message} `; container.appendChild(toast); // 自动移除 setTimeout(() => { toast.classList.add('fade-out'); setTimeout(() => toast.remove(), 300); }, 4000); } // 刷新页面 function refreshPage() { location.reload(); } // 添加URL document.getElementById('add-url-form').addEventListener('submit', async (e) => { e.preventDefault(); const urlInput = document.getElementById('url-input'); const nameInput = document.getElementById('name-input'); const btn = e.target.querySelector('button[type="submit"]'); const url = urlInput.value.trim(); const name = nameInput.value.trim(); if (!url) { showToast('请输入URL地址', 'error'); return; } btn.disabled = true; btn.innerHTML = ' 添加中...'; try { const response = await fetch('/api/urls', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ url, name }) }); const data = await response.json(); if (response.ok) { showToast('URL添加成功', 'success'); setTimeout(refreshPage, 500); } else { showToast(data.error || '添加失败', 'error'); } } catch (error) { showToast('网络错误,请重试', 'error'); } finally { btn.disabled = false; btn.innerHTML = ' 添加'; } }); // 删除URL document.querySelectorAll('.delete-btn').forEach(btn => { btn.addEventListener('click', async () => { const index = btn.dataset.index; if (!confirm('确定要删除这个URL吗?')) return; btn.disabled = true; try { const response = await fetch(`/api/urls/${index}`, { method: 'DELETE' }); if (response.ok) { showToast('删除成功', 'success'); setTimeout(refreshPage, 500); } else { showToast('删除失败', 'error'); } } catch (error) { showToast('网络错误', 'error'); } finally { btn.disabled = false; } }); }); // Ping单个URL document.querySelectorAll('.ping-btn').forEach(btn => { btn.addEventListener('click', async () => { const index = btn.dataset.index; const urlItem = btn.closest('.url-item'); const urlName = urlItem.querySelector('.url-name').textContent; btn.disabled = true; btn.innerHTML = ''; try { const response = await fetch(`/api/ping/${index}`, { method: 'POST' }); const data = await response.json(); if (data.result && data.result.status === 'success') { showToast(`${urlName} 连接成功 (${data.result.code})`, 'success'); } else if (data.result && data.result.status === 'warning') { showToast(`${urlName} 返回状态码: ${data.result.code}`, 'warning'); } else { showToast(`${urlName} 连接失败: ${data.result?.message || '未知错误'}`, 'error'); } } catch (error) { showToast('网络错误', 'error'); } finally { btn.disabled = false; btn.innerHTML = ''; } }); }); // 全部保活 document.getElementById('ping-all-btn')?.addEventListener('click', async () => { const btn = document.getElementById('ping-all-btn'); btn.disabled = true; btn.innerHTML = ' 执行中...'; showToast('正在执行保活任务...', 'info'); try { const response = await fetch('/api/ping', { method: 'POST' }); const data = await response.json(); if (data.results) { const successCount = data.results.filter(r => r.status === 'success').length; showToast(`保活完成: ${successCount}/${data.results.length} 成功`, successCount === data.results.length ? 'success' : 'warning'); setTimeout(refreshPage, 1000); } } catch (error) { showToast('执行失败', 'error'); } finally { btn.disabled = false; btn.innerHTML = ' 立即全部保活'; } }); // 清空日志 document.getElementById('clear-logs-btn')?.addEventListener('click', async () => { if (!confirm('确定要清空所有日志吗?')) return; try { const response = await fetch('/api/logs', { method: 'DELETE' }); if (response.ok) { showToast('日志已清空', 'success'); setTimeout(refreshPage, 500); } } catch (error) { showToast('清空失败', 'error'); } }); // 页面加载完成 document.addEventListener('DOMContentLoaded', () => { console.log('HuggingFace 保活管理器已加载'); });