You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.9 KiB

<!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 rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<div class="container">
<header>
<h1>智慧点名系统</h1>
<p>软工K班 - 结对编程项目</p>
</header>
<nav class="main-nav">
<a href="/" class="nav-item active">首页</a>
<a href="/roll_call" class="nav-item">随机点名</a>
<a href="/scores" class="nav-item">积分管理</a>
<a href="/import" class="nav-item">导入学生</a> <!-- 新增导入链接 -->
</nav>
<main class="dashboard">
<div class="stats-grid">
<div class="stat-card">
<h3>今日点名次数</h3>
<div class="stat-number" id="todayCalls">0</div>
</div>
<div class="stat-card">
<h3>班级总人数</h3>
<div class="stat-number" id="totalStudents">0</div>
</div>
<div class="stat-card">
<h3>平均积分</h3>
<div class="stat-number" id="avgScore">0</div>
</div>
</div>
<div class="quick-actions">
<h2>快速操作</h2>
<div class="action-buttons">
<a href="/roll_call" class="btn btn-primary">开始点名</a>
<a href="/scores" class="btn btn-secondary">查看积分</a>
<a href="/import" class="btn btn-info">导入学生</a> <!-- 新增导入按钮 -->
<button onclick="exportScores()" class="btn btn-success">导出积分</button>
</div>
</div>
<div class="recent-activity">
<h2>最近点名记录</h2>
<div id="recentRecords" class="records-list">
<!-- 动态加载记录 -->
</div>
</div>
</main>
</div>
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
<script>
// 初始化首页数据
document.addEventListener('DOMContentLoaded', function() {
loadDashboardData();
});
function loadDashboardData() {
// 模拟数据
document.getElementById('todayCalls').textContent = '5';
document.getElementById('totalStudents').textContent = '35';
document.getElementById('avgScore').textContent = '12.5';
// 加载最近记录
fetch('/api/roll_call/history')
.then(response => response.json())
.then(data => {
if (data.success) {
displayRecentRecords(data.data);
}
});
}
function displayRecentRecords(records) {
const container = document.getElementById('recentRecords');
if (records.length === 0) {
container.innerHTML = '<p>暂无记录</p>';
return;
}
container.innerHTML = records.map(record => `
<div class="record-item">
<span class="student-name">${record.student_name}</span>
<span class="call-time">${record.call_time}</span>
${record.score_change ? `<span class="score-change ${record.score_change > 0 ? 'positive' : 'negative'}">${record.score_change > 0 ? '+' : ''}${record.score_change}</span>` : ''}
</div>
`).join('');
}
function exportScores() {
window.open('/api/scores/export?class_name=软工K班');
}
</script>
</body>
</html>