Files
SharedClassManager/frontend/parent/password.php
canglan d6dec878bd feat: 多班级版 v2.0 - Go后端重写 + 43轮代码审查
- 后端从 Python FastAPI 重写为 Go Gin(端口 56789)
- 多班级完全隔离
- 超级管理员独立登录
- 课代表作业管理、排行榜分项排行
- 角色加减分上下限可配置
- 家长改密功能(可开关)
- 周度/月度重置功能
- MySQL 5.7 兼容
- 43轮代码审查+全部修复
- Apache 2.0 许可证
2026-06-22 10:06:10 +08:00

107 lines
3.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 多班级版班级管理系统 - 家长修改密码页
*
* 开发者: Canglan
* 联系方式: admin@sea-studio.top
* 版权归属: Sea Network Technology Studio
* 许可证: Apache License 2.0
*
* 版权所有 © Sea Network Technology Studio
*/
$page_title = '修改密码';
require_once __DIR__ . '/../config.php';
if (!isset($_SESSION['user_id']) || $_SESSION['user_type'] !== 'parent') {
header('Location: /index.php');
exit();
}
include __DIR__ . '/../includes/header.php';
?>
<div class="nav">
<a href="/parent/dashboard.php" class="nav-item">首页</a>
<a href="/parent/history.php" class="nav-item">历史记录</a>
<a href="/parent/attendance.php" class="nav-item">考勤记录</a>
<a href="/parent/password.php" class="nav-item active">修改密码</a>
</div>
<div class="container">
<div class="card">
<div class="card-title">修改密码</div>
<div id="featureDisabled" style="display:none;">
<p style="text-align:center;color:#999;padding:30px 0;">该功能暂未开放,请联系班主任启用"家长改密"功能开关。</p>
</div>
<form id="passwordForm" style="display:none;">
<div class="form-group">
<label>原密码 <span style="color:red;">*</span></label>
<input type="password" id="oldPassword" required>
</div>
<div class="form-group">
<label>新密码 <span style="color:red;">*</span></label>
<input type="password" id="newPassword" required>
<small>密码长度6-20位需包含大写字母、小写字母、数字、特殊符号中的至少3种</small>
</div>
<div class="form-group">
<label>确认新密码 <span style="color:red;">*</span></label>
<input type="password" id="confirmPassword" required>
</div>
<button type="submit" class="btn btn-primary">确认修改</button>
</form>
</div>
</div>
<script>
async function checkFeature() {
var res = await apiGet('/api/class/features');
if (res && res.success && res.data && res.data.features) {
var val = res.data.features.parent_password_change_enabled;
var enabled = val === 1 || val === '1' || val === true;
if (enabled) {
document.getElementById('passwordForm').style.display = '';
} else {
document.getElementById('featureDisabled').style.display = '';
}
} else {
document.getElementById('featureDisabled').style.display = '';
}
}
document.getElementById('passwordForm').addEventListener('submit', async (e) => {
e.preventDefault();
var oldPassword = document.getElementById('oldPassword').value;
var newPassword = document.getElementById('newPassword').value;
var confirmPassword = document.getElementById('confirmPassword').value;
if (newPassword !== confirmPassword) {
showToast('两次输入的新密码不一致', 'error');
return;
}
if (newPassword.length < 6 || newPassword.length > 20) {
showToast('密码长度需为6-20位', 'error');
return;
}
var res = await apiPost('/api/parent/password', {
old_password: oldPassword,
new_password: newPassword
});
if (res && res.success) {
showToast('密码修改成功,请重新登录');
setTimeout(function() { logout(); }, 1500);
} else {
showToast(res && res.message ? res.message : '密码修改失败', 'error');
}
});
document.addEventListener('DOMContentLoaded', checkFeature);
</script>
<script src="/assets/js/parent.js"></script>
<?php include __DIR__ . '/../includes/footer.php'; ?>