Admin Console

香蕉菠萝蜜管理台

更适合运营和排障的后台视图,先做最常用也最值钱的部分。

{{ notice.type === 'error' ? '操作失败' : '操作成功' }}

{{ notice.message }}

{{ card.label }}

{{ card.value }}

{{ card.hint }}

最近录入用户

方便确认今天或最近新接入的同学。

{{ user.real_name }}

{{ classNameMap[user.class_id] || ('ID ' + user.class_id) }} · {{ user.student_no_label }}

暂无最近录入用户

快速操作

最值钱的操作集中放在这里,减少来回跳转。

用户管理

查找、封号、改到期时间、删除用户以及打开详情抽屉。

已选中 {{ selectedUserIds.length }} 个用户

批量暂停开始

批量暂停结束

{{ pagedUsers.length }} 条

{{ user.real_name }}

{{ getUserStatusLabel(user) }} {{ user.punch_paused_from }} 至 {{ user.punch_paused_until }} 试用

{{ classNameMap[user.class_id] || ('ID ' + user.class_id) }} · {{ user.student_no_label }}

UID: {{ user.own_userid }}

基础信息

联系方式

{{ user.contact_id || '未填写' }}

班级字段

时间设置

到期时间

暂停开始

暂停结束

最近状态

{{ user.latest_punch_success ? '最近成功' : '最近失败' }} {{ user.latest_punch_date || '未记录日期' }}

{{ user.latest_punch_message }}

暂无日志

没有匹配的用户数据

共 {{ filteredUsers.length }} 个用户,当前第 {{ userPage }} / {{ userTotalPages }} 页

生成卡密

支持设置有效天数、代理人,并快速分发给代理。

卡密列表

复制未使用卡密、导出 TXT 或 Excel 兼容 CSV。

{{ cdk.code }}

{{ cdk.valid_days }} 天 · {{ cdk.agent_name || '未填写代理人' }}

{{ cdk.is_used ? '已使用' : '未使用' }}

{{ cdk.used_by_display || '未使用' }}

{{ formatDateTime(cdk.used_at || cdk.created_at) }}

还没有匹配的卡密数据

共 {{ filteredCdkeys.length }} 张卡密,当前第 {{ cdkPage }} / {{ cdkTotalPages }} 页

新建班级配置

直接配置专业、接口、模板 JSON、通知和班级字段规则。

班级配置列表

支持直接编辑完整配置并保存。

{{ item.name }}

{{ item.is_active ? '启用中' : '已停用' }}

额外班级字段

系统状态

安全查看运行配置,不直接在线修改 `.env`。

数据库地址

{{ systemStatus.database_url_masked || '未加载' }}

HOST TOKEN

{{ systemStatus.host_token_configured ? ('已配置 · 后 4 位 ' + (systemStatus.host_token_suffix || '')) : '未配置' }}

HOST USERID

{{ systemStatus.host_userid_suffix ? ('后 4 位 ' + systemStatus.host_userid_suffix) : '未配置' }}

Admin Key

{{ systemStatus.admin_api_key_configured ? '已配置' : '仍为默认值' }}

Webhook 状态

{{ item.class_name }}

{{ item.has_webhook ? '已配置' : '未配置' }}

平台:{{ item.platform }}

尾号:{{ item.webhook_suffix || '无' }}

最近系统日志

查看最近接口访问、打卡任务和异常信息。

{{ systemLogs.length ? systemLogs.join('\n') : '暂无系统日志' }}