class HeaderTools extends HTMLElement { constructor() { super(); this.attachShadow({ mode: 'open' }); this.render(); this.addEventListeners(); } // 添加getter方法 get selectedPlane() { return this.shadowRoot.getElementById('planeSelect').value; } get selectedConfiguration() { return this.shadowRoot.getElementById('configurationSelect').value; } get selectedDomain() { const select = this.shadowRoot.getElementById('configurationSelect'); const selectedOption = select.options[select.selectedIndex]; return selectedOption ? selectedOption.dataset.domainId : ''; } // 保存选择到localStorage saveSelection() { const selection = { plane: this.selectedPlane, configurationId: this.selectedConfiguration, domainId: this.selectedDomain }; localStorage.setItem('xnsim-selection', JSON.stringify(selection)); } // 从localStorage恢复选择 restoreSelection() { const savedSelection = localStorage.getItem('xnsim-selection'); if (savedSelection) { const selection = JSON.parse(savedSelection); const planeSelect = this.shadowRoot.getElementById('planeSelect'); const configurationSelect = this.shadowRoot.getElementById('configurationSelect'); // 先加载机型列表 this.loadPlanes().then(() => { if (selection.plane) { planeSelect.value = selection.plane; // 加载该机型下的构型列表 this.loadConfigurations(selection.plane).then(() => { if (selection.configurationId) { configurationSelect.value = selection.configurationId; // 触发change事件以确保domainId被更新 configurationSelect.dispatchEvent(new Event('change')); } }); } }); } } render() { this.shadowRoot.innerHTML = `
机型:
构型:
字体
主题
通知
在线用户
`; } addEventListeners() { // 加载机型列表 this.loadPlanes(); // 加载构型列表 this.loadConfigurations(); // 恢复上次的选择 this.restoreSelection(); // 字体大小调整 this.shadowRoot.getElementById('fontSizeBtn').addEventListener('click', () => { this.dispatchEvent(new CustomEvent('font-size-click')); }); // 主题调整 this.shadowRoot.getElementById('themeBtn').addEventListener('click', () => { this.dispatchEvent(new CustomEvent('theme-click')); }); // 通知 this.shadowRoot.getElementById('notificationBtn').addEventListener('click', () => { this.dispatchEvent(new CustomEvent('notification-click')); }); // 在线用户 this.shadowRoot.getElementById('onlineUsersBtn').addEventListener('click', () => { this.dispatchEvent(new CustomEvent('online-users-click')); }); // 机型选择 this.shadowRoot.getElementById('planeSelect').addEventListener('change', (e) => { // 当机型改变时,重新加载该机型下的构型列表 this.loadConfigurations(e.target.value); // 保存选择 this.saveSelection(); }); // 构型选择 this.shadowRoot.getElementById('configurationSelect').addEventListener('change', (e) => { // 保存选择 this.saveSelection(); }); } async loadPlanes() { try { const response = await fetch('/api/planes'); if (!response.ok) { throw new Error('获取机型列表失败'); } const planes = await response.json(); const select = this.shadowRoot.getElementById('planeSelect'); // 清空现有选项 select.innerHTML = ''; planes.forEach(plane => { const option = document.createElement('option'); option.value = plane.PlaneName; option.textContent = plane.PlaneName; select.appendChild(option); }); } catch (error) { console.error('加载机型列表失败:', error); } } async loadConfigurations(planeName = '') { try { const url = planeName ? `/api/configurations?plane=${planeName}` : '/api/configurations'; const response = await fetch(url); if (!response.ok) { throw new Error('获取构型列表失败'); } const configurations = await response.json(); const select = this.shadowRoot.getElementById('configurationSelect'); // 清空现有选项 select.innerHTML = ''; configurations.forEach(config => { const option = document.createElement('option'); option.value = config.ConfID; option.textContent = config.ConfName; // 将DomainID存储在option的data属性中 option.dataset.domainId = config.DomainID; select.appendChild(option); }); } catch (error) { console.error('加载构型列表失败:', error); } } } customElements.define('header-tools', HeaderTools);