'init'
This commit is contained in:
111
static/js/dashboard.js
Normal file
111
static/js/dashboard.js
Normal file
@@ -0,0 +1,111 @@
|
||||
// 获取统计数据
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user