{# ============================ 课表 ============================ #}
本学期课表({{ sched | length }} 节)
{% if sched and not sched.error %}
| 课程 | 教师 | 星期 | 时间 | 地点 |
{% for c in sched %}| {{ c.name }} | {{ c.teacher }} | {{ c.weekday }} | {{ c.time }} | {{ c.location }} |
{% endfor %}
{% else %}课表不可用:{{ sched.error if sched else '未加载' }}(需教务凭据与校园网/VPN)
{% endif %}
{# ============================ 成绩 ============================ #}
{% if gr and not gr.error %}
成绩({{ gr.total_courses }} 门 / {{ gr.total_credits }} 学分{% if gr.gpa_estimated %} / GPA≈{{ gr.gpa_estimated }}{% endif %})
{{ gr.gpa_note }}官方成绩单以教务为准。
{% if gr.rows %}
{% if gr.by_term %}
{% for b in gr.by_term %}
{{ b.term }}
{{ b.count }} 门 · {{ b.credits }} 学分
GPA {{ b.gpa or '—' }}
{% endfor %}
{% endif %}
| 学期 | 课程 | 等级 | 学分 |
{% set ns = namespace(prev='') %}{% for g in gr.rows %}| {% if g.term == ns.prev %}{{ g.term }}{% else %}{{ g.term }}{% set ns.prev = g.term %}{% endif %} | {{ g.name }} | {{ g.grade }} | {{ g.credits }} |
{% endfor %}
{% else %}
暂无成绩记录。
{% endif %}
{% elif gr and gr.error %}成绩不可用:{{ gr.error }}
{% endif %}
{# ============================ 考试 / 评教 ============================ #}
考试安排
{% set ex2 = ex %}
{% if ex2 is not none and not (ex2 and ex2.error) %}
{% if ex2 %}
| 课程 | 日期 | 时间 | 类型 | 考场 | 座位 |
{% for e in ex2 %}| {{ e.course }} | {{ e.date }} | {{ e.time }} | {{ e.kind }} | {{ e.room }} | {{ e.seat }} |
{% endfor %}
{% else %}本学期暂无排期考试。
{% endif %}
{% elif ex2 and ex2.error %}考试安排不可用:{{ ex2.error }}
{% endif %}
待评教
{% if ev is not none %}
{% if ev and not ev.error and ev %}
| 课程 | 学期 | 时段 |
{% for e in ev %}| {{ e.name }} | {{ e.term }} | {{ e.period }} |
{% endfor %}
{% elif not (ev and ev.error) %}暂无待评教任务。
{% else %}评教不可用:{{ ev.error }}
{% endif %}
{% endif %}
{# ============================ 第二课堂 ============================ #}
{% if sc and not sc.error %}
第二课堂({{ sc.pending }} 项待完成)
{% for c in sc.categories %}
{{ c.name }}
{{ c.percent if c.percent is not none else '—' }}{% if c.percent is not none %}%{% endif %}
{% endfor %}
{% for c in sc.categories %}
{{ c.name }}{{ c.percent if c.percent is not none else '—' }}{% if c.percent is not none %}%{% endif %}
{% for n in c.nodes %}
{% if n.name and n.name != c.name %}
{{ n.name }}{% if n.percent is not none %} · {{ n.percent }}%{% endif %}{% if n.note %} · {{ n.note }}{% endif %}
{% endif %}
{% if n.rows %}
| 要求 | 完成进度 |
{% for r in n.rows %}| {{ r.requirement }} | {{ r.progress or '—' }} |
{% endfor %}
{% endif %}
{% for ch in n.children %}
{{ ch.name }}{% if ch.percent is not none %} · {{ ch.percent }}%{% endif %}
{% if ch.rows %}
| 要求 | 完成进度 |
{% for r in ch.rows %}| {{ r.requirement }} | {{ r.progress or '—' }} |
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% elif sc and sc.error %}
第二课堂不可用:{{ sc.error }}
{% else %}
第二课堂数据未加载。
{% endif %}
{# ============================ 学业导师 ============================ #}
{% if av and not av.error %}
学业导师{% if av.assigned %}(已分配:{{ av.assigned }}){% endif %}
{% if av.announcement %}{{ av.announcement }}
{% endif %}
{% for r in av.rotations %}
{{ r.label or '导师名单' }}{{ r.count }} 位
| 导师 | 学院 | 配额 | 余量 | 1志愿 | 2志愿 | 3志愿 |
{% for a in r.advisors %}| {{ a.name }} | {{ a.school }} | {{ a.quota }} | {{ a.remaining or '—' }} | {{ a.choices.get('1st Choice') or '—' }} | {{ a.choices.get('2nd Choice') or '—' }} | {{ a.choices.get('3rd Choice') or '—' }} |
{% endfor %}
{% endfor %}
{% elif av and av.error %}学业导师不可用:{{ av.error }}
{% endif %}
{# ============================ 其他申请 ============================ #}
{% if oa and not oa.error %}
其他申请
学籍异动 / 困难认定 / 本博衔接 / 就业{{ oa.status_change.tabs | length }} 类异动流程
学籍异动可办理流程:{{ oa.status_change.tabs | join(' · ') }}
困难认定
{{ oa.difficulty.count }} 条申请{% if oa.difficulty.message %} · {{ oa.difficulty.message }}{% endif %}
本博衔接
{{ oa.phd.count }} 条申请{% if oa.phd.message %} · {{ oa.phd.message }}{% endif %}
就业服务
{{ oa.employment.count }} 条{% if oa.employment.message %} · {{ oa.employment.message }}{% endif %}
学术进度
{{ oa.academic_progress.count }} 条{% if oa.academic_progress.message %} · {{ oa.academic_progress.message }}{% endif %}
{% elif oa and oa.error %}其他申请不可用:{{ oa.error }}
{% endif %}
{# ============================ 学籍档案 ============================ #}
学籍档案
{% set pf = blocks.get('profile') %}
{% if pf and not pf.error %}
个人信息{{ pf | length }} 项
{% for k, v in pf.items() %}{% if v %}
{% endif %}{% endfor %}
{% endif %}
{% set ac = blocks.get('academic') %}
{% if ac and not ac.error %}
学籍信息{{ ac | length }} 项
{% for k, v in ac.items() %}{% if v %}
{% endif %}{% endfor %}
{% endif %}
{% set ext = blocks.get('extended') %}
{% if ext is not none and not (ext and ext.error) %}
扩展信息{{ ext | length if ext else 0 }} 项 · 联系方式与户籍
{% for k, v in (ext or {}).items() %}{% if v %}
{% endif %}{% endfor %}
{% elif ext and ext.error %}扩展信息不可用:{{ ext.error }}
{% endif %}
{% if reg is not none and not (reg and reg.error) %}
学期注册缴费{{ reg.fields.get('Payment Academic Year') or '—' }}{% if reg.notice %}未开放{% endif %}
{% for k, v in reg.fields.items() %}{% if v %}
{% endif %}{% endfor %}
{% if reg.notice %}
站点提示:{{ reg.notice }}
{% endif %}
{% elif reg and reg.error %}学期注册不可用:{{ reg.error }}
{% endif %}
{% set src = blocks.get('source') %}
{% if src is not none and not (src and src.error) %}
生源信息确认{% if src.message and 'Not yet open' in src.message %}未开放{% endif %}
{{ src.message or '状态未知' }}
{% elif src and src.error %}生源信息不可用:{{ src.error }}
{% endif %}
{# ============================ 校园记录 ============================ #}
校园记录
{% set dorm = blocks.get('dorm') %}
{% if dorm and not dorm.error %}
住宿{% if dorm.info.get('On Campus Dormitory') %}{{ dorm.info.get('On Campus Dormitory') }}{% endif %}
{% if dorm.applications %}
| 申请号 | 类型 | 事由 | 时间 | 状态 |
{% for a in dorm.applications[:8] %}| {{ a.application_no or '—' }} | {{ a.application_type or '—' }} | {{ a.reason or '—' }} | {{ a.date_time or '—' }} | {% if a.status %}{{ a.status }}{% else %}—{% endif %} |
{% endfor %}
{% else %}
暂无住宿申请记录。
{% endif %}
{% elif dorm and dorm.error %}住宿信息不可用:{{ dorm.error }}
{% endif %}
{% if vh is not none and not (vh and vh.error) %}
志愿服务总时长 {{ vh.total_time or '—' }} · {{ vh.entries | length }} 条
{% if vh.entries %}
| 学年 | 来源 | 服务名称 | 时间 | 时长(h) |
{% set vs = namespace(prev='') %}{% for e in vh.entries %}{% set cur = e.year ~ '|' ~ e.source %}| {% if cur == vs.prev %}{{ e.year }}{% else %}{{ e.year }}{% endif %} | {% if cur == vs.prev %}{{ e.source }}{% else %}{{ e.source }}{% set vs.prev = cur %}{% endif %} | {{ e.name }} | {{ e.time_text }} | {{ e.hours }} |
{% endfor %}
{% else %}
暂无志愿服务记录。
{% endif %}
{% elif vh and vh.error %}志愿服务不可用:{{ vh.error }}
{% endif %}
{% set ho = blocks.get('honors') %}
{% if ho is not none and not (ho and ho.error) %}
荣誉{% if ho %}{{ ho | length }} 条{% else %}暂无{% endif %}
{% if ho %}
| 荣誉 | 级别 | 日期 | 状态 |
{% for h in ho[:10] %}| {{ h.name or '—' }} | {{ h.level or '—' }} | {{ h.date or '—' }} | {% if h.status %}{{ h.status }}{% else %}—{% endif %} |
{% endfor %}
{% else %}
暂无荣誉记录。
{% endif %}
{% elif ho and ho.error %}荣誉不可用:{{ ho.error }}
{% endif %}
{% set lv = blocks.get('leave') %}
{% if lv is not none and not (lv and lv.error) %}
请假{% if lv %}{{ lv | length }} 条{% else %}暂无{% endif %}
{% if lv %}
| 申请号 | 类型 | 开始 | 结束 | 状态 |
{% for l in lv[:10] %}| {{ l.application_no or '—' }} | {{ l.leave_type or '—' }} | {{ l.start or '—' }} | {{ l.end or '—' }} | {% if l.status %}{{ l.status }}{% else %}—{% endif %} |
{% endfor %}
{% else %}
暂无请假记录。
{% endif %}
{% elif lv and lv.error %}请假不可用:{{ lv.error }}
{% endif %}
{% set pr = blocks.get('practice') %}
{% if pr is not none and not (pr and pr.error) %}
社会实践{% if pr %}{{ pr | length }} 条{% else %}暂无{% endif %}
{% if pr %}
| 项目 | 组织 | 开始 | 结束 | 时长 | 状态 |
{% for p in pr[:10] %}| {{ p.title or '—' }} | {{ p.organization or '—' }} | {{ p.start or '—' }} | {{ p.end or '—' }} | {{ p.hours or '—' }} | {% if p.status %}{{ p.status }}{% else %}—{% endif %} |
{% endfor %}
{% else %}
暂无社会实践记录。
{% endif %}
{% elif pr and pr.error %}社会实践不可用:{{ pr.error }}
{% endif %}
{% set dc = blocks.get('discipline') %}
{% if dc is not none and not (dc and dc.error) %}
违纪{% if dc %}{{ dc | length }} 条{% else %}暂无{% endif %}
{% if dc %}
| 日期 | 类别 | 描述 | 状态 |
{% for d in dc[:10] %}| {{ d.date or '—' }} | {{ d.category or '—' }} | {{ d.description or '—' }} | {% if d.status %}{{ d.status }}{% else %}—{% endif %} |
{% endfor %}
{% else %}
暂无违纪记录。
{% endif %}
{% elif dc and dc.error %}违纪信息不可用:{{ dc.error }}
{% endif %}
{% set ap = blocks.get('appointments') %}
{% if ap is not none and not (ap and ap.error) %}
心理预约{% if ap.entries %}{{ ap.entries | length }} 个时段{% else %}{{ ap.week or '本周' }} 无预约{% endif %}
{% if ap.entries %}
| 日期 | 时间 | 内容 |
{% for s in ap.entries %}| {{ s.date or s.day }} | {{ s.time }} | {{ s.text }} |
{% endfor %}
{% else %}
本周无预约。
{% endif %}
{% elif ap and ap.error %}预约信息不可用:{{ ap.error }}
{% endif %}
{% set le = blocks.get('leaving') %}
{% if le is not none and not (le and le.error) %}
离校检查{% if le.message and 'no task' in le.message %}无离校任务{% endif %}
{{ le.message or '状态未知' }}
{% elif le and le.error %}离校检查不可用:{{ le.error }}
{% endif %}
{# ============================ 社团与资助 ============================ #}
社团与资助
{% if cl is not none and not (cl and cl.error) %}
我的社团{{ cl | length }} 个
{% if cl %}
| 学年 | 社团 | 发起人 | 发起截止 | 当前人数 |
{% for c in cl %}| {{ c.academic_year or '—' }} | {{ c.club_name or '—' }} | {{ c.founder or '—' }} | {{ c.initiation_deadline or '—' }} | {{ c.initiators or '—' }} |
{% endfor %}
{% else %}
暂未加入社团。
{% endif %}
{% elif cl and cl.error %}我的社团不可用:{{ cl.error }}
{% endif %}
{% set og = blocks.get('orgs') %}
{% if og is not none and not (og and og.error) %}
社团目录{{ og | length }} 个
{% if og %}
{% for o in og %}{{ o.name }}{% endfor %}
{% else %}
目录为空。
{% endif %}
{% elif og and og.error %}社团目录不可用:{{ og.error }}
{% endif %}
{# 社团简介:随包内置的离线数据(改写自 WikiLake),不依赖登录 #}
{% set cw = club_wiki %}
{% if cw and cw.clubs %}
社团简介WikiLake · {{ cw.clubs | length }} 个
摘要改写自
WikiLake({{ cw.meta.source }},{{ cw.meta.fetched }} 抓取)。原文版权归其贡献者,此处不含负责人信息与照片。
| 社团 | 简介 | 原文 |
{% for c in cw.clubs %}
| {{ c.name }} | {{ c.summary }} | WikiLake |
{% endfor %}
{% endif %}
{% set at = blocks.get('activities') %}
{% if at is not none and not (at and at.error) %}
社团活动{% if at %}{{ at | length }} 条{% else %}暂无{% endif %}
{% if at %}
{% for a in at[:30] %}{{ a.name or a.title or a }}{% endfor %}
{% else %}
暂无活动报名记录。
{% endif %}
{% elif at and at.error %}社团活动不可用:{{ at.error }}
{% endif %}
{% set ad = blocks.get('aid') %}
{% if ad is not none and not (ad and ad.error) %}
贷款 / 勤工助学 / 海外交流贷款 {{ ad.loans | length }} · 岗位 {{ ad.jobs | length }} · 交流 {{ (ad.outbound | length) + (ad.exchange | length) }}
贷款援助
{{ ad.loans | length }} 条
贷款申请
{{ ad.loan_app | length }} 条
还款计划
{{ ad.repay | length }} 条
海外交流
{{ ad.outbound | length }} 条
交换申请
{{ ad.exchange | length }} 条
勤工助学
{{ ad.jobs | length }} 个
{% if ad.claim_notice %}
工时申报:{{ ad.claim_notice }}
{% endif %}
{% elif ad and ad.error %}资助信息不可用:{{ ad.error }}
{% endif %}