累计发行
{{ fmtCoin(kpi.issued_coin) }}币
发行上限 {{ fmtCoin(currency.total_cap_coin) }} 币
已兑换销毁
{{ fmtCoin(kpi.redeemed_coin) }}币
激励闭环回收
当前流通
{{ fmtCoin(kpi.circulating_coin) }}币
学生持有总量
人均持有
{{ fmtCoin(kpi.avg_coin) }}币
{{ kpi.student_count }} 名学生
发行进度
已用 {{ currency.cap_percent }}%
已发行 {{ fmtCoin(kpi.issued_coin) }} / 上限 {{ fmtCoin(currency.total_cap_coin) }} 币
近 30 天发放趋势
奖励项目分布
奖励分类占比
规模概览
班级数
{{ kpi.class_count }}
教师数
{{ kpi.teacher_count }}
学生数
{{ kpi.student_count }}
平均每名学生获得 {{ fmtCoin(kpi.avg_coin) }} 币
学生持有的币可随时在兑换商城消费,消费即销毁
学生持有的币可随时在兑换商城消费,消费即销毁
{{ myRank.name }}
{{ myRank.grade }}{{ myRank.class_name }}
{{ rankScopeLabel }}共 {{ myRank.total }} 人 · 币值 {{ fmtCoin(myRank.score_coin) }}
{{ myRank.rank }}/{{ myRank.total }}
超越{{ rankScopeLabel }} {{ myRank.percent }}% 的同学
🏫 校级排名
🎓 年级排名
👥 班级排名
选择年级
年级
班级
币种
显示前 {{ rank.length }} 名(共 {{ rankTotal }} 人)
{{ rank[1].name }}
{{ fmtCoin(rank[1].score_coin) }}
2
👑
{{ rank[0].name }}
{{ fmtCoin(rank[0].score_coin) }}
1
{{ rank[2].name }}
{{ fmtCoin(rank[2].score_coin) }}
3
| 排名 | 学生 | 学号 | 班级 | 币值 |
|---|---|---|---|---|
| {{ r.rank }} |
|
{{ r.student_no }} | {{ r.grade }}{{ r.class_name }} | {{ fmtCoin(r.score_coin) }} |
📊暂无数据
至
| 时间 | 单号 | 类型 | 学生 | 班级 | 操作人 | 项目 | 金额(币) | 理由 |
|---|---|---|---|---|---|---|---|---|
| {{ fmtTime(r.created_at) }} | {{ r.txn_no }} | {{ typeName(r.type) }} | {{ r.student_name || '批量' }} | {{ (r.grade||'') + (r.class_name||'') || '-' }} | {{ r.operator_name || '-' }} | {{ r.item_name || '-' }} | {{ r.type==='redeem'?'-':'+' }}{{ fmtCoin(r.amount_coin) }} | {{ r.reason }} |
📒没有符合条件的记录
共 {{ ledger.total }} 条
{{ Math.floor(lf.offset/100)+1 }} / {{ Math.max(1,Math.ceil(ledger.total/100)) }}
至
按教师统计
按项目统计
| 教师 | 角色 | 所带班级 | 发放笔数 | 发放总额(币) | 平均每笔 |
|---|---|---|---|---|---|
| {{ r.real_name }} | {{ ROLE_NAME[r.role] || r.role }} | {{ r.class_label }} | {{ r.txn_count }} | {{ fmtCoin(r.total_coin) }} | {{ fmtCoin(r.avg_coin) }} |
📈暂无数据
| 奖励项目 | 分类 | 发放次数 | 发放总额(币) | 涉及教师 | 涉及学生 |
|---|---|---|---|---|---|
| {{ r.icon }} {{ r.name }} | {{ r.category }} | {{ r.txn_count }} | {{ fmtCoin(r.total_coin) }} | {{ r.teacher_count }} | {{ r.student_count }} |
📈暂无数据
校园币是校内激励代币。发行需要有锚:每发一枚币都来自教师的额度预算;
消费即销毁:学生兑换奖品后币被回收,形成激励闭环。设置发行总量上限可防止通胀。
币种列表
| 名称 | 学年学期 | 状态 | 发行上限 | 已发行 | 已销毁 | 流通中 | 发行进度 |
|---|---|---|---|---|---|---|---|
| {{ c.name }} | {{ c.school_year }} {{ c.term }} | {{ c.status==='active'?'启用中':'已归档' }} | {{ fmtCoin(c.total_cap_coin) }} | {{ fmtCoin(c.issued_coin) }} | {{ fmtCoin(c.redeemed_coin) }} | {{ fmtCoin(c.circulating_coin) }} |
{{ c.cap_percent }}%
|
奖励项目模板
老师发币时可直接点选这些项目,快速完成发放。修改默认金额不会影响已发放的记录。
| 图标 | 项目名称 | 分类 | 默认币值 | 已发放次数 | 操作 |
|---|---|---|---|---|---|
| {{ it.icon }} | {{ it.name }} | {{ it.category }} | {{ fmtCoin(it.default_amount_coin) }} 币 | {{ it.used_count || 0 }} |
额度即发行锚。老师没有额度就无法发币。这能从源头控制发行总量,防止超发。
已使用额度不能低于实际已发放量。
教师额度分配
| 教师 | 角色 | 所带班级 | 授予额度 | 已使用 | 剩余 | 使用进度 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ b.real_name }} | {{ ROLE_NAME[b.role] }} | {{ (b.grade||'') + (b.class_name||'') || '-' }} | {{ fmtCoin(b.granted_coin) }} | {{ fmtCoin(b.used_coin) }} | {{ fmtCoin(b.remain_coin) }} |
{{ pct(b) }}%
|
奖品列表
| 图标 | 奖品名称 | 分类 | 所需币值 | 库存 | 已兑换 | 说明 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ p.icon }} | {{ p.name }} | {{ p.category }} | {{ fmtCoin(p.cost_coin) }} 币 | {{ p.stock < 0 ? '不限' : p.stock }} | {{ p.redeemed_count || 0 }} | {{ p.description }} |
兑换记录(最近 100 条)
| 时间 | 学生 | 班级 | 奖品 | 消耗币值 | 状态 |
|---|---|---|---|---|---|
| {{ fmtTime(r.created_at) }} | {{ r.student_name }} | {{ (r.grade||'')+(r.class_name||'') }} | {{ r.prize_name }} | -{{ fmtCoin(r.cost_coin) }} | {{ r.status==='done'?'已完成':(r.status==='delivered'?'已发放':'已取消') }} |
📜暂无兑换记录
余额修正涉及资金安全,采用双人复核制。
提出申请后,必须由另一位超级管理员审核通过才会生效。申请人本人不能审核自己的申请。
余额修正申请
全部
待审核
已通过
已驳回
| 申请时间 | 学生 | 调整数额 | 理由 | 申请人 | 审核人 | 状态 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ fmtTime(a.created_at) }} | {{ a.student_name }} | {{ a.amount_coin>=0?'+':'' }}{{ fmtCoin(a.amount_coin) }} | {{ a.reason }} | {{ a.proposer_name }} | {{ a.reviewer_name || '-' }} | {{ a.status==='approved'?'已通过':(a.status==='pending'?'待审核':'已驳回') }} | 等待他人复核 仅超管可审核 {{ a.review_note || '-' }} |
⚖️暂无修正记录
对账会校验三项核心不变量:① 每个账户的余额缓存是否等于其全部流水之和;
② 每笔事务的分录代数和是否为 0(复式记账平衡);
③ 是否存在负余额。发现异常时会以流水为准自动修复余额缓存。
对账中心
{{ reconResult.status==='ok' ? '✓ 对账通过' : '✗ 发现异常' }}
检查账户 {{ reconResult.checked_accounts }} 个,发现问题 {{ reconResult.issue_count }} 项
检查账户 {{ reconResult.checked_accounts }} 个,发现问题 {{ reconResult.issue_count }} 项
| 问题类型 | 详情 |
|---|---|
| {{ i.type }} | {{ JSON.stringify(i) }} |
历史对账报告
| 对账时间 | 结果 | 检查账户 | 检查事务 | 问题数 |
|---|---|---|---|---|
| {{ fmtTime(r.run_at) }} | {{ r.status==='ok'?'通过':'异常' }} | {{ r.checked_accounts }} | {{ r.checked_txns }} | {{ r.issue_count }} |
🔍还没有对账记录
班级列表({{ classes.length }} 个)
| 校区 | 年级 | 班级 | 班主任 | 学生人数 | 班级总币值 | 人均 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ c.campus }}- | {{ c.grade }} | {{ c.name }} | {{ c.head_teacher_name || '-' }} | {{ c.student_count }} | {{ fmtCoin(c.total_coin) }} | {{ fmtCoin(c.avg_coin) }} |
班级量化排名({{ quantWeek }})
| 名次 | 班级 | 本周得分 | 本周笔数 | 累计得分 |
|---|---|---|---|---|
| {{ r.rank }} | {{ r.class_name }} | {{ r.week_score > 0 ? '+' : '' }}{{ r.week_score }} | {{ r.week_count }} | {{ r.term_score > 0 ? '+' : '' }}{{ r.term_score }} |
检查记录
| 时间 | 班级 | 类别 | 事由 | 分值 | 登记人 | 照片 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ fmtTime(r.created_at) }} | {{ r.class_name }} | {{ r.category }} | {{ r.reason }} | {{ r.score > 0 ? '+' : '' }}{{ r.score }} | {{ r.operator }} | 📷 | |
| 暂无记录 | |||||||
教师量化申请
V15 说明:教师量化不设排名、不公示;教师端只保留「提交加分」。
申请提交后由审核人(管理员在「权限管理」中指定 1-2 人)审核通过或驳回。
审核人还可对教师扣分——扣分仅在后台留档,教师端不可见,但必须填写理由备查。
待我审核:当前有 {{ tqMeta.pending_count || 0 }} 条申请待处理。
| 提交时间 | 教师 | 类型 | 理由 | 分值 | 提交人 | 状态 | 审核记录 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ fmtTime(r.created_at) }} | {{ r.teacher_name }}
自申报
|
{{ r.kind==='deduct' ? '扣分' : '加分' }} | {{ r.reason }} 📷 | {{ r.kind==='deduct' ? '-' : '+' }}{{ r.score }} | {{ r.submitter_name }} | {{ r.status==='approved'?'已通过':(r.status==='rejected'?'已驳回':'待审核') }} |
审核:{{ r.reviewer_name }}
意见:{{ r.review_note }}
|
|
| 暂无记录 | ||||||||
⚖️ 教师扣分(仅留档,教师端不可见)
对教师进行量化扣分时,请在上方列表中选择一条记录点击「扣分」,或直接在此登记。 扣分理由为必填项,将作为后期依据留档,教师端不会显示任何扣分痕迹。
角色权限总览
| 功能模块 | {{ r.name }} |
|---|---|
| {{ m.module }} | ✔ — |
说明:班主任 / 任课老师日常在「教师端」发币、管理本班学生,也可在管理端「教师个人量化」中 提交加分申请、查看教师排名(审批由校长 / 超管把关);政教处登录本端仅见「量化管理」。
管理类账号({{ permUsers.length }} 个)
| 登录名 | 姓名 | 当前角色 | 附加权限 | 最近登录 | 状态 | 操作 |
|---|---|---|---|---|---|---|
| {{ u.username }} | {{ u.real_name }} | 超级管理员(当前登录) | 默认全部 {{ permsLabel(u).length }} 项附加 仅角色默认 | {{ u.last_login_at || '从未登录' }} | {{ u.status==='active'?'正常':'已停用' }} | |
| 暂无管理类账号 | ||||||
按账号设置功能权限(任意账号,含教师 / 班主任)
勾选的权限会叠加在该账号的角色默认权限之上,适合"一人多岗":例如给某位老师单独开通「量化分管理」或「兑换核销」。 取消勾选并保存即收回。
| 登录名 | 姓名 | 角色 | 附加权限 | 状态 | 操作 |
|---|---|---|---|---|---|
| {{ u.username }} | {{ u.real_name }} | {{ ROLE_NAME[u.role] || u.role }} | {{ permsLabel(u).join('、') }} 无 | {{ u.status==='active'?'正常':'已停用' }} | |
| 没有找到匹配的账号 | |||||
输入姓名或登录名搜索账号后,点击「设置权限」勾选功能。
学生管理
| 学号 | 姓名 | 班级 | 当前余额(币) | 状态 | 最近登录 | 操作 |
|---|---|---|---|---|---|---|
| {{ s.student_no }} | {{ s.real_name }} | {{ (s.grade||'')+(s.class_name||'') }} | {{ fmtCoin(s.balance_coin) }} | {{ s.status==='active'?'正常':'已禁用' }} | {{ s.last_login_at || '从未登录' }} |
👨🎓没有找到学生
共 {{ students.total }} 条
{{ Math.floor(sf.offset/100)+1 }} / {{ Math.max(1,Math.ceil(students.total/100)) }}
教师管理
| 工号 | 姓名 | 角色 | 所带班级 | 已发放(币) | 状态 | 操作 |
|---|---|---|---|---|---|---|
| {{ t.username }} | {{ t.real_name }} | {{ ROLE_NAME[t.role] }} | {{ t.class_names || '-' }} | {{ fmtCoin(t.issued_coin) }} | {{ t.status==='active'?'正常':'已停用' }} |
👩🏫没有找到教师
教师在小程序端自助注册后,在此核对信息并「通过」开通账号(可修正角色 / 任教班级 / 班主任班);
不合规则「拒绝」并注明原因,申请人可在小程序看到拒绝理由。教师漏选班级时也可在「教师管理」补编辑。
教师注册申请
| 申请人 | 手机号 | 任教科目 | 校区 | 意向班级 | 状态 | 申请时间 | 操作 | |
|---|---|---|---|---|---|---|---|---|
| {{ r.real_name }}班主任 | {{ r.phone }} | {{ r.subject || '—' }} | {{ r.campus || '—' }} |
{{ r.class_names }}
{{ (regClasses.find(c=>c.id===p.class_id)||{}).name || ('班级'+p.class_id) }} → {{ p.subject }}
未选班级
|
{{ r.status==='approved'?'已通过':(r.status==='rejected'?'已拒绝':'待审核') }} | {{ fmtTime(r.created_at) }} | {{ r.reject_reason ? '拒绝原因:' + r.reject_reason : '已处理' }} |
📝{{ regStatusF==='pending' ? '暂无待审核的注册申请' : '没有记录' }}
通过注册申请
管理类身份无需任教班级,登录网页管理端使用对应功能
没有匹配的班级
已选 {{ (regForm.class_ids||[]).length }} 个班 · 班主任班 {{ (regForm.head_class_ids||[]).length }} 个(灰色→蓝色=任教,再点=班主任班红色,再点=取消)
编辑教师
没有匹配的班级
已选 {{ (teForm.class_ids||[]).length }} 个班 · 班主任班 {{ (teForm.head_class_ids||[]).length }} 个(灰色→蓝色=任教,再点=班主任班红色,再点=取消)
教师注册时漏选班级 / 班主任,可在此直接补正;换班主任后原班主任标记自动交接。
审计日志仅追加、不可修改删除,且查看权限与发币权限分离——任课老师和班主任无权查看。
操作审计日志
| 时间 | 操作人 | 角色 | 操作 | 对象 | 详情 | IP | 级别 |
|---|---|---|---|---|---|---|---|
| {{ fmtTime(a.created_at) }} | {{ a.actor_name }} | {{ ROLE_NAME[a.actor_role] || '-' }} | {{ a.action }} | {{ a.target_type }} {{ a.target_id }} | {{ a.detail }} | {{ a.ip }} | {{ a.level==='danger'?'高危':(a.level==='warn'?'警告':'普通') }} |
🛡️暂无日志
共 {{ audit.total }} 条
以下限额是防止刷币和异常发放的风控阈值,修改后立即生效。金额单位为「币」。
风控限额设置
默认值:{{ settingLabel(s.key, true) || s.default }} ·
{{ settingHint(s.key) }}
仅超级管理员可修改系统设置
敏感操作密码
当前敏感操作(余额修正、批量导入等)需要输入操作密码二次确认。
默认密码为
admin888,
建议通过环境变量 CAMPUS_COIN_OP_PASSWORD 修改。
公共屏刷新设置({{ schoolName }})
上课期间公共屏若频繁自动刷新,会带走学生注意力。建议设为
固定时间刷新(仅在课间等整点更新)或 手动刷新(由老师在一体机点「🔄 刷新公示」时更新)。
建议填各节课间/眼保健操/大课间时间,公共屏只在命中的「时:分」刷新一次,避免课中跳动。
仅超级管理员 / 教务管理员可修改
校本部 → 南校区 配置同步
南校区是校本部的镜像:在校本部修改发币类型、发币理由、奖品、系统设置后,会自动同步到南校区(账号与流水各自独立,不复制)。
若需立即把校本部当前全部配置一次性推送到南校区(如首次启用、或事后补救),点下方按钮手动同步。
已同步:币种 {{ syncResult.currencies }} · 理由 {{ syncResult.reward_items }} · 奖品 {{ syncResult.prizes }}
· 设置 {{ syncResult.settings }}
· 奖品多价 {{ syncResult.prize_prices }}
仅超级管理员可执行同步