82 lines
3.3 KiB
JavaScript
82 lines
3.3 KiB
JavaScript
// =====================================
|
||
// HoloLake DevBoard · API Init v1.0
|
||
// 负责:异步加载 + 加载动画 + 自动刷新
|
||
// 必须在 api.js 和 main.js 之后加载
|
||
// =====================================
|
||
|
||
(function(){
|
||
// -------------- 加载动画 --------------
|
||
function showLoader(show) {
|
||
var el = document.getElementById('devboard-loader');
|
||
if (!el && show) {
|
||
el = document.createElement('div');
|
||
el.id = 'devboard-loader';
|
||
el.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(10,14,23,0.92);display:flex;align-items:center;justify-content:center;z-index:10000';
|
||
el.innerHTML = '<div style="display:flex;flex-direction:column;align-items:center;gap:16px;"><div style="width:40px;height:40px;border:3px solid rgba(96,165,250,0.3);border-top-color:#60a5fa;border-radius:50%;animation:dbspin 0.8s linear infinite;"></div><div style="font-size:14px;color:#60a5fa;">数据加载中...</div></div>';
|
||
var style = document.createElement('style');
|
||
style.textContent = '@keyframes dbspin{to{transform:rotate(360deg)}}';
|
||
document.head.appendChild(style);
|
||
document.body.appendChild(el);
|
||
}
|
||
if (el) el.style.display = show ? 'flex' : 'none';
|
||
}
|
||
|
||
// -------------- 数据加载+渲染 --------------
|
||
async function loadAndRender() {
|
||
try {
|
||
var developers = await apiGetDevelopers();
|
||
var stats = await apiGetStats();
|
||
var leaderboard = await apiGetLeaderboard();
|
||
|
||
// 使用 components.js 里实际存在的函数
|
||
if (typeof renderDeveloperCards === 'function') {
|
||
renderDeveloperCards(developers);
|
||
}
|
||
|
||
if (typeof renderRanking === 'function') {
|
||
renderRanking(leaderboard);
|
||
}
|
||
|
||
// stats 暂时用控制台输出,等找到实际渲染函数再改
|
||
console.log('[DevBoard] 统计数据:', stats);
|
||
|
||
console.log('[DevBoard] 数据加载完成,共 ' + developers.length + ' 位开发者');
|
||
} catch (err) {
|
||
console.error('[DevBoard] 数据加载异常: ', err);
|
||
}
|
||
}
|
||
|
||
// -------------- 初始化入口 --------------
|
||
async function init() {
|
||
showLoader(true);
|
||
|
||
// 检测API状态
|
||
var online = await apiHealthCheck();
|
||
showApiStatus(online);
|
||
console.log('[DevBoard] API状态: ' + (online ? '在线(实时)' : '离线(降级)'));
|
||
|
||
// 加载+渲染
|
||
await loadAndRender();
|
||
showLoader(false);
|
||
|
||
// 自动刷新(仅API在线时)
|
||
if (online && API.REFRESH_MS > 0) {
|
||
console.log('[DevBoard] 自动刷新已启动,间隔 ' + (API.REFRESH_MS/1000) + ' 秒');
|
||
setInterval(async function() {
|
||
try {
|
||
await loadAndRender();
|
||
} catch (e) {
|
||
console.warn('[DevBoard] 自动刷新失败: ', e.message);
|
||
}
|
||
}, API.REFRESH_MS);
|
||
}
|
||
}
|
||
|
||
// 等待DOM和所有脚本加载完成后启动
|
||
if (document.readyState === 'loading') {
|
||
document.addEventListener('DOMContentLoaded', init);
|
||
} else {
|
||
init();
|
||
}
|
||
})();
|