111 lines
5.2 KiB
HTML
111 lines
5.2 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}班级详情 - 学生课程管理系统{% endblock %}
|
|
{% block content %}
|
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
<h4><i class="bi bi-grid"></i> 班级详情 - {{ class_.name }}</h4>
|
|
<div>
|
|
<a href="{{ url_for('class_attendance', class_id=class_.id) }}" class="btn btn-info"><i class="bi bi-clipboard-check"></i> 录入考勤</a>
|
|
<a href="{{ url_for('class_list') }}" class="btn btn-outline-secondary"><i class="bi bi-arrow-left"></i> 返回</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 班级信息 -->
|
|
<div class="card shadow-sm mb-3">
|
|
<div class="card-header bg-info text-white"><i class="bi bi-info-circle"></i> 班级信息</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-3"><strong>课程:</strong>{{ class_.course.name }}</div>
|
|
<div class="col-md-3"><strong>授课老师:</strong>{{ class_.teacher.name }}</div>
|
|
<div class="col-md-3"><strong>上课安排:</strong>{{ class_.schedule or '-' }}</div>
|
|
<div class="col-md-3"><strong>学员数:</strong>{{ class_.current_students }}/{{ class_.max_students }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 学员列表 -->
|
|
<div class="card shadow-sm mb-3">
|
|
<div class="card-header bg-success text-white d-flex justify-content-between align-items-center">
|
|
<span><i class="bi bi-people"></i> 班级学员</span>
|
|
</div>
|
|
<div class="card-body">
|
|
<!-- 添加学员表单 -->
|
|
<form method="POST" action="{{ url_for('class_add_student', class_id=class_.id) }}" class="row g-2 mb-3">
|
|
<div class="col-md-4">
|
|
<select class="form-select" name="student_id">
|
|
<option value="">选择学员添加到班级</option>
|
|
{% for s in available_students %}
|
|
<option value="{{ s.id }}">{{ s.name }} ({{ s.phone }})</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-md-2">
|
|
<button type="submit" class="btn btn-success"><i class="bi bi-plus"></i> 添加</button>
|
|
</div>
|
|
</form>
|
|
<div class="table-responsive">
|
|
<table class="table table-bordered table-hover table-sm">
|
|
<thead class="table-light">
|
|
<tr><th>学员ID</th><th>姓名</th><th>入班日期</th><th>状态</th><th>操作</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for cs in class_students %}
|
|
<tr>
|
|
<td>{{ cs.student_id }}</td>
|
|
<td>{{ cs.student.name }}</td>
|
|
<td>{{ cs.join_date }}</td>
|
|
<td>
|
|
{% if cs.status == 1 %}<span class="badge bg-success">在读</span>
|
|
{% elif cs.status == 2 %}<span class="badge bg-warning">已转出</span>
|
|
{% else %}<span class="badge bg-info">已毕业</span>{% endif %}
|
|
</td>
|
|
<td>
|
|
{% if cs.status == 1 %}
|
|
<form method="POST" action="{{ url_for('class_remove_student', class_id=class_.id, student_id=cs.student_id) }}" style="display:inline;" onsubmit="return confirm('确定移出该学员?')">
|
|
<button type="submit" class="btn btn-sm btn-danger"><i class="bi bi-x"></i> 移出</button>
|
|
</form>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
{% if not class_students %}
|
|
<tr><td colspan="5" class="text-center text-muted">暂无学员</td></tr>
|
|
{% endif %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 最近考勤 -->
|
|
<div class="card shadow-sm mb-3">
|
|
<div class="card-header"><i class="bi bi-clipboard-data"></i> 最近考勤</div>
|
|
<div class="card-body">
|
|
{% if attendance_records %}
|
|
<div class="table-responsive">
|
|
<table class="table table-bordered table-hover table-sm">
|
|
<thead class="table-light">
|
|
<tr><th>日期</th><th>学员</th><th>状态</th><th>备注</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for a in attendance_records %}
|
|
<tr>
|
|
<td>{{ a.date }}</td>
|
|
<td>{{ a.student.name }}</td>
|
|
<td>
|
|
{% if a.status == 'present' %}<span class="badge bg-success">出勤</span>
|
|
{% elif a.status == 'absent' %}<span class="badge bg-danger">缺勤</span>
|
|
{% else %}<span class="badge bg-warning">请假</span>{% endif %}
|
|
</td>
|
|
<td>{{ a.remark or '-' }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% else %}
|
|
<p class="text-muted">暂无考勤记录</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|