<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>企业级管理系统</title>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/bootstrap-icons/1.11.0/font/bootstrap-icons.min.css">
<style>
:root {
--bs-primary: #2c3e50;
--bs-secondary: #3498db;
}
/* 页面切换动画 */
.page-container {
opacity: 0;
transform: translateY(20px);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.page-active {
opacity: 1;
transform: translateY(0);
}
/* 侧边栏优化 */
.main-sidebar {
background: var(--bs-primary);
border-right: 1px solid rgba(255,255,255,0.1);
min-height: 100vh;
transition: transform 0.3s ease;
}
/* 移动端优化 */
@media (max-width: 768px) {
.offcanvas-start {
width: 280px;
}
}
</style>
</head>
<body class="bg-light">
<div class="container-fluid vh-100">
<div class="row h-100">
<!-- 侧边栏 -->
<nav class="col-md-3 col-xl-2 main-sidebar d-none d-md-block">
<div class="pt-4 px-3">
<h4 class="text-white mb-4"><i class="bi bi-stack"></i> 管理系统</h4>
<ul class="nav flex-column gap-2" id="mainNav">
<li class="nav-item">
<a class="nav-link active" href="#dashboard" data-page="dashboard">
<i class="bi bi-speedometer2 me-2"></i>数据看板
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#users" data-page="users">
<i class="bi bi-people me-2"></i>用户管理
</a>
</li>
</ul>
</div>
</nav>
<!-- 主内容区 -->
<main class="col-md-9 col-xl-10 p-4">
<!-- 仪表盘页面 -->
<div id="dashboard" class="page-container page-active">
<div class="data-card p-4 mb-4">
<h5 class="mb-4"><i class="bi bi-bar-chart-line me-2"></i>数据概览</h5>
<!-- 图表内容 -->
</div>
</div>
<!-- 用户管理页面 -->
<div id="users" class="page-container">
<div class="data-card p-4">
<h5 class="mb-4"><i class="bi bi-table me-2"></i>用户列表</h5>
<table class="table table-hover">
<thead>
<tr>
<th>姓名</th>
<th>角色</th>
<th>操作</th>
</tr>
</thead>
<tbody id="userList"></tbody>
</table>
</div>
</div>
</main>
</div>
</div>
<!-- 页面切换脚本 -->
<script>
// 页面切换功能
function switchPage(targetPage) {
// 隐藏所有页面
document.querySelectorAll('.page-container').forEach(page => {
page.classList.remove('page-active');
});
// 显示目标页面
const activePage = document.getElementById(targetPage);
if (activePage) {
activePage.classList.add('page-active');
}
// 更新导航状态
document.querySelectorAll('#mainNav .nav-link').forEach(link => {
link.classList.remove('active');
if (link.getAttribute('data-page') === targetPage) {
link.classList.add('active');
}
});
}
// 路由监听
window.addEventListener('hashchange', () => {
const page = window.location.hash.replace('#', '');
switchPage(page || 'dashboard');
});
// 初始化路由
window.addEventListener('DOMContentLoaded', () => {
const initialPage = window.location.hash.replace('#', '') || 'dashboard';
switchPage(initialPage);
});
</script>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
</body>
</html>
class PageRouter {
constructor() {
this.contentContainer = document.getElementById('main-content');
this.initNavigation();
this.initHistory();
}
// 初始化导航事件:ml-citation{ref="6,7" data="citationList"}
initNavigation() {
document.querySelectorAll('[data-page]').forEach(link => {
link.addEventListener('click', e => {
e.preventDefault();
const pageName = e.target.dataset.page;
this.loadPage(pageName);
history.pushState({ page: pageName }, '', `#${pageName}`);
});
});
}
// 加载页面内容:ml-citation{ref="1,5" data="citationList"}
async loadPage(pageName) {
try {
const response = await fetch(`pages/${pageName}.html`);
const html = await response.text();
this.contentContainer.innerHTML = html;
this.updateActiveNav(pageName);
} catch (error) {
this.contentContainer.innerHTML = '<p>页面加载失败</p>';
}
}
// 更新导航状态:ml-citation{ref="6" data="citationList"}
updateActiveNav(pageName) {
document.querySelectorAll('[data-page]').forEach(link => {
link.classList.toggle('active', link.dataset.page === pageName);
});
}
// 处理浏览器历史:ml-citation{ref="7" data="citationList"}
initHistory() {
window.addEventListener('popstate', (e) => {
const page = e.state?.page || 'dashboard';
this.loadPage(page);
});
// 初始加载
const initialPage = window.location.hash.replace('#', '') || 'dashboard';
this.loadPage(initialPage);
}
}
// 初始化路由
new PageRouter();