Files
WebWork/frontend/views/admin/dashboard.html
祀梦 bcf2c71fad refactor(frontend): 重构前端目录结构并优化认证流程
将前端文件从html目录迁移到views目录,按功能模块组织
重构认证中间件和路由处理,简化页面权限控制
更新静态资源引用路径,统一使用/public前缀
添加学生仪表板页面,优化移动端显示
移除旧版html和js文件,更新样式和脚本
2025-12-21 22:07:23 +08:00

343 lines
15 KiB
HTML
Raw Blame History

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>摮衣<EFBFBD><EFBFBD>鞟貍蝞∠<EFBFBD>蝟餌<EFBFBD> - 蝞∠<E89D9E><E288A0>䀝貌銵冽踎</title>
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
</head>
</head>
<body>
<!-- 憿園<E686BF>撖潸⏛<E6BDB8>?-->
<nav class="navbar">
<div class="navbar-brand">
<i class="fas fa-graduation-cap"></i>
<span>XX摮行嵗<EFBFBD>鞟貍蝞∠<EFBFBD>蝟餌<EFBFBD></span>
</div>
<div class="navbar-menu">
<a href="/" class="btn btn-secondary">
<i class="fas fa-home"></i> 銝駁△
</a>
<div class="navbar-user">
<span class="user-name" id="userName">蝞∠<EFBFBD><EFBFBD>?/span>
<button id="logoutBtn" class="btn btn-primary">
<i class="fas fa-sign-out-alt"></i> <20><><EFBFBD>? </button>
</div>
</div>
</nav>
<!-- 隞芾”<E88ABE>踹捆<E8B8B9>?-->
<div class="dashboard-container">
<!-- 撌虫儒靘扯器<E689AF>?-->
<aside class="sidebar">
<div class="sidebar-header">
<div class="user-info">
<div class="user-avatar">
<i class="fas fa-user-shield"></i>
</div>
<div class="user-details">
<h3 id="adminName">蝞∠<EFBFBD><EFBFBD>?/h3>
<p>蝟餌<EFBFBD>蝞∠<EFBFBD><EFBFBD>?| <20><><EFBFBD>嚗?span id="adminRole">頞<>漣蝞∠<E89D9E><E288A0>?/span></p>
</div>
</div>
</div>
<ul class="sidebar-menu">
<li>
<a href="#" class="active">
<i class="fas fa-tachometer-alt"></i>
<span>隞芾”<EFBFBD>?/span>
</a>
</li>
<li>
<a href="/admin/user_management">
<i class="fas fa-users"></i>
<span><EFBFBD><EFBFBD>蝞∠<EFBFBD></span>
</a>
</li>
<li>
<a href="/admin/student_management">
<i class="fas fa-user-graduate"></i>
<span>摮衣<EFBFBD>蝞∠<EFBFBD></span>
</a>
</li>
<li>
<a href="teacher_management.html">
<i class="fas fa-chalkboard-teacher"></i>
<span><EFBFBD><EFBFBD>蝞∠<EFBFBD></span>
</a>
</li>
<li>
<a href="grade_statistics.html">
<i class="fas fa-chart-bar"></i>
<span><EFBFBD>鞟貍蝏蠘恣</span>
</a>
</li>
<li>
<a href="system_settings.html">
<i class="fas fa-cog"></i>
<span>蝟餌<EFBFBD>霈曄蔭</span>
</a>
</li>
<li>
<a href="data_export.html">
<i class="fas fa-download"></i>
<span><EFBFBD>唳旿撖澆枂</span>
</a>
</li>
<li>
<a href="audit_log.html">
<i class="fas fa-history"></i>
<span><EFBFBD><EFBFBD><EFBFBD><EFBFBD></span>
</a>
</li>
</ul>
</aside>
<!-- 銝餃<E98A9D>摰孵躹 -->
<main class="main-content">
<div class="content-header">
<div>
<h1 class="page-title">蝞∠<EFBFBD><EFBFBD>䀝貌銵冽踎</h1>
<div class="breadcrumb">
<a href="/">銝駁△</a>
<i class="fas fa-chevron-right"></i>
<span>蝞∠<EFBFBD><EFBFBD>䀝貌銵冽踎</span>
</div>
</div>
<div class="current-time" id="currentTime"></div>
</div>
<!-- 蝏蠘恣<E8A098><EFBFBD> -->
<div class="stats-grid">
<div class="stat-card">
<div class="stat-icon users">
<i class="fas fa-users"></i>
</div>
<div class="stat-content">
<div class="stat-value" id="totalUsers">1,248</div>
<div class="stat-label"><EFBFBD>餌鍂<EFBFBD>瑟㺭</div>
<div class="stat-change positive">
<i class="fas fa-arrow-up"></i> 12 <20>砍𪂹<E7A08D><EFBFBD>
</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon students">
<i class="fas fa-user-graduate"></i>
</div>
<div class="stat-content">
<div class="stat-value" id="totalStudents">3,567</div>
<div class="stat-label">摮衣<EFBFBD><EFBFBD>餅㺭</div>
<div class="stat-change positive">
<i class="fas fa-arrow-up"></i> 45 <20>砍𪂹<E7A08D><EFBFBD>
</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon teachers">
<i class="fas fa-chalkboard-teacher"></i>
</div>
<div class="stat-content">
<div class="stat-value" id="totalTeachers">128</div>
<div class="stat-label"><EFBFBD><EFBFBD><EFBFBD>餅㺭</div>
<div class="stat-change">
<i class="fas fa-minus"></i> <20><EFBFBD><E683A9>? </div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon courses">
<i class="fas fa-book"></i>
</div>
<div class="stat-content">
<div class="stat-value" id="totalCourses">89</div>
<div class="stat-label">霂曄<EFBFBD><EFBFBD>餅㺭</div>
<div class="stat-change positive">
<i class="fas fa-arrow-up"></i> 3 <20>砍𪂹<E7A08D><EFBFBD>
</div>
</div>
</div>
</div>
<!-- <20><EFBFBD><E8A098><EFBFBD> -->
<div class="function-grid">
<div class="function-card" onclick="window.location.href='user_management.html'">
<div class="function-icon">
<i class="fas fa-users"></i>
</div>
<h3 class="function-title"><EFBFBD><EFBFBD>蝞∠<EFBFBD></h3>
<p class="function-description">
蝞∠<E89D9E><E288A0><EFBFBD><EFBFBD>厩鍂<E58EA9>瑁揭<E79181><EFBFBD><E79880><EFBFBD>𡠺瘛餃<E7989B><E9A483><EFBFBD><EFBFBD>颲㻫<E9A2B2><E3BBAB><EFBFBD><EFBFBD>斤鍂<E696A4><EFBFBD>霈曄蔭<E69B84><EFBFBD>閫坿𠧧<E59DBF><EFBFBD><E5B395><EFBFBD>? </p>
<button class="btn btn-primary">餈𥕦<EFBFBD>蝞∠<EFBFBD></button>
</div>
<div class="function-card" onclick="window.location.href='student_management.html'">
<div class="function-icon">
<i class="fas fa-user-graduate"></i>
</div>
<h3 class="function-title">摮衣<EFBFBD>蝞∠<EFBFBD></h3>
<p class="function-description">
蝞∠<E89D9E>摮衣<E691AE>靽⊥<E99DBD><EFBFBD><E59A97><EFBFBD>砍郎蝐滨恣<E6BBA8><E681A3><EFBFBD><EFBFBD>号蝥批<E89DA5><E689B9><EFBFBD><E6BABB><EFBFBD>舐輕<E88890><EFBFBD><E69687><EFBFBD>撖澆<E69296>撖澆枂<E6BE86>? </p>
<button class="btn btn-primary">餈𥕦<EFBFBD>蝞∠<EFBFBD></button>
</div>
<div class="function-card" onclick="window.location.href='teacher_management.html'">
<div class="function-icon">
<i class="fas fa-chalkboard-teacher"></i>
</div>
<h3 class="function-title"><EFBFBD><EFBFBD>蝞∠<EFBFBD></h3>
<p class="function-description">
蝞∠<E89D9E><E288A0><EFBFBD>靽⊥<E99DBD><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD><E692A3><EFBFBD><EFBFBD><E6BABB>紋蝔见<E89D94><E8A781><EFBFBD><E9899D><EFBFBD><EFBFBD>鞱挽蝵桀<E89DB5>蝏拇<E89D8F><E68B87><EFBFBD><EFBFBD>? </p>
<button class="btn btn-primary">餈𥕦<EFBFBD>蝞∠<EFBFBD></button>
</div>
<div class="function-card" onclick="window.location.href='grade_statistics.html'">
<div class="function-icon">
<i class="fas fa-chart-bar"></i>
</div>
<h3 class="function-title"><EFBFBD>鞟貍蝏蠘恣</h3>
<p class="function-description">
<20><EFBFBD><E4BAA6>冽嵗<E586BD>鞟貍蝏蠘恣嚗𣬚<E59A97><F0A3AC9A>𣂼<EFBFBD><F0A382BC>鞉𥁒<E99E89>𠺪<EFBFBD><F0A0BAAA><EFBFBD><E88880>曇”撅閧內<E996A7>峕㺭<E5B395>桀紡<E6A180><EFBFBD>? </p>
<button class="btn btn-primary"><EFBFBD><EFBFBD>蝏蠘恣</button>
</div>
</div>
<!-- 蝟餌<E89D9F><E9A48C><EFBFBD>?-->
<div class="system-status">
<h2 class="section-title">
<i class="fas fa-server"></i>
蝟餌<E89D9F><E9A48C><EFBFBD>? </h2>
<div class="status-list">
<div class="status-item">
<div class="status-indicator online"></div>
<div>
<div class="status-label"><EFBFBD>唳旿摨𤘪<EFBFBD><EFBFBD>?/div>
<div class="status-value">餈鞱<EFBFBD><EFBFBD>虜 | <20><EFBFBD><E6BB9A>園𡢿: 12ms</div>
</div>
</div>
<div class="status-item">
<div class="status-indicator online"></div>
<div>
<div class="status-label">Web<EFBFBD>滚𦛚<EFBFBD>?/div>
<div class="status-value">餈鞱<EFBFBD><EFBFBD>虜 | <20>函瑪<E587BD><EFBFBD>: 156</div>
</div>
</div>
<div class="status-item">
<div class="status-indicator online"></div>
<div>
<div class="status-label"><EFBFBD><EFBFBD>辣摮睃<EFBFBD></div>
<div class="status-value">雿輻鍂<EFBFBD>? 65% | <20><EFBFBD>: 35GB</div>
</div>
</div>
<div class="status-item">
<div class="status-indicator warning"></div>
<div>
<div class="status-label"><EFBFBD><EFBFBD>滚𦛚</div>
<div class="status-value">銝𦠜活憭<EFBFBD>遢: 2憭拙<E686AD> | 撱箄悅蝡见朖憭<E69C96></div>
</div>
</div>
</div>
</div>
<!-- <20><>餈烐暑<E78390>?-->
<div class="recent-activities">
<h2 class="section-title">
<i class="fas fa-history"></i>
<20><>餈烐暑<E78390>? </h2>
<ul class="activity-list">
<li class="activity-item">
<div class="activity-icon">
<i class="fas fa-user-plus"></i>
</div>
<div class="activity-content">
<div class="activity-title"><EFBFBD><EFBFBD>摮衣<EFBFBD><EFBFBD><EFBFBD></div>
<div class="activity-time">10<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| <20><EFBFBD>鈭? 蝞∠<E89D9E><E288A0>?/div>
</div>
</li>
<li class="activity-item">
<div class="activity-icon">
<i class="fas fa-edit"></i>
</div>
<div class="activity-content">
<div class="activity-title">靽格㺿<EFBFBD><EFBFBD>靽⊥<EFBFBD></div>
<div class="activity-time">1撠𤩺𧒄<EFBFBD>?| <20><EFBFBD>鈭? 蝞∠<E89D9E><E288A0>?/div>
</div>
</li>
<li class="activity-item">
<div class="activity-icon">
<i class="fas fa-chart-bar"></i>
</div>
<div class="activity-content">
<div class="activity-title"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鞟貍蝏蠘恣<EFBFBD><EFBFBD></div>
<div class="activity-time">3撠𤩺𧒄<EFBFBD>?| <20><EFBFBD>鈭? 蝟餌<E89D9F></div>
</div>
</li>
<li class="activity-item">
<div class="activity-icon">
<i class="fas fa-download"></i>
</div>
<div class="activity-content">
<div class="activity-title">撖澆枂<EFBFBD><EFBFBD><EFBFBD>唳旿</div>
<div class="activity-time">5撠𤩺𧒄<EFBFBD>?| <20><EFBFBD>鈭? 蝞∠<E89D9E><E288A0>?/div>
</div>
</li>
<li class="activity-item">
<div class="activity-icon">
<i class="fas fa-cog"></i>
</div>
<div class="activity-content">
<div class="activity-title">蝟餌<EFBFBD>霈曄蔭<EFBFBD>湔鰵</div>
<div class="activity-time">1憭拙<EFBFBD> | <20><EFBFBD>鈭? 蝞∠<E89D9E><E288A0>?/div>
</div>
</li>
</ul>
</div>
</main>
</div>
<script>
// <20>湔鰵敶枏<E695B6><E69E8F>園𡢿
function updateCurrentTime() {
const now = new Date();
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
};
document.getElementById('currentTime').textContent = now.toLocaleDateString('zh-CN', options);
}
// 憿菟𢒰<E88F9F>㰘蝸<E3B098><EFBFBD>憪见<E686AA>
document.addEventListener('DOMContentLoaded', function() {
updateCurrentTime();
setInterval(updateCurrentTime, 1000);
// <20><><EFBFBD>箇蒈敶? document.getElementById('logoutBtn').addEventListener('click', function() {
if (confirm('蝖桀<E89D96><EFBFBD><E996AC><EFBFBD><EFBFBD>箇蒈敶訫<E695B6>嚗?)) {
// 皜<><EFBFBD><EFBFBD><E9A483><EFBFBD>? localStorage.removeItem('token');
localStorage.removeItem('userRole');
localStorage.removeItem('userInfo');
// 頝唾蓮<E594BE>啁蒈敶閖△<E99696>? window.location.href = 'login.html';
}
});
// <20>㰘蝸<E3B098><EFBFBD>靽⊥<E99DBD>
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}');
if (userInfo.name) {
document.getElementById('adminName').textContent = userInfo.name;
document.getElementById('userName').textContent = userInfo.name;
}
});
</script>
</body>
</html>