54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
let refreshInterval;
|
|
let countdownInterval;
|
|
let seconds = 30;
|
|
|
|
function updateLastUpdateTime() {
|
|
const el = document.getElementById('last-update-time');
|
|
if (el) {
|
|
const now = new Date();
|
|
el.textContent = `最后更新: ${now.toLocaleTimeString('zh-CN', { hour12: false })}`;
|
|
}
|
|
}
|
|
|
|
function updateCountdown() {
|
|
const el = document.getElementById('refresh-indicator');
|
|
if (el) el.textContent = `⏳ ${seconds}s`;
|
|
}
|
|
|
|
function startCountdown() {
|
|
seconds = 30;
|
|
updateCountdown();
|
|
if (countdownInterval) clearInterval(countdownInterval);
|
|
countdownInterval = setInterval(() => {
|
|
seconds--;
|
|
if (seconds <= 0) seconds = 30;
|
|
updateCountdown();
|
|
}, 1000);
|
|
}
|
|
|
|
async function refreshAllData() {
|
|
const devs = await getDevStatus();
|
|
const stats = await getAllStats();
|
|
if (typeof renderStats === 'function') renderStats(stats);
|
|
if (typeof renderDevCards === 'function') renderDevCards(devs);
|
|
if (typeof renderRanking === 'function') renderRanking(devs);
|
|
updateLastUpdateTime();
|
|
}
|
|
|
|
async function initApp() {
|
|
await initBoard();
|
|
await initRanking();
|
|
initRadar();
|
|
await refreshAllData();
|
|
startCountdown();
|
|
if (refreshInterval) clearInterval(refreshInterval);
|
|
refreshInterval = setInterval(refreshAllData, 30000);
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', initApp);
|
|
|
|
window.addEventListener('beforeunload', () => {
|
|
if (refreshInterval) clearInterval(refreshInterval);
|
|
if (countdownInterval) clearInterval(countdownInterval);
|
|
});
|