{% extends "base.html" %} {% from 'macros/sortable.html' import sort_th %} {% set detail_params = {'id': student.id} %} {% block title %}学员详情 - 学生课程管理系统{% endblock %} {% block content %}

学员详情 - {{ student.name }}

{% if current_user.has_permission('student_account_adjust') %} 调课时 {% endif %} 返回列表
基本信息
姓名:{{ student.name }}
来源:{{ student.source or '新学员' }}
状态: {% if student.status == 1 %}在读{% else %}停用{% endif %}
出生日期:{{ student.birthday or '-' }}
注册时间:{{ student.created_at.strftime('%Y-%m-%d') if student.created_at else '-' }}
备注:{{ student.remark or '-' }}
课时信息{% if ledger_period %} (Excel {{ ledger_period }}){% endif %} {% if current_user.has_permission('keshibiao_view') %} 全部学员余额表 → {% endif %}
{% if accounts %}
{% if current_user.has_permission('keshibiao_view') %}{% endif %} {% for a in accounts %} {% set lg = account_ledger.get(a.id, {}) %} {% set rp = refund_previews.get(a.id, {}) if refund_previews else {} %} {% set total_h = lg.get('end_total_lessons') %} {% if total_h is none %}{% set total_h = a.total_hours %}{% endif %} {% if current_user.has_permission('keshibiao_view') %} {% endif %} {% endfor %}
{{ sort_th('student_detail', 'course', '课程', sort, order, detail_params, '') }} {{ sort_th('student_detail', 'end_lessons', '正课剩余', sort, order, detail_params, '') }} {{ sort_th('student_detail', 'end_gift', '赠课剩余', sort, order, detail_params, '') }} {{ sort_th('student_detail', 'end_total', '总剩余', sort, order, detail_params, '') }} {{ sort_th('student_detail', 'end_balance', '账户余额', sort, order, detail_params, '', title='折后口径账面余额,非退费金额') }} {{ sort_th('student_detail', 'refund_due', '应退金额', sort, order, detail_params, '', title='原价单价×剩余正课,不含赠课') }} {{ sort_th('student_detail', 'unit_price', '单价/节', sort, order, detail_params, '') }} 数据月份 状态课时表
{{ a.course.name if a.course else '—' }}{% if a.course and a.course.course_code %} ({{ a.course.course_code }}){% endif %} {{ fmt_hours(lg.get('end_lessons')) }} {{ fmt_hours(lg.get('end_gift_lessons')) }} {{ fmt_hours(lg.get('end_total_lessons')) }} {{ fmt_money(lg.get('end_balance')) }} {% if rp and rp.has_original and not rp.refund_label %} {{ fmt_money(rp.refund_due) }} {% elif rp and rp.refund_label %} {{ rp.refund_label }} {% else %} - {% endif %} {{ fmt_price(lg.get('unit_price')) }} {{ lg.get('period') or '—' }} {% if a.is_stopped %} 停课中 {% elif total_h <= 5 and total_h > 0 %} 课时不足 {% elif total_h == 0 %} 已用完 {% else %} 正常 {% endif %} {% if a.account_status == 'graduated' %}结课{% endif %} 流水
{% else %}

暂无课时账户

{% endif %}
{% if accounts and refund_previews %} {% for a in accounts %} {% set rp = refund_previews.get(a.id, {}) %} {% if rp and rp.has_original %}
退费预览(仅供参考)— {{ rp.course_name }}
原价口径
原价总额
{{ fmt_money(rp.original_total) }}
实付总额
{{ fmt_money(rp.paid_total) }}
优惠金额
{{ fmt_money(rp.discount) }}
原价单价/节
{{ fmt_price(rp.original_unit) }}
消课单价/节
{{ fmt_price(rp.consume_unit) }} (实付÷总课时)
正课已上
{{ fmt_hours(rp.consumed_normal) }} 节
正课剩余
{{ fmt_hours(rp.regular_remaining) }} 节
赠课剩余
{{ fmt_hours(rp.gift_remaining) }} 节 (退费时清零)
账户余额
{{ fmt_money(rp.balance) }} (折后口径)
★ 如退费应退 {% if rp.refund_label %}{{ rp.refund_label }}{% else %}{{ fmt_money(rp.refund_due) }}{% endif %}

退费金额 = 原价单价 × 剩余正课数,赠课不退款。最终退费金额以实际审批为准。

{% elif rp and not rp.has_original %}
退费预览 — {{ rp.course_name }}

无原价数据(历史数据未录原价),应退相关字段无法计算。

{% endif %} {% endfor %} {% endif %}
所在班级
{% if class_relations %}
{% for cr in class_relations %} {% endfor %}
班级课程老师入班日期状态
{{ cr.class_.name }} {{ cr.class_.course.name }} {{ cr.class_.teacher.name }} {{ cr.join_date }} {% if cr.status == 1 %}在读 {% elif cr.status == 2 %}已转出 {% else %}已毕业{% endif %}
{% else %}

暂无班级信息

{% endif %}
充值记录
{% if recharge_records %}
{% for r in recharge_records %} {% endfor %}
时间课程金额正课课时赠课课时支付方式备注
{{ r.created_at.strftime('%Y-%m-%d %H:%M') }} {{ r.course.name }} ¥{{ r.amount }} {{ r.normal_hours }} +{{ r.gifted_hours }} {{ r.payment_method or '-' }} {{ r.remark or '-' }}
{% else %}

暂无充值记录

{% endif %}
消课记录
{% if consumption_records %}
{% for c in consumption_records %} {% endfor %}
日期课程消课课时正课消耗赠课消耗类型备注
{{ c.consume_date }} {{ c.course.name }} {{ c.hours_consumed }} {{ c.normal_consumed }} {{ c.gifted_consumed }} {% if c.consume_type == 'trial' %}试听 {% elif c.consume_type == 'normal' %}正课 {% else %}混合{% endif %} {% if c.is_makeup %}补录{% endif %} {{ c.remark or '-' }}
{% else %}

暂无消课记录

{% endif %}
退费记录
{% if refund_records %}
{% for r in refund_records %} {% endfor %}
时间课程退费金额扣回赠课已消课时金额材料费原因
{{ r.created_at.strftime('%Y-%m-%d') }} {{ r.course.name }} ¥{{ r.refund_amount }} {{ r.deduct_gifted_hours }} ¥{{ r.consumed_hours_value }} ¥{{ '%.2f'|format((r.material_fee_per_quarter or 0) * (r.quarters or 0)) }} {{ r.reason or '-' }}
{% else %}

暂无退费记录

{% endif %}
停课记录
{% if stop_records %}
{% for s in stop_records %} {% endfor %}
开始日期结束日期课程状态原因
{{ s.start_date }} {{ s.end_date }} {{ s.course.name }} {% if s.status == 1 %}停课中 {% elif s.status == 2 %}已复课 {% else %}已取消{% endif %} {{ s.reason or '-' }}
{% else %}

暂无停课记录

{% endif %}
{% endblock %} {% block extra_css %} {% endblock %} {% block extra_js %} {% endblock %}