{% extends "base.html" %} {% from 'macros/sortable.html' import sort_th %} {% block title %}学员课时余额{% endblock %} {% block content %}

学员课时余额

数据来自课时核对表 Excel 导入 · 当前查看 {{ year }}-{{ '%02d'|format(month) }} {% if total %}(共 {{ total }} 条学员×课程){% endif %}

导入
{% if period_stats_list %}
切换月份(数字为当月导入条数,请选 400+ 条的完整月份)
{% for p in period_stats_list %} {{ p.year }}-{{ '%02d'|format(p.month) }} {{ p.count }} {% endfor %}
{% endif %}
{% if sort %}{% endif %} {% if sort %}{% endif %}
{% for item in rows %} {% set s = item.snap %} {% set d = item.disp if item.disp is mapping else {} %} {% set acc = item.acc %} {% set stu = acc.student if acc else none %} {% set crs = acc.course if acc else none %} {% else %} {% endfor %}
{{ sort_th('keshibiao_snapshots', 'student', '学员', sort, order, list_params, '') }} {{ sort_th('keshibiao_snapshots', 'course', '课程', sort, order, list_params, '') }} {{ sort_th('keshibiao_snapshots', 'end_lessons', '正课剩余', sort, order, list_params) }} {{ sort_th('keshibiao_snapshots', 'end_gift', '赠课剩余', sort, order, list_params) }} {{ sort_th('keshibiao_snapshots', 'end_total', '总剩余课时', sort, order, list_params) }} {{ sort_th('keshibiao_snapshots', 'end_balance', '账户余额', sort, order, list_params, title='折后口径账面余额') }} {{ sort_th('keshibiao_snapshots', 'unit_price', '单价/节', sort, order, list_params) }} {{ sort_th('keshibiao_snapshots', 'consumed', '本月消课', sort, order, list_params) }}
{% if stu %} {{ stu.name }} {% else %}{% endif %} {{ crs.course_code or crs.name if crs else '—' }} {{ fmt_hours(d.get('end_lessons')) }} {{ fmt_hours(d.get('end_gift_lessons')) }} {{ fmt_hours(d.get('end_total_lessons')) }} {{ fmt_money(d.get('end_balance')) }} {{ fmt_price(d.get('unit_price')) }} {{ fmt_hours(s.consumed_lessons) }} {% if acc %} 明细 {% endif %}

当前月份没有可显示的数据

{% if period_stats_list %}

请点上方 2026-04(492) 等条数较多的月份;勿选仅 1 条的测试月。

{% else %}

请先在「课时核对表」页导入 Excel。

{% endif %}
{% if total > per_page %} {% endif %} {% endblock %} {% block extra_css %} {% endblock %}