feat(学生): 添加成绩分析功能及密码修改功能

- 新增成绩分析页面,包含GPA趋势图、成绩分布图和学分进度
- 实现学生密码修改功能,包括前端表单和后端验证逻辑
- 添加课程类别分析功能,展示不同类别课程的GPA表现
- 优化学生仪表板和课程页面导航链接
- 增加数据加载状态提示和错误处理
This commit is contained in:
祀梦
2025-12-22 21:07:21 +08:00
parent ac6029dac8
commit 16802c85e5
13 changed files with 819 additions and 14 deletions

View File

@@ -201,13 +201,13 @@
</a>
</div>
<div class="nav-item">
<a href="/student/dashboard#stats-section" class="nav-link">
<a href="/student/grade-analysis" class="nav-link">
<i class="fas fa-chart-line"></i>
<span>成绩分析</span>
</a>
</div>
<div class="nav-item">
<a href="#" class="nav-link active">
<a href="/student/profile" class="nav-link active">
<i class="fas fa-user"></i>
<span>个人中心</span>
</a>
@@ -285,21 +285,21 @@
<div class="mb-3">
<label class="form-label">原密码</label>
<input type="password" class="form-control" placeholder="请输入原密码">
<input type="password" class="form-control" id="oldPassword" placeholder="请输入原密码">
</div>
<div class="row mb-4">
<div class="col-md-6">
<label class="form-label">新密码</label>
<input type="password" class="form-control" placeholder="请输入新密码">
<input type="password" class="form-control" id="newPassword" placeholder="请输入新密码">
</div>
<div class="col-md-6">
<label class="form-label">确认新密码</label>
<input type="password" class="form-control" placeholder="再次输入新密码">
<input type="password" class="form-control" id="confirmPassword" placeholder="再次输入新密码">
</div>
</div>
<div class="text-end">
<button type="button" class="btn btn-primary px-4" onclick="alert('修改密码功能暂未开放')">
<button type="button" class="btn btn-primary px-4" id="savePasswordBtn">
<i class="fas fa-save me-1"></i> 保存更改
</button>
</div>
@@ -341,6 +341,56 @@
};
updateTime();
setInterval(updateTime, 1000);
// 修改密码逻辑
const savePasswordBtn = document.getElementById('savePasswordBtn');
if (savePasswordBtn) {
savePasswordBtn.addEventListener('click', async () => {
const oldPassword = document.getElementById('oldPassword').value;
const newPassword = document.getElementById('newPassword').value;
const confirmPassword = document.getElementById('confirmPassword').value;
if (!oldPassword || !newPassword || !confirmPassword) {
alert('请填写所有密码字段');
return;
}
if (newPassword !== confirmPassword) {
alert('两次输入的新密码不一致');
return;
}
if (newPassword.length < 6) {
alert('新密码长度至少为 6 位');
return;
}
try {
const response = await fetch('/api/auth/update-password', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ oldPassword, newPassword })
});
const result = await response.json();
if (result.success) {
alert('密码修改成功,请重新登录');
// 登出并跳转到登录页
fetch('/api/auth/logout', { method: 'POST' })
.then(() => {
window.location.href = '/login';
});
} else {
alert(result.message || '修改失败');
}
} catch (error) {
console.error('Update password error:', error);
alert('网络错误,请稍后再试');
}
});
}
});
</script>
</body>