代理人
{{ overview.agents }}
账户 / 已授权
{{ overview.users }} / {{ overview.usersAuthorized }}
任务
{{ overview.tasks }}
探活 / 抢购
{{ overview.probeTasks }} / {{ overview.rushTasks }}
门店探测
alias 或 shopRef 均可;日期用 yyMMdd
门店 {{ probeResult.shopRef }} · 身份 {{ probeResult.profile }} ·
resp2 {{ probeResult.resp2 }} · state
{{ probeResult.state }}
{{ s }}
该日无可约时段
链路走查
对着真实站点逐步跑预约链,每步的请求与响应都列出来
默认停在表单:此前的锁位会在返回前释放。选「到下单」会真的创建预约,
需要该账号已登录;可勾选下面的开关让它在创建后立刻取消。
走查结果
身份 {{ wbResult.profile }} · 停在 {{ wbResult.stoppedAt || '—' }}| 步骤 | 结果 | 耗时 | 请求 | 响应 / 错误 |
|---|---|---|---|---|
| {{ s.name }} | {{ s.ok ? '通过' : '失败' }} | {{ s.elapsed || '—' }} | {{ s.request ? JSON.stringify(s.request) : '—' }} | {{ s.error }} {{ JSON.stringify(s.response) }} {{ s.note || '—' }} |
{{ editingId ? '编辑任务 ' + editingId : '新建任务' }}
日期/时段用逗号分隔任务列表
共 {{ tasks.length }} 条 · 只有启用中的 PROBE 任务会被后台轮询| ID | 类型 | 门店 | 日期 | 账户 | 调度 | 上次结果 | 操作 | |
|---|---|---|---|---|---|---|---|---|
| {{ t.id }} | {{ t.type }} | {{ t.shopAlias }} | {{ (t.rule && t.rule.dates || []).join(', ') || '—' }} | {{ (t.userIds || []).length }} | {{ t.enabled ? '启用' : '暂停' }} | {{ t.status }} |
还没有任务
上次执行:{{ lastRun.users }} 个账户,锁定
{{ lastRun.dates }} 个日期
新增账户
账户 ID 留空自动生成;保存后可立即登录登录账号 {{ loginTarget.id }}
密码经 RSA-1024 加密后提交,不落页面账户
登录后会话凭证以 AES-256-GCM 落库| ID | 姓名 | 手机号 | 代理人 | 授权 | 备注 | 最近登录 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ u.id }} | {{ u.name || '—' }} | {{ maskPhone(u.phone) }} | {{ u.agentName || '—' }} | {{ u.authorizationStatus }} | {{ u.note || '—' }} | {{ fmtTime(u.lastLoginAt) }} |
还没有账户
新建代理人
邀请链接令牌留空则自动生成代理人列表
账户通过邀请令牌归属到代理人| ID | 名称 | 邀请令牌 | 账户数 | 状态 | 操作 | |
|---|---|---|---|---|---|---|
| {{ a.id }} | {{ a.name }} | {{ a.linkToken }} | {{ countUsersOf(a.id) }} | {{ a.active ? '启用' : '停用' }} |
还没有代理人
执行流水
共 {{ executions.length }} 条| 时间 | 任务 | 账户 | 日期 | 时段 | 锁位 | 预约号 | 状态 |
|---|---|---|---|---|---|---|---|
| {{ fmtTime(e.createdAt) }} | {{ e.taskId }} | {{ e.userId }} | {{ e.visitDate }} | {{ e.visitTime }} | {{ e.holdingSeq || '—' }} | {{ e.reservationRef || '—' }} | {{ e.status }} |
还没有执行记录
远端订单 {{ remoteDetail.reservationId }}
{{ JSON.stringify(remoteDetail.remote, null, 2) }}
门店对账
用账户的远端预约列表校正本地订单状态和列表侧预约号
账户 {{ reconcileResult.users }} · 匹配 {{ reconcileResult.matched }} ·
补齐预约号 {{ reconcileResult.linked }} · 本地标记取消 {{ reconcileResult.canceled }}
{{ e.userId }}:{{ e.error }}
过户 {{ transferTarget.id }}
先取消源预约,再用目标账号抢回座位——所以这是一次竞速订单
共 {{ reservations.length }} 笔| ID | 账户 | 门店 | 到访 | 人数 | 桌型 | 状态 | 支付 | 备注 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ r.id }} | {{ r.userId }} | {{ r.shopName || r.shopAlias || r.shopRef }} | {{ fmtYymmdd(r.visitYymmdd) }} {{ fmtHhmi(r.visitHhmi) }} | {{ r.personCount }} | {{ r.tableType || '—' }} | {{ reservationStatusLabel(r.status) }} |
{{ paymentLabel(r.paymentStatus) }}
{{ r.paymentAmount }} KRW
|
{{ r.note || '—' }}
请求:{{ r.requests }}
|
还没有订单
过户 = 取消源预约 + 目标账号重订。取消返回的那一刻座位就进入竞争,
所以服务端会按「重试次数」连续抢位;失败时会明确记录源预约是否已被取消。
探活间隔
{{ ops.runtime.probeInterval || '—' }}
探活 / 下单并发
{{ ops.runtime.probeConcurrency || '—' }} / {{ ops.runtime.bookingConcurrency || '—' }}
任务 / 启用
{{ (ops.counts.tasks || 0) }} / {{ (ops.counts.enabledTasks || 0) }}
活跃订单
{{ ops.counts.activeReservations || 0 }}
运行时设置
修改后立即生效,无需重启集群与传输
{{ ops.cluster.enabled ? '集群模式' : '单机模式' }}
在线节点:{{ (ops.cluster.liveNodes || []).join(', ') || '—' }}
门店
由任务与订单汇总| shopRef | alias | 名称 | 任务 | 订单 | 活跃 | 操作 |
|---|---|---|---|---|---|---|
| {{ shop.shopRef }} | {{ shop.shopAlias || '—' }} | {{ shop.shopName || '—' }} | {{ shop.taskCount }} | {{ shop.reservationCount }} | {{ shop.activeCount }} |
还没有门店数据
等候成交
最近 20 条 WAIT 成功记录| 时间 | 账户 | 门店 | 到访 | 预约号 |
|---|---|---|---|---|
| {{ fmtTime(e.createdAt) }} | {{ e.userId }} | {{ e.shopRef }} | {{ e.visitDate }} {{ e.visitTime }} | {{ e.reservationRef }} |
还没有等候成交
浏览器身份池
当前传输模式 {{ health.transport }}| 名称 | 族 | User-Agent |
|---|---|---|
| {{ p.name }} | {{ p.family }} | {{ p.userAgent }} |
未读取到身份
UA 与 TLS 指纹按同一浏览器打包成不可分割的身份;轮换只发生在身份之间。
命令行自检:make fingerprint