Files
ai_mip/static/js/dashboard.js
2026-01-13 18:59:26 +08:00

112 lines
3.5 KiB
JavaScript

// 获取统计数据
async function getStatistics() {
try {
const response = await fetch(`${API_BASE}/api/statistics`);
const data = await response.json();
if (data.success) {
const stats = data.data;
document.getElementById('totalUrls').textContent = stats.total_urls;
document.getElementById('totalClicks').textContent = stats.total_clicks;
document.getElementById('totalReplies').textContent = stats.total_replies;
document.getElementById('replyRate').textContent = stats.reply_rate;
}
} catch (error) {
console.error('获取统计数据失败:', error);
}
}
// 加载URL列表
async function loadUrlList() {
try {
const response = await fetch(`${API_BASE}/api/urls`);
const data = await response.json();
if (data.success) {
const tbody = document.getElementById('urlTableBody');
if (data.data.length === 0) {
tbody.innerHTML = '<tr><td colspan="5" class="empty-state">暂无数据</td></tr>';
return;
}
tbody.innerHTML = data.data.map(item => `
<tr>
<td>
<a href="${item.url}" target="_blank" class="table-url" title="${item.url}">${item.url}</a>
</td>
<td>${item.click_count}</td>
<td>${item.reply_count}</td>
<td>${item.last_click_time || '未点击'}</td>
<td>
<button class="btn btn-warning" style="padding: 4px 12px; font-size: 12px; margin-right: 8px;" onclick="resetUrl('${encodeURIComponent(item.url)}')">重置</button>
<button class="btn btn-danger" style="padding: 4px 12px; font-size: 12px;" onclick="deleteUrl('${encodeURIComponent(item.url)}')">删除</button>
</td>
</tr>
`).join('');
}
} catch (error) {
console.error('加载URL列表失败:', error);
}
}
// 重置URL
async function resetUrl(encodedUrl) {
if (!confirm('确定要重置该链接吗?')) {
return;
}
try {
const response = await fetch(`${API_BASE}/api/urls/${encodedUrl}/reset`, {
method: 'POST'
});
const data = await response.json();
if (data.success) {
showToast('重置成功', 'success');
loadUrlList();
getStatistics();
} else {
showToast(data.message || '重置失败', 'error');
}
} catch (error) {
showToast('重置失败: ' + error.message, 'error');
}
}
// 删除URL
async function deleteUrl(encodedUrl) {
if (!confirm('确定要删除该链接吗?')) {
return;
}
try {
const response = await fetch(`${API_BASE}/api/urls/${encodedUrl}`, {
method: 'DELETE'
});
const data = await response.json();
if (data.success) {
showToast('删除成功', 'success');
loadUrlList();
getStatistics();
} else {
showToast(data.message || '删除失败', 'error');
}
} catch (error) {
showToast('删除失败: ' + error.message, 'error');
}
}
// 初始化
document.addEventListener('DOMContentLoaded', () => {
getStatistics();
loadUrlList();
// 定时刷新
setInterval(() => {
getStatistics();
loadUrlList();
}, 5000);
});