{{ k.label }}
{{ k.tag }}
{{ k.value }}{{ k.unit }}
{{ k.sub }}
生成量 / 订单量趋势
柱=生成次数 · 折线=订单数 · 近 {{ range }} 天任务状态分布
共 {{ taskTotal }} 个任务
{{ s.label }}{{ s.value }}
暂无任务记录
景点模板分布
在线 / 全部今日 24 小时生成曲线
今日共 {{ d.usage_today || 0 }} 次实时事件流
最近 {{ (d.recent||[]).length }} 条
{{ r.created_at }}
{{ r.style_key || r.task_type || '任务' }}
{{ statusText(r.status) }}
暂无任务
设备台账
{{ createdToken }}
⚠ 设备 Token 仅显示一次,请立即复制保存!
无封面
{{ s.name }}
封面图(列表展示用)
无封面
参考图
已启用
无参考图
缩略图(549 个模板有此图)
无缩略图
🎟️ 生成优惠券
一次生成一批唯一券码,生成后可复制或打印
{{ c2strengthHint }}
批次 {{ c2last.batch_no }} · {{ c2last.codes.length }} 张 · 面额 ¥{{ (c2last.amount_fen/100).toFixed(2) }}
{{ c }}
📊 概览
未使用 / 已核销 / 已停用的实时统计{{ c2stat.unused }}
未使用
{{ c2stat.used }}
已核销
{{ c2stat.disabled }}
已停用
¥{{ (c2stat.used_amount_fen/100).toFixed(2) }}
累计抵扣
最近批次
| 批次号 | 景点 | 面额 | 数量 | 生成时间 | 操作 |
|---|---|---|---|---|---|
| {{ b.batch_no }} | {{ b.scenic_name || '全景点通用' }} | ¥{{ (b.amount_fen/100).toFixed(2) }} | {{ b.count }} | {{ (b.created_at||'').replace('T',' ') }} |
📋 券码列表
共 {{ c2total }} 张可按景点、批次、生成时间组合筛选。补打全部筛选结果,不限当前页;每次最多 2000 张,沿用原券码和核销状态。
| 券码 | 批次 | 景点 | 面额 | 状态 | 核销机器 | 订单号 | 时间 | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ r.code }} | {{ r.batch_no }} | {{ r.scenic_name || '全景点通用' }} | ¥{{ (r.amount_fen/100).toFixed(2) }} | {{ c2StatusText(r.status) }} | {{ r.kiosk_id || '—' }} | {{ r.order_no || '—' }} | {{ (r.used_at || r.created_at || '').replace('T',' ') }} | — |
| 暂无券码,先在上方生成一批 | ||||||||
第 {{ c2page }} 页 · 共 {{ c2total }} 张
确认补打二维码
共 {{ c2reprint.items.length }} 张,按本次筛选结果打印,保留各券原来的面额、景点和有效期。
补打不会生成新券,也不会恢复已核销、已停用或已过期的券。
其中 {{ c2reprintInvalid }} 张已核销、已停用或已过期,券面会标注;可在列表选择未使用状态并缩小范围后重新筛选。
| 券码 | 批次 | 景点 | 面额 | 状态 |
|---|---|---|---|---|
| {{ r.code }} | {{ r.batch_no }} | {{ r.scenic_name }} | ¥{{ (r.amount_fen/100).toFixed(2) }} | {{ c2PrintStatus(r) }} |
预览显示前 50 张,打印包含全部 {{ c2reprint.items.length }} 张。
◈ 一体机运营总览
最近刷新 {{ opSum.updated_at || '—' }}
{{ opSum.device_online }} / {{ opSum.device_total }}
在线设备(15 分钟内)
{{ opSum.tasks_today }}
今日生成任务
{{ opSum.success_rate }}%
生成成功率
¥{{ (opSum.income_today_fen/100).toFixed(2) }}
今日实收
¥{{ (opSum.cost_today_fen/100).toFixed(2) }}
今日模型成本
{{ opSum.fail_today }}
失败任务
当前设备状态
| 设备 | 景点 | 状态 | 心跳 | 打印机 | 相机 | 最近任务 | 操作 |
|---|---|---|---|---|---|---|---|
{{ k.name }} {{ k.kiosk_id }} |
{{ k.scene_name || '—' }} | {{ opHbText(k.heartbeat_state) }} 已归档 已停用 已注销 | {{ k.last_heartbeat_at || '未上报' }} · {{ k.latency_ms }}ms | {{ k.printer_state }} | {{ k.camera_state }} | {{ k.last_task_at || '—' }} · {{ statusText(k.last_task_status) }} | |
| 没有符合条件的设备 | |||||||
任务记录
| 任务ID | 设备 | 景点 | 状态 | 实际使用模型 | 审核引擎 | 单次成本 | 时间 |
|---|---|---|---|---|---|---|---|
| {{ t.task_id }} | {{ t.kiosk_name || '—' }} | {{ t.scene_name }} | {{ statusText(t.status) }} | {{ t.model_name || '—' }} | {{ t.safety_label }} | ¥{{ (t.cost_fen/100).toFixed(2) }} | {{ t.started_at }} |
| 该范围内没有任务记录 | |||||||
第 {{ opTaskPage }} 页 · 共 {{ opTaskTotal }} 条
经营分析
统计区间:{{ opUsage.start }} ~ {{ opUsage.end }}
{{ opUsage.summary.tasks }}
任务量
{{ opUsage.summary.success }}
成功
{{ opUsage.summary.failed }}
失败
{{ opUsage.summary.success_rate }}%
成功率
{{ opUsage.summary.orders }} / {{ opUsage.summary.paid_orders }} 已付
订单
¥{{ (opUsage.summary.income_fen/100).toFixed(2) }}
实收
¥{{ (opUsage.summary.cost_fen/100).toFixed(2) }}
模型成本
¥{{ (opUsage.summary.profit_fen/100).toFixed(2) }}
毛利(实收-成本)
模型单价(元/次成功)
当前 {{ (opCost.unit_cost_fen/100).toFixed(2) }} 元/次;按成功任务数估算总成本,不含兜底前重试费用
按日趋势(任务量 / 实收)
按景点分布
| 景点 | 任务量 |
|---|---|
| {{ s.scene_name }} | {{ s.tasks }} |
| 该区间没有任务 | |
{{ opTab==='reports'?'举报信息':'用户反馈' }}
共 {{ opReports.length }} 条 · 处理记录会写审计日志
| ID | 设备 | 景点 | 内容摘要 | 状态 | 提交时间 | 操作 |
|---|---|---|---|---|---|---|
| {{ r.id }} | {{ r.kiosk_id || '—' }} | {{ r.scene || '—' }} | {{ r.summary || '—' }} | {{ r.status==='handled'?'已处理':'待处理' }} | {{ r.created_at }} | |
| 暂无记录(一体机端上报后自动出现在这里) | ||||||
处理 {{ opTab==='reports'?'举报':'反馈' }} #{{ opHandle.row?.id }}
{{ opHandle.row?.summary || '—' }}
远程命令 · {{ opCmd.row?.name || opCmd.row?.kiosk_id }}
命令进入设备轮询队列,1800 秒内有效;一体机下次心跳(约 10–30 秒)取到后执行并回传结果。
最近命令
| 时间 | 命令 | 状态 | 结果 |
|---|---|---|---|
| {{ c.created_at }} | {{ c.command }} | {{ opCmdText(c.status) }} | {{ c.result || '—' }} |
| 还没有下发过命令 | |||
| ID | 手机号 | 昵称 | 角色 | 身份 | 关联景点 | 积分 | 结算资料 | 状态 | 注册时间 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ row.id }} | {{ row.phone || row.username }} | {{ row.nickname }} | {{ roleLabel(row.role) }} | {{ r }} {{ row.merchant_title }} 其他 - | {{ sceneName(sc) }} - | {{ row.points_balance }} | {{ (row.settlement && row.settlement.filled) ? (row.settlement.hint || '已填写') : '未填写' }} | {{ row.is_active ? '正常':'停用' }} | {{ row.created_at }} | |
| 暂无用户 | ||||||||||
共 {{ usersTotal }} 个用户
第 {{ userFilter.page }} / {{ Math.max(1, Math.ceil(usersTotal / userFilter.size)) }} 页
| 时间 | 操作者 | 动作 | 对象 | 详情 |
|---|---|---|---|---|
| {{ r.time }} | {{ r.actor }} | {{ r.action }} | {{ r.target }} | {{ r.detail }} |
| 暂无操作记录,做一次用户编辑/停用后这里就会出现 | ||||
共 {{ auditTotal }} 条
第 {{ auditPage }} / {{ Math.max(1, Math.ceil(auditTotal / 20)) }} 页
{{ userDialogId ? '编辑用户' : '新建用户' }}
商户信息
汇付结算资料
汇付结算资料
当前状态
{{ (huifuRow && huifuRow.settlement && huifuRow.settlement.filled) ? ('已填写 · ' + (huifuRow.settlement.hint||'')) : '未填写' }}
汇付天下结算要求开户名与身份证一致;保存后仅后台可查,列表只显示脱敏信息(****尾号)。
重置密码
{{ resetRow ? (resetRow.nickname || resetRow.username) : '' }}
新密码:{{ newPwdResult }}
请复制保存后告知用户,仅显示这一次。
分成管理
分成跟着景点走:为每个景点配置各商户身份的分成比例(%),并绑定该身份的分账用户 member_id。合计超过 100% 无法保存,剩余归平台。
| 景点 | 当前分成配置 | 操作 |
|---|---|---|
{{ s.name }} {{ s.scene }} |
{{ r }} {{ splitCfg(s.scene,r).percent }}% · {{ splitCfg(s.scene,r).member_id }} · 未绑id 未配置 | |
| 暂无景点 | ||
配置「{{ splitEditName }}」分成
%
{{ splitTotal }}%
超过 100%,无法保存
剩余 {{ 100 - splitTotal }}% 归平台
分账接收方管理
新增接收方时系统生成 member_id,可在「分成管理」里绑定到对应角色。支持个人账户(对私)与对公账户(企业);对公账户的汇付编码按官方编码表自动带出。
共 {{ smMembers.length }} 个接收方
| 类型 | 名称 | member_id | 证件号 / 识别号 | 账号 | 开户行 | 电话 | 备注 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| {{ m.acct_type==='enterprise'?'对公':'个人' }} | {{ m.name }} | {{ m.member_id }} | {{ maskCert(m) }} | {{ maskCard(m.bank_card) }} | {{ m.bank_name || '-' }} 编码 {{ m.bank_code }} |
{{ m.phone || '-' }} | {{ m.remark || '-' }} | {{ m.created_at }} | |
| 暂无分账接收方,点右上「新增接收方」创建 | |||||||||
新增分账接收方
{{ b.name }}{{ b.code }}
汇付对公必填编码(选择开户行与地区后自动带出,可手动修正)
{{ ptOverview.total_points ?? 0 }}
平台积分总量
¥{{ ptOverview.total_recharge ?? 0 }}
累计充值(元)
{{ ptOverview.total_consumed ?? 0 }}
累计消耗
{{ ptOverview.active_users ?? 0 }}
活跃用户(有积分流水)
给用户加积分
用户积分排行
| ID | 用户名 | 昵称 | 角色 | 积分余额 | 操作 |
|---|---|---|---|---|---|
| {{ u.id }} | {{ u.username }} | {{ u.nickname || '-' }} | {{ roleLabel(u.role) }} | {{ u.points_balance }} | |
| 暂无用户 | |||||
共 {{ ptUserTotal }} 个用户
第 {{ ptPage }} / {{ Math.max(1, Math.ceil(ptUserTotal/ptSize)) }} 页
充值订单
| 订单号 | 用户 ID | 金额(元) | 积分 | 渠道 | 状态 | 支付时间 | 创建时间 |
|---|---|---|---|---|---|---|---|
| {{ o.order_no }} | {{ o.user_id }} | ¥{{ o.amount }} | {{ o.points }} | {{ o.channel==='wechat'?'微信':'支付宝' }} | {{ ptStatusText(o.status) }} | {{ o.paid_at || '-' }} | {{ o.created_at }} |
| 暂无充值订单 | |||||||
共 {{ ptOrderTotal }} 笔
第 {{ ptOrderPage }} / {{ Math.max(1, Math.ceil(ptOrderTotal/10)) }} 页
用户 {{ ptHistoryUser }} 积分流水
| 时间 | 类型 | 说明 | 变动 | 余额 |
|---|---|---|---|---|
| {{ x.time }} | {{ x.biz_type_label }} | {{ x.description || '-' }} | {{ x.change_amount>0?'+':'' }}{{ x.change_amount }} | {{ x.balance_after }} |
| 暂无积分流水 | ||||
{{ akTotal }}
Key 总数
{{ akStats.active }}
本页已启用
{{ akStats.inactive }}
本页已禁用
API Key 全局管理
| ID | 用户 | Key 名称 | Key | 状态 | 最后使用 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ k.id }} | {{ k.username }} {{ k.nickname || '-' }} |
{{ k.name }} | {{ k.key_prefix }}•••••••••••• | {{ k.is_active?'启用':'已禁用' }} | {{ k.last_used_at || '从未使用' }} | {{ k.created_at }} | |
| 暂无 API Key 记录,点右上「为用户生成 Key」创建 | |||||||
共 {{ akTotal }} 条
第 {{ akPage }} / {{ Math.max(1, Math.ceil(akTotal/akSize)) }} 页
为用户生成 API Key
新 Key:{{ akCreatedKey }}
仅显示这一次,请复制保存后交给用户。
场景商品(景点)
AI 模型配置
配置默认模型和接口地址。API Key 加密保存,留空不会覆盖原密钥。
{{ mc.text_model || '未配置' }}
默认文本模型
{{ mc.image_model || '未配置' }}
默认图像模型
{{ mcNodes.length }}
图像负载节点
{{ mcVideo.length }}
可选视频模型
默认文本模型
用于剧本、提示词和文本分析。
默认图像模型
文生图/图生图默认使用此模型;负载节点在下方维护。当前主力通道 gpt-image-2。
负载节点(默认接口不可用时的备用通道,按权重调度)
| 节点名称 | 节点地址 | API Key | 调度权重 | 启用 | 操作 |
|---|---|---|---|---|---|
| 还没有节点,点下方「添加节点」 | |||||
聚合图像模型(agg_image_N · 生成链路按场景优先级引用,保存后请勿随意调序)
agg_image_{{ i }} · {{ m.name || '未命名模型' }}
视频模型
可选视频模型供一体机「动态旅拍」调用,按列表顺序展示。
视频模型列表
{{ m.name || ('视频模型 '+ (i+1)) }}
{{ mcTestResult.text }}
💳 支付配置
{{ pay2.mock_payment?'Mock 模式(模拟支付,不产生真实扣款)':'真实支付模式' }}
密钥类字段留空表示不修改(保留已存密钥)。上传私钥/公钥只记录文件与大小,不会把明文写进数据库。
微信支付(Native 扫码)
商户平台 → API 安全 下载
{{ payKeyHint.wechat }}
汇付 Adapay(支付宝正扫)
用于支付宝扫码与分账
{{ payKeyHint.adapay }}
全局支付
作用于所有一体机的下单逻辑支付宝直连(可选)
未接汇付时启用