/** * 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 => `
${card.icon}
${card.name} ${card.status === 'online' ? '在线' : '建设中'}
进入模块 →
`).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(); };