class ContentArea extends HTMLElement { constructor() { super(); this.attachShadow({ mode: 'open' }); this.contentCache = new Map(); // 添加内容缓存Map } connectedCallback() { this.render(); } render() { this.shadowRoot.innerHTML = `
`; } loadContent(id) { const container = this.shadowRoot.querySelector('.content-container'); // 先清空容器 container.innerHTML = ''; // 检查是否已有缓存的内容 if (this.contentCache.has(id)) { try { // 如果已缓存,直接使用缓存的内容 const cachedContent = this.contentCache.get(id); // 添加到DOM container.appendChild(cachedContent); // 如果组件有重新激活方法,调用它 if (typeof cachedContent.reactivate === 'function') { // 使用一个短延迟确保DOM已更新后再激活 requestAnimationFrame(() => { try { cachedContent.reactivate(); } catch (err) { console.error(`激活组件 ${id} 时出错:`, err); } }); } } catch (err) { console.error(`从缓存加载组件 ${id} 时出错:`, err); // 缓存加载失败,清除缓存并创建新组件 this.clearCache(id); // 递归调用以创建新组件 this.loadContent(id); return; } return; } // 如果没有缓存,创建新的内容 let contentElement; switch (id) { case 'overview': contentElement = document.createElement('overview-page'); break; case 'update-history': contentElement = document.createElement('update-history'); break; case 'run-log': contentElement = document.createElement('run-log'); break; case 'system-info': contentElement = document.createElement('system-info'); break; case 'help': contentElement = document.createElement('help-component'); break; case 'qa': contentElement = document.createElement('qa-component'); break; case 'run-env-config': contentElement = document.createElement('run-env-config'); break; case 'model-config': contentElement = document.createElement('model-config'); break; case 'service-config': contentElement = document.createElement('service-config'); break; case 'interface-config': contentElement = document.createElement('interface-config'); break; case 'model-development': contentElement = document.createElement('model-development'); break; case 'service-development': contentElement = document.createElement('service-development'); break; case 'run-test': contentElement = document.createElement('run-test'); break; case 'run-simulation': contentElement = document.createElement('run-simulation'); break; case 'simulation-monitor': contentElement = document.createElement('simulation-monitor'); break; case 'model-monitor': contentElement = document.createElement('model-monitor'); break; case 'data-monitor': contentElement = document.createElement('data-monitor'); break; case 'data-collection': contentElement = document.createElement('data-collection'); break; case 'profile': contentElement = document.createElement('profile-center'); break; case 'users': contentElement = document.createElement('user-management'); break; case 'system-log': contentElement = document.createElement('system-log'); break; default: contentElement = document.createElement('div'); contentElement.textContent = '正在开发中...'; } // 添加监听器,当内容被移出DOM时通知组件 const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.type === 'childList' && mutation.removedNodes.length > 0) { Array.from(mutation.removedNodes).forEach((node) => { if (node === contentElement && typeof contentElement.isActive === 'boolean') { contentElement.isActive = false; } }); } }); }); observer.observe(container, { childList: true }); // 缓存内容组件 this.contentCache.set(id, contentElement); // 添加到容器 container.appendChild(contentElement); } // 清除特定标签页的缓存 clearCache(id) { if (this.contentCache.has(id)) { this.contentCache.delete(id); } } // 清除所有缓存 clearAllCache() { this.contentCache.clear(); } } customElements.define('content-area', ContentArea);