CHM_attendance/app/templates/admin/add_student.html
superlishunqin 3e6c8d353c SmartDSP
2025-06-12 00:38:27 +08:00

248 lines
11 KiB
HTML
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.

{% extends 'layout/base.html' %}
{% block title %}添加学生 - SmartDSP考勤管理系统{% endblock %}
{% block content %}
<div class="container-fluid mt-4">
<!-- 页面标题 -->
<div class="d-flex justify-content-between align-items-center mb-4">
<h1 class="h3 mb-0">
<i class="fas fa-user-plus me-2"></i>添加学生
</h1>
<a href="{{ url_for('admin.student_list') }}" class="btn btn-outline-secondary">
<i class="fas fa-arrow-left me-1"></i>返回学生列表
</a>
</div>
<!-- 添加学生表单 -->
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="card shadow">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<i class="fas fa-info-circle me-2"></i>学生基本信息
</h6>
</div>
<div class="card-body">
<form id="addStudentForm" method="POST">
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">学号 <span class="text-danger">*</span></label>
<input type="text" class="form-control" name="student_number" required
placeholder="请输入学号">
<div class="form-text">学号将作为登录账号使用</div>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">姓名 <span class="text-danger">*</span></label>
<input type="text" class="form-control" name="name" required
placeholder="请输入姓名">
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="mb-3">
<label class="form-label">性别 <span class="text-danger">*</span></label>
<select class="form-select" name="gender" required>
<option value="">请选择性别</option>
<option value="男"></option>
<option value="女"></option>
</select>
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<label class="form-label">年级 <span class="text-danger">*</span></label>
<input type="number" class="form-control" name="grade" required
min="2020" max="2030" placeholder="如2023">
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<label class="form-label">手机号</label>
<input type="tel" class="form-control" name="phone" maxlength="11"
pattern="1[3-9]\d{9}" placeholder="请输入11位手机号">
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">学院</label>
<input type="text" class="form-control" name="college"
placeholder="请输入学院名称">
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">专业</label>
<input type="text" class="form-control" name="major"
placeholder="请输入专业名称">
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">导师</label>
<input type="text" class="form-control" name="supervisor"
placeholder="请输入导师姓名">
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">学位类型</label>
<select class="form-select" name="degree_type">
<option value="">请选择学位类型</option>
<option value="专硕">专硕</option>
<option value="学硕">学硕</option>
<option value="学博">学博</option>
<option value="专博">专博</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">入学日期</label>
<input type="date" class="form-control" name="enrollment_date">
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">状态</label>
<select class="form-select" name="status">
<option value="在读" selected>在读</option>
<option value="毕业">毕业</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">初始密码</label>
<input type="password" class="form-control" name="password"
placeholder="默认为123456" value="123456">
<div class="form-text">学生可在登录后自行修改密码</div>
</div>
</div>
</div>
<hr class="my-4">
<div class="d-flex justify-content-end gap-2">
<a href="{{ url_for('admin.student_list') }}" class="btn btn-secondary">
<i class="fas fa-times me-1"></i>取消
</a>
<button type="submit" class="btn btn-success">
<i class="fas fa-save me-1"></i>保存学生信息
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script>
document.getElementById('addStudentForm').addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(this);
const data = Object.fromEntries(formData);
// 表单验证
if (!data.student_number || !data.name || !data.gender || !data.grade) {
alert('请填写所有必填项');
return;
}
// 验证手机号格式
if (data.phone && !/^1[3-9]\d{9}$/.test(data.phone)) {
alert('手机号格式不正确');
return;
}
// 禁用提交按钮
const submitBtn = this.querySelector('button[type="submit"]');
const originalText = submitBtn.innerHTML;
submitBtn.disabled = true;
submitBtn.innerHTML = '<i class="fas fa-spinner fa-spin me-1"></i>保存中...';
fetch('/admin/students/add', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => {
if (result.success) {
// 显示成功消息
const alertDiv = document.createElement('div');
alertDiv.className = 'alert alert-success alert-dismissible fade show';
alertDiv.innerHTML = `
<i class="fas fa-check-circle me-2"></i>${result.message}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
`;
// 插入到表单前面
const card = document.querySelector('.card-body');
card.insertBefore(alertDiv, card.firstChild);
// 3秒后跳转到学生列表
setTimeout(() => {
window.location.href = '/admin/students';
}, 2000);
} else {
// 显示错误消息
const alertDiv = document.createElement('div');
alertDiv.className = 'alert alert-danger alert-dismissible fade show';
alertDiv.innerHTML = `
<i class="fas fa-exclamation-triangle me-2"></i>${result.message}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
`;
const card = document.querySelector('.card-body');
card.insertBefore(alertDiv, card.firstChild);
// 恢复提交按钮
submitBtn.disabled = false;
submitBtn.innerHTML = originalText;
}
})
.catch(error => {
console.error('Error:', error);
alert('网络错误,请稍后重试');
// 恢复提交按钮
submitBtn.disabled = false;
submitBtn.innerHTML = originalText;
});
});
// 学号输入框失焦时检查是否已存在
document.querySelector('input[name="student_number"]').addEventListener('blur', function() {
const studentNumber = this.value.trim();
if (studentNumber) {
// 这里可以添加AJAX检查学号是否已存在的逻辑
// 为了简化,暂时不实现
}
});
</script>
{% endblock %}