XNSim/XNSimHtml/components/main-toolbar.js

162 lines
5.5 KiB
JavaScript
Raw Normal View History

2025-04-28 12:25:20 +08:00
class MainToolbar extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
this.render();
this.addEventListeners();
this.checkUserAccessLevel();
}
render() {
this.shadowRoot.innerHTML = `
<style>
:host {
width: 80px;
background: linear-gradient(180deg, #667eea 0%, #764ba2 100%);
display: flex;
flex-direction: column;
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
}
.logo-container {
padding: 10px;
text-align: center;
}
.logo-image {
width: 60px;
height: 60px;
}
.tools-container {
display: flex;
flex-direction: column;
gap: 10px;
padding: 10px 0;
}
.tool-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 10px 0;
cursor: pointer;
color: white;
transition: all 0.3s;
}
.tool-item:hover {
background-color: rgba(255, 255, 255, 0.1);
}
.tool-item.active {
background-color: rgba(255, 255, 255, 0.2);
}
.tool-item.hidden {
display: none;
}
.icon {
width: 24px;
height: 24px;
margin-bottom: 5px;
}
span {
font-size: 12px;
text-align: center;
}
</style>
<nav>
<div class="logo-container">
<img src="assets/icons/XNSim.png" alt="XNSim Logo" class="logo-image">
</div>
<div class="tools-container">
<div class="tool-item active" data-tool="home">
<img src="assets/icons/png/home.png" alt="主页" class="icon">
<span>主页</span>
</div>
<div class="tool-item" data-tool="develop" id="developOption">
<img src="assets/icons/png/develop.png" alt="开发" class="icon">
<span>开发</span>
</div>
<div class="tool-item" data-tool="config">
<img src="assets/icons/png/sliders.png" alt="配置" class="icon">
<span>配置</span>
</div>
<div class="tool-item" data-tool="run">
<img src="assets/icons/png/play.png" alt="运行" class="icon">
<span>运行</span>
</div>
<div class="tool-item" data-tool="monitor">
<img src="assets/icons/png/chart.png" alt="监控" class="icon">
<span>监控</span>
</div>
<div class="tool-item" data-tool="system" id="systemManagement">
2025-05-07 17:01:58 +08:00
<img src="assets/icons/png/cogs.png" alt="管理" class="icon">
<span>管理</span>
2025-04-28 12:25:20 +08:00
</div>
</div>
</nav>
`;
}
addEventListeners() {
const toolItems = this.shadowRoot.querySelectorAll('.tool-item');
toolItems.forEach(item => {
item.addEventListener('click', () => {
// 移除所有工具项的激活状态
toolItems.forEach(t => t.classList.remove('active'));
// 激活当前工具项
item.classList.add('active');
// 触发自定义事件
const tool = item.getAttribute('data-tool');
const event = new CustomEvent('tool-selected', {
detail: {
tool: tool,
text: item.querySelector('span').textContent
},
bubbles: true,
composed: true
});
this.dispatchEvent(event);
});
});
}
checkUserAccessLevel() {
// 获取用户信息
let userInfo;
try {
const userInfoStr = localStorage.getItem('userInfo');
if (!userInfoStr) {
return;
}
userInfo = JSON.parse(userInfoStr);
// 获取用户访问级别
const accessLevel = parseInt(userInfo.access_level);
// 根据用户访问级别控制开发选项的可见性
const developOption = this.shadowRoot.getElementById('developOption');
if (developOption) {
// 只有等级大于等于2的用户才可见
if (accessLevel < 2) {
developOption.classList.add('hidden');
} else {
developOption.classList.remove('hidden');
}
}
} catch (error) {
console.error('处理用户信息失败:', error);
}
}
}
customElements.define('main-toolbar', MainToolbar);