XNSim/XNSimHtml/main.html

463 lines
16 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XNSim - 主页面</title>
<link rel="icon" type="image/png" href="assets/icons/XNSim.png">
<link rel="shortcut icon" type="image/png" href="assets/icons/XNSim.png">
<link rel="stylesheet" href="style.css">
<script src="components/main-toolbar.js"></script>
<script src="components/sub-toolbar.js"></script>
<script src="components/user-info.js"></script>
<script src="components/tabs-container.js"></script>
<script src="components/content-area.js"></script>
<script src="components/overview-page.js"></script>
<script src="components/update-history.js"></script>
<script src="components/run-log.js"></script>
<script src="components/system-info.js"></script>
<script src="components/help-component.js"></script>
<script src="components/run-env-config.js" type="module"></script>
<script src="components/model-config.js" type="module"></script>
<script src="components/service-config.js" type="module"></script>
<script src="components/interface-config.js"></script>
<script src="components/run-test.js"></script>
<script src="components/run-simulation.js"></script>
<script src="components/simulation-monitor.js"></script>
<script src="components/model-monitor.js"></script>
<script src="components/data-monitor.js"></script>
<script src="components/data-collection.js"></script>
<script src="components/profile-center.js"></script>
<script src="components/user-management.js"></script>
<script src="components/model-development.js"></script>
<script src="components/service-development.js"></script>
<style>
.icon {
width: 24px;
height: 24px;
display: inline-block;
vertical-align: middle;
margin-bottom: 5px;
}
.icon-small {
width: 16px;
height: 16px;
}
/* 用户等级图标样式 */
.user-level-icon {
width: 20px;
height: 20px;
margin-right: 8px;
vertical-align: middle;
}
/* 主要内容区域样式 */
.main-content {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
height: 100vh;
padding: 0;
margin: 0;
overflow: hidden;
}
/* 内容包装器样式 */
.content-wrapper {
display: flex;
height: 100vh;
background: #fff;
}
/* 主工具栏样式 */
.main-toolbar {
width: 80px;
background: linear-gradient(180deg, #667eea 0%, #764ba2 100%);
display: flex;
flex-direction: column;
transition: width 0.3s ease;
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
}
/* 子工具栏样式 */
.sub-toolbar {
width: 200px;
background: linear-gradient(180deg, #7986E7 0%, #8B6DB3 100%);
position: relative;
transition: width 0.3s ease;
box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
}
.sub-toolbar.collapsed {
width: 0;
}
.sub-toolbar-content {
width: 200px;
height: 100%;
overflow-y: auto;
overflow-x: hidden;
padding: 10px 0;
}
.sub-toolbar.collapsed .sub-toolbar-content {
display: none;
}
/* 主容器样式 */
.main-container {
width: 100%;
height: 100vh;
overflow: hidden;
}
/* 内容头部样式 */
.content-header {
display: flex;
justify-content: space-between;
align-items: center;
height: 54px;
background: white;
border-bottom: 1px solid #e0e0e0;
padding: 0 16px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
.breadcrumb {
display: flex;
align-items: center;
color: #000000;
font-size: 20px;
font-weight: 1000;
height: 100%;
gap: 8px;
}
.breadcrumb .icon-small {
margin-right: 0;
margin-left: 0;
width: 20px;
height: 20px;
}
/* 添加新的样式 */
.header-right {
display: flex;
align-items: center;
gap: 16px;
}
/* 重置body样式 */
body {
margin: 0;
padding: 0;
overflow: hidden;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 15px;
}
/* 确保内容区域完全填充 */
.main-content > * {
width: 100%;
}
/* 内容区域容器 */
.content-area-container {
display: flex;
flex-direction: column;
flex: 1;
overflow: hidden;
}
tabs-container {
flex-shrink: 0;
}
content-area {
flex: 1;
overflow: hidden;
}
</style>
</head>
<body>
<div class="main-container">
<div class="content-wrapper">
<main-toolbar></main-toolbar>
<sub-toolbar></sub-toolbar>
<main class="main-content">
<div class="content-header">
<div class="breadcrumb">
<img src="assets/icons/png/con_b.png" alt="主页 / 概览" class="icon-small">
<span id="currentPath">主页 / 概览</span>
</div>
<div class="header-right">
<header-tools></header-tools>
<user-info></user-info>
</div>
</div>
<div class="content-area-container">
<tabs-container></tabs-container>
<content-area></content-area>
</div>
</main>
</div>
</div>
<script src="components/header-tools.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const tabsContainer = document.querySelector('tabs-container');
const contentArea = document.querySelector('content-area');
// 初始化时创建概览标签页并加载概览内容
tabsContainer.createTab('overview', '概览', 'dashboard', '主页', 'home');
contentArea.loadContent('overview');
// 监听主工具栏选择事件
document.querySelector('main-toolbar').addEventListener('tool-selected', function(e) {
const { tool, text } = e.detail;
document.querySelector('sub-toolbar').setAttribute('current-tool', tool);
// 当选择主页时,显示概览
if (tool === 'home') {
tabsContainer.createTab('overview', '概览', 'dashboard', '主页', 'home');
}
});
// 监听子工具栏选择事件
document.querySelector('sub-toolbar').addEventListener('sub-item-selected', function(e) {
const { parent, text, icon } = e.detail;
const parentText = document.querySelector(`main-toolbar`).shadowRoot.querySelector(`[data-tool="${parent}"] span`).textContent;
updateBreadcrumb(parentText, text);
updateContent(text, icon, parentText, parent);
});
// 监听用户菜单动作
document.querySelector('user-info').addEventListener('menu-action', function(e) {
const { action } = e.detail;
handleMenuAction(action);
});
// 监听标签页激活事件
tabsContainer.addEventListener('tab-activated', function(e) {
const { id, parentText, title, parentTool, isTabSwitch } = e.detail;
// 更新面包屑导航
updateBreadcrumb(parentText, title);
// 只有在真正的标签切换时才加载内容
if (isTabSwitch) {
contentArea.loadContent(id);
}
// 同步更新面包屑导航
const breadcrumbIcon = document.querySelector('.breadcrumb .icon-small');
if (breadcrumbIcon) {
const iconName = getIconNameForTitle(title, parentTool);
breadcrumbIcon.src = `assets/icons/png/${iconName}_b.png`;
breadcrumbIcon.alt = `${parentText} / ${title}`;
}
});
// 监听标签页关闭事件
tabsContainer.addEventListener('tab-closed', function(e) {
const { id } = e.detail;
// 清除关闭标签页的内容缓存
contentArea.clearCache(id);
});
});
function handleMenuAction(action) {
const contentArea = document.querySelector('content-area');
const tabsContainer = document.querySelector('tabs-container');
switch(action) {
case 'profile':
tabsContainer.createTab('profile', '个人中心', 'user', '系统', 'system');
contentArea.loadContent('profile');
break;
case 'users':
tabsContainer.createTab('users', '用户管理', 'users', '系统', 'system');
contentArea.loadContent('users');
break;
}
}
function updateBreadcrumb(mainMenu, subMenu) {
const currentPath = document.getElementById('currentPath');
currentPath.textContent = subMenu ? `${mainMenu} / ${subMenu}` : mainMenu;
}
function updateContent(title, icon, parentText, parentTool) {
const tabsContainer = document.querySelector('tabs-container');
const contentArea = document.querySelector('content-area');
if (title === '概览') {
// 直接激活第一个标签页(概览标签页)
const firstTab = tabsContainer.shadowRoot.querySelector('.tab');
if (firstTab) {
tabsContainer.activateTab(firstTab.getAttribute('data-tab'));
}
return;
}
// 特殊处理更新记录标签页
if (title === '更新记录') {
const id = 'update-history';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理运行日志标签页
if (title === '运行日志') {
const id = 'run-log';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理系统信息标签页
if (title === '系统信息') {
const id = 'system-info';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理帮助标签页
if (title === '帮助') {
const id = 'help';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理运行环境配置标签页
if (title === '运行环境配置') {
const id = 'run-env-config';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理模型配置标签页
if (title === '模型配置') {
const id = 'model-config';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理服务配置标签页
if (title === '服务配置') {
const id = 'service-config';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理接口配置标签页
if (title === '接口配置') {
const id = 'interface-config';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理模型开发标签页
if (title === '模型开发') {
const id = 'model-development';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理服务开发标签页
if (title === '服务开发') {
const id = 'service-development';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理运行测试标签页
if (title === '运行测试') {
const id = 'run-test';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理运行仿真标签页
if (title === '运行仿真') {
const id = 'run-simulation';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理仿真监控标签页
if (title === '仿真监控') {
const id = 'simulation-monitor';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理模型监控标签页
if (title === '模型监控') {
const id = 'model-monitor';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理数据监控标签页
if (title === '数据监控') {
const id = 'data-monitor';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理数据采集标签页
if (title === '数据采集') {
const id = 'data-collection';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理个人中心标签页
if (title === '个人中心') {
const id = 'profile';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 处理用户管理标签页
if (title === '用户管理') {
const id = 'users';
tabsContainer.createTab(id, title, icon, parentText, parentTool);
return;
}
// 默认情况下使用标题转换为ID
const id = title.toLowerCase().replace(/\s+/g, '-');
tabsContainer.createTab(id, title, icon, parentText, parentTool);
}
// 根据标题和父工具获取图标名称的辅助函数
function getIconNameForTitle(title, parentTool) {
const iconMap = {
'概览': 'dashboard',
'更新记录': 'clock',
'运行日志': 'file',
'系统信息': 'server',
'帮助': 'help',
'运行环境配置': 'chip',
'模型配置': 'cube',
'服务配置': 'settings',
'接口配置': 'plug',
'运行测试': 'flask',
'运行仿真': 'rocket',
'仿真监控': 'desktop',
'模型监控': 'cubes',
'数据监控': 'chart-bar',
'数据采集': 'database',
'个人中心': 'user',
'用户管理': 'users',
'模型开发': 'cube',
'服务开发': 'settings'
};
return iconMap[title] || parentTool || 'con';
}
</script>
</body>
</html>