{{ viewTitle }}
👥
{{ stats.users }}
注册用户
🎫
{{ stats.availableCards }}
可用卡密
✅
{{ stats.usedCards }}
已用卡密
💰
¥{{ fmtMoney(stats.todayRecharge) }}
今日充值
📞
¥{{ fmtMoney(stats.todayGetPhone) }}
今日取号扣款
最近流水
查看全部 →| 时间 | 用户 | 类型 | 金额 | 说明 |
|---|---|---|---|---|
| {{ fmtTime(t.createdAt) }} | {{ t.telegramId || '-' }} | {{ typeLabel(t.type) }} | {{ t.amount>=0?'+':'' }}{{ fmtMoney(t.amount) }} | {{ t.remark || '-' }} |
暂无流水
用户列表({{ userTotal }})
| 用户 | TG ID | 等级 | 余额 | 流水 | 最近活跃 | 操作 |
|---|---|---|---|---|---|---|
| {{ displayName(u) }} | {{ u.telegramId }} | {{ u.level }} | ¥{{ fmtMoney(u.balance) }} | {{ u.transactionCount }} | {{ fmtTime(u.updatedAt) }} |
暂无用户
共 {{ userTotal }} 条 · 第 {{ userPage }} / {{ userTotalPages }} 页
账户充值(手动核销卡密)
¥{{ fmtMoney(rechargeBalance) }}
生成卡密
已生成 {{ generatedCards.length }} 张,请立即复制:
{{ c }}
卡密列表({{ cardTotal }})
| 卡密 | 面额 | 状态 | 创建时间 | 有效期至 | 使用者 | 操作 | |
|---|---|---|---|---|---|---|---|
| {{ c.code || '****-****-****-****' }} | ¥{{ fmtMoney(c.amount) }} | {{ cardStatusLabel(c.status) }} | {{ fmtTime(c.createdAt) }} | {{ c.expiresAt ? fmtTime(c.expiresAt) : '永久' }} | {{ c.usedBy || '-' }} |
暂无卡密
共 {{ cardTotal }} 条 · 第 {{ cardPage }} / {{ cardTotalPages }} 页
流水记录({{ txnTotal }})
| 时间 | 用户 | 类型 | 金额 | 变动前 | 变动后 | 说明 | 操作人 |
|---|---|---|---|---|---|---|---|
| {{ fmtTime(t.createdAt) }} | {{ t.telegramId || '-' }} | {{ typeLabel(t.type) }} | {{ t.amount>=0?'+':'' }}{{ fmtMoney(t.amount) }} | ¥{{ fmtMoney(t.beforeBalance) }} | ¥{{ fmtMoney(t.afterBalance) }} | {{ t.remark || '-' }} | {{ t.operator || '-' }} |
暂无流水
共 {{ txnTotal }} 条 · 第 {{ txnPage }} / {{ txnTotalPages }} 页
🤖 机器人运行状态
{{ botBusy ? '处理中…' : (botStatus.running ? '运行中' : '已停止') }}
⚠️ 机器人项目目录不存在:{{ botStatus.projectDir }},请在下方「机器人运行配置」里改成正确的目录。
⚠️ 目录 {{ botStatus.projectDir }} 里没有 package.json,请确认填的是机器人项目根目录。
⚠️ 没找到 .env:机器人需要它读取 MANAGEMENT_BASE_URL 与 BOT_API_KEY,否则启动后会立即退出。
⚠️ 没找到 node_modules:首次部署请在机器人项目目录执行 npm install。
⚠️ 目录里没有 src/index.js(或 index.js),请确认「启动命令」与项目结构匹配(默认 npm start 会执行 node src/index.js)。
检测到外部进程管理的机器人(PID {{ botExternalPids.join('、') }}):请到 Supervisor / systemd 里停止或重启,本页不会去杀它。
上次退出码:{{ botStatus.exitCode }}(0 表示正常退出,非 0 多为配置或网络问题,请看下方日志)。
点「启动」后后台会在服务器上运行 {{ botStatus.command }},并把它的输出写入上面的日志文件,页面下方实时显示;与机器人自身用 Supervisor 守护互不冲突,但同一份 .env/Token 不能同时跑两个实例。
机器人运行配置
保存后立即生效当前生效:{{ botStatus.projectDir }}。该目录需包含 package.json 与 src/index.js(以及机器人自己的 .env)。
默认 npm start。宝塔的 Node 装在 /www/server/nodejs/vXX/bin 下,而后台服务的 PATH 里通常没有它,
所以启动时后台会自动把检测到的 Node 目录加进子进程 PATH,npm start 一般可以直接用。
💡 检测到 Node:{{ botStatus.nodePath }};推荐启动命令:{{ botStatus.absCommand }}
⚠️ 没有检测到 Node:请到宝塔「软件商店 → Node.js 版本管理器」安装,或给后台服务加环境变量
BOT_NODE_DIR=/www/server/nodejs/v18.19.0/bin(改成实际版本号),也可以把启动命令直接写成绝对路径。
运行日志(最近 200 行)
{{ botLog || '(暂无日志,点上方「启动机器人」试试)' }}
机器人配置
短信平台配置
只填数字(SID 即平台的项目ID)。保存后机器人取号时立即使用新 SID,无需重启。
¥{{ fmtMoney(smsBalance) }}
保存会同时提交上方“机器人配置”与“短信平台配置”。机器人侧无需重启,改完 SID 后直接取号即可。
🔐 修改登录密码
长度 {{ security.minLength || 6 }} - {{ security.maxLength || 64 }} 位,不能是纯数字,建议字母 + 数字组合。
密码已保存在 data/store.json 的 auth 段({{ security.algo }} 加盐哈希,不可逆),上次修改:{{ fmtTime(security.updatedAt) }}。启动脚本里的 ADMIN_PASSWORD 环境变量已不再生效。
当前密码仍来自启动时的环境变量 ADMIN_PASSWORD(未设置时为默认值 admin123)。保存新密码后改用 store.json 里的加盐哈希,环境变量和启动脚本都不用再改。
保存成功后,其它设备上已登录的后台会自动退出,当前页面可继续使用。