game/assets/site-app.js
pengyuthon 954cbc6823 feat: 沙盘游戏核心运行时文件上线 + 微观世界加载页UI优化
- 提交 world.html 及 assets/(地形贴图/背景/视频/js)、index/login/terrain_preview
- world.html: 微观世界入场加载页重构为左下角提示药丸 + 全宽进度条
- 排除 .bak/__bak 备份文件(.gitignore)
2026-07-23 12:58:22 +08:00

70 lines
3.0 KiB
JavaScript

// 宇森官网 · 公开页数据打通(图鉴/规则/论坛/公告 从 Odoo 取数)
// 依赖 assets/game-api.js
// ---------- 规则 ----------
async function loadRules(){
const el = document.querySelector('#rules .rules-scroll');
if (!el) return;
try {
const d = await API.rules();
const groups = (d && d.groups) || [];
if (!groups.length){ el.innerHTML = '<div class="tdesc">暂无规则数据</div>'; return; }
el.innerHTML = groups.map(g => {
const rows = (g.items || []).map(it => {
const lvl = (it.level != null) ? ('Lv.' + it.level) : (g.key === 'world' ? '阶段' : '');
return `<div class="tier-row"><span class="tn">${lvl}</span><span class="tname">${it.name}</span><span class="tdesc">${it.desc || ''}</span></div>`;
}).join('');
return `<div class="rule-block"><h3>${g.label}</h3><div class="tier-list">${rows}</div></div>`;
}).join('');
} catch (e) { /* 保留静态兜底内容 */ }
}
// ---------- 论坛 ----------
async function loadForum(){
const threadsEl = document.getElementById('threads');
const catsEl = document.querySelector('#forum .f-cats');
if (!threadsEl) return;
try {
const list = await API.threads();
if (!list || !list.length){ threadsEl.innerHTML = '<div class="th"><span class="tt">暂无主题</span></div>'; return; }
// 分类筛选
const cats = [];
list.forEach(t => { if (t.category && cats.indexOf(t.category) < 0) cats.push(t.category); });
if (catsEl){
catsEl.innerHTML = `<div class="ch active" data-fcat="all">全部</div>` +
cats.map(c => `<div class="ch" data-fcat="${c}">${c}</div>`).join('');
catsEl.querySelectorAll('.ch').forEach(b => b.addEventListener('click', () => {
catsEl.querySelectorAll('.ch').forEach(x => x.classList.remove('active'));
b.classList.add('active');
const c = b.dataset.fcat;
threadsEl.querySelectorAll('.th').forEach(t => { t.style.display = (c === 'all' || t.dataset.fcat === c) ? '' : 'none'; });
}));
}
threadsEl.innerHTML = list.map(t =>
`<div class="th" data-fcat="${t.category || 'all'}">` +
(t.pinned ? `<span class="pin">置顶</span>` : '') +
`<span class="tt">${t.name}</span>` +
`<span class="meta"><span class="rp">${(t.replies || []).length}</span> 回复 · ${t.author_name || '匿名'}</span></div>`
).join('');
} catch (e) { /* 保留静态兜底内容 */ }
}
// ---------- 公告 ----------
async function loadAnnounce(){
const el = document.querySelector('#announce .notes');
if (!el) return;
try {
const list = await API.announcements();
if (!list || !list.length){ el.innerHTML = '<div class="note"><div class="body">暂无公告</div></div>'; return; }
el.innerHTML = list.map(n =>
`<div class="note"><div class="date">${n.date}</div><div class="body">${n.body_html || ''}</div></div>`
).join('');
} catch (e) { /* 保留静态兜底内容 */ }
}
document.addEventListener('DOMContentLoaded', () => {
loadRules();
loadForum();
loadAnnounce();
});