/**
* app.js - 光湖首页导航中心
* M23 环节2 · 接入M22真实公告数据 + 状态API
*/
// === M22真实公告数据接入 ===
let announcements = [];
let dataSource = 'loading';
async function loadAnnouncementsFromM22() {
const carousel = document.getElementById('announcementCarousel');
if (carousel) {
carousel.innerHTML = '
正在连接M22公告数据...
';
}
const result = await window.ModulesAPI.getAnnouncements();
announcements = result.data;
dataSource = result.source;
if (dataSource === 'M22-live') {
console.log('📢 首页公告:来自M22真实数据(' + announcements.length + '条)');
} else {
console.log('📢 首页公告:使用降级数据(M22不可用)');
}
if (window.HomepageApp) {
window.HomepageApp.currentAnnouncementIndex = 0;
window.HomepageApp.renderCarousel();
}
}
// === 模块卡片数据 ===
const moduleCards = [
{ id: "M09", name: "消息通知中心", icon: "🔔", status: "online", path: "../notification-center/" },
{ id: "M22", name: "主域公告栏", icon: "📢", status: "online", path: "../announcement/" },
{ id: "M06", name: "工单管理", icon: "🎫", status: "online", path: "../ticket-system/" },
{ id: "M16", name: "码字工作台", icon: "✍️", status: "building", path: "../writing-workspace/" },
{ id: "M11", name: "风格组件库", icon: "🎨", status: "online", path: "../ui-components/" },
{ id: "M05", name: "用户中心", icon: "👤", status: "building", path: "../user-center/" }
];
// === 工具函数 ===
function getTypeLabel(type) {
const labels = { update: '📢 更新', status: '📊 状态', welcome: '👋 欢迎', alert: '🚨 告警' };
return labels[type] || '📌 公告';
}
// === 模块状态更新 ===
async function updateModuleStatusFromAPI() {
const statusResult = await window.ModulesAPI.getAllModuleStatus();
if (statusResult.source === 'fallback') return;
document.querySelectorAll('.card').forEach(card => {
const moduleId = card.dataset.moduleId;
if (moduleId && statusResult.data[moduleId]) {
const status = statusResult.data[moduleId].status;
const statusSpan = card.querySelector('.card-status');
if (statusSpan) {
statusSpan.className = 'card-status ' + status;
statusSpan.textContent = status === 'online' ? '在线' : status === 'building' ? '建设中' : '离线';
}
}
});
console.log('[M23] ✅ 模块状态已从注册表更新');
}
// === 首页应用对象 ===
window.HomepageApp = {
currentAnnouncementIndex: 0,
carouselInterval: null,
async init() {
this.renderCards();
await loadAnnouncementsFromM22();
await updateModuleStatusFromAPI();
this.startCarousel();
this.bindEvents();
console.log('✅ 首页初始化完成 · 数据源:' + dataSource);
},
renderCards() {
const grid = document.getElementById('moduleGrid');
if (!grid) return;
grid.innerHTML = moduleCards.map(card => `
进入模块 →
`).join('');
},
// 轮播渲染(带高优先级橙色边框)
renderCarousel() {
const carousel = document.getElementById('announcementCarousel');
if (!carousel || announcements.length === 0) {
console.log('❌ 没有公告或找不到轮播容器');
return;
}
const item = announcements[this.currentAnnouncementIndex];
const priorityStyle = item.priority === 'high' ? 'border-left: 3px solid #ff9800; padding-left: 15px;' : '';
carousel.innerHTML = `
${getTypeLabel(item.type)}
${item.title}
${item.content}
${item.date}
${dataSource === 'M22-live' ? '🔗 M22 实时数据' : '📋 本地数据'}
`;
console.log('✅ 轮播已渲染,当前索引:', this.currentAnnouncementIndex);
},
startCarousel() {
if (this.carouselInterval) clearInterval(this.carouselInterval);
this.carouselInterval = setInterval(() => this.nextAnnouncement(), 4000);
console.log('🔄 轮播已启动,4秒自动切换');
},
nextAnnouncement() {
if (announcements.length === 0) return;
this.currentAnnouncementIndex = (this.currentAnnouncementIndex + 1) % announcements.length;
this.renderCarousel();
},
prevAnnouncement() {
if (announcements.length === 0) return;
this.currentAnnouncementIndex = (this.currentAnnouncementIndex - 1 + announcements.length) % announcements.length;
this.renderCarousel();
},
bindEvents() {
document.querySelectorAll('.card').forEach(card => {
card.addEventListener('click', () => {
const moduleId = card.dataset.moduleId;
const modulePath = card.dataset.modulePath;
console.log(`🖱️ 点击卡片: ${moduleId} | 路径: ${modulePath}`);
});
});
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowLeft') {
console.log('⌨️ 键盘左箭头');
this.prevAnnouncement();
}
if (e.key === 'ArrowRight') {
console.log('⌨️ 键盘右箭头');
this.nextAnnouncement();
}
});
}
};
// 启动
document.addEventListener('DOMContentLoaded', () => window.HomepageApp.init());
// 确保函数全局可用(配合 HTML onclick)
window.prevAnnouncement = function() {
window.HomepageApp.prevAnnouncement();
};
window.nextAnnouncement = function() {
window.HomepageApp.nextAnnouncement();
};