112 lines
3.5 KiB
JavaScript
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);
|
|
});
|