feat(学生): 添加成绩分析功能及密码修改功能
- 新增成绩分析页面,包含GPA趋势图、成绩分布图和学分进度 - 实现学生密码修改功能,包括前端表单和后端验证逻辑 - 添加课程类别分析功能,展示不同类别课程的GPA表现 - 优化学生仪表板和课程页面导航链接 - 增加数据加载状态提示和错误处理
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user