{{ tabTitle }}

组织 {{ me.tenant_id || '(平台全局)' }}
{{ me.role==='platform_admin'?'平台管理员':'组织管理员' }} {{ me.username }} ▾

组织管理
刷新 + 新建组织

{{ row.name }} {{ row.tenant_id }}
{{ row._user_count }}
用户数
{{ row._device_count }}
设备数
{{ formatTime(row.created_at) }}
创建时间
成员 ({{ row._user_count }}){{ row._expanded ? '▾' : '▸' }}
该组织下暂无用户
{{ u.username }} {{ u.role==='platform_admin' ? '平台管理员' : '组织管理员' }} {{ u.user_id }} {{ formatTime(u.created_at) }}
编辑 + 加用户
暂无数据
上一页 第 {{ tenantPage }} / {{ tenantTotalPages }} 页(共 {{ filteredTenantRows.length }} 条) 下一页

用户管理
+ 新建用户 刷新

暂无数据
上一页 第 {{ adminPage }} / {{ adminTotalPages }} 页(共 {{ filteredUsers.length }} 条) 下一页

卡密管理(边缘端 LJ)
导出未使用 生成卡密 刷新

暂无数据
上一页 第 {{ cardPage }} / {{ cardTotalPages }} 页(共 {{ filteredCards.length }} 条) 下一页

激活码管理(C端 DJ 码)
导出未使用 生成激活码 刷新

暂无数据
上一页 第 {{ codePage }} / {{ codeTotalPages }} 页(共 {{ filteredCodes.length }} 条) 下一页
0=不限期 激活码仅显示一次,关闭后不可再查明文,请立即复制分发。
{{ c }}
{{ approvalStats.pending||0 }}
待审批
{{ approvalStats.approved||0 }}
已通过
{{ approvalStats.rejected||0 }}
已拒绝
{{ approvalStats.expired||0 }}
已过期

审批队列
刷新

暂无审批单
上一页 第 {{ approvalPage }} / {{ approvalTotalPages }} 页(共 {{ filteredApprovals.length }} 条) 下一页
{{ financeMargin.revenue||0 }}
累计收入(元)
{{ financeMargin.cost||0 }}
进货成本(元)
{{ financeMargin.gross_margin||0 }}
毛利(元)
{{ financeMargin.calls||0 }}
AI调用次数
人工充值(C端账户)
充值
工序定价新增定价

订单管理
导出 CSV 刷新

暂无数据
上一页 第 {{ orderPage }} / {{ orderTotalPages }} 页(共 {{ filteredOrders.length }} 条) 下一页

设备大屏 · 组织 {{ me.tenant_id || '(平台全局)' }}

设备列表
链路拓扑
边在线 边离线 含离线设备 云端链路:{{ topo.cloud ? topo.cloud.transport.toUpperCase() : '—' }} 复位视图 刷新 {{ topoAuto?'自动刷新 ON':'自动刷新 OFF' }}
◀ 状态上报 指令下发 ▶
☁
{{ topo.cloud.name }}
云端中心 · {{ topo.cloud.transport.toUpperCase() }}
{{ topo.cloud.mqtt_broker || '直连 HTTP' }}
运行中
{{ e.note || e.node_id }} ✎
{{ e.node_id }}
组织{{ e.tenant_name || e.tenant_id }} 设备{{ (e.devices||[]).length }}/{{ e.device_count||0 }} 版本{{ e.client_version || '—' }} 系统{{ topoOsShort(e.os_info) }} IP{{ e.ip || '—' }} 状态{{ e.status || '—' }} / {{ e.online ? '在线' : '离线' }} 心跳{{ e.seconds_since_heartbeat==null?'—':e.seconds_since_heartbeat+'s前' }}
📱 设备 {{ devOnline(e) }}/{{ (e.devices||[]).length }} 详情 ›
{{ topoDevShort(d) }} +{{ (e.devices||[]).length-topoDevMax }}
暂无边缘节点

任务编排 · 组织 {{ me.tenant_id || '(平台全局)' }}
批量删除{{ taskSel.length ? '(' + taskSel.length + ')' : '' }} 新建任务

AI 模型 · Key 池(多供应商轮询 + 配额熔断) 添加 Key

组织 AI 额度(按组织计费)

店铺管理({{ filteredStores.length }})· 一店一环境一 IP,防关联硬校验 + 新建店铺 CSV 批量导入 + 新建店组 刷新

PC 店铺环境({{ profiles.length }})· 独立指纹+代理,登录态持久化,单节点上限可配 + 新建环境 刷新

代理 IP 池({{ proxies.length }})· 一 IP 绑一店不漂移 + 新建代理 刷新

商品档案({{ products.length }})· 一次建档,M2 起 AI 生成 N 店差异化变体 + 新建商品 刷新

定时任务({{ schedules.length }})· cron 到期自动按店铺组/节点下发,调度器每 30s 扫描 + 新建定时任务 刷新

经营日报 · 多店采集聚合(tb_daily/tb_health 结果落库后自动汇总) 推钉钉 推送配置 刷新

未采到数据({{ reportSummary.missing.length }} 家):{{ reportSummary.missing.join('、') }}(检查店铺绑定执行端与定时任务)

抖音群资产 · 加群任务产出(入群状态 / 门槛类型 / 存活巡检) 刷新

总群数 {{ dyGroupSummary.total }} 已进群 {{ (dyGroupSummary.by_join || {}).approved || 0 }} 待审核 {{ (dyGroupSummary.by_join || {}).applied || 0 }} 存活率 {{ dyGroupSummary.alive_rate != null ? (dyGroupSummary.alive_rate * 100).toFixed(0) + '%' : '未巡检' }}

手机分组 · 按组编排手机,不同组绑定不同 Skill + 新建分组

GROUP {{ skillName(row.skill_id) }}
{{ row.name }}
{{ row.desc || '—' }}
📱 {{ row.device_count || 0 }} 台设备 点击查看设备
编辑 删除
暂无分组,点右上角「+ 新建分组」。

分组「{{ currentGroup.name }}」内设备({{ groupDevices.length }}) 刷新

加入分组

Skill 库({{ skills.length }})· 云端统一管理技能 ⚙ 平台管理 ⇪ 分发全部给组织 + 上传 / 新建 Skill

{{ grp.label }}

({{ grp.items.length }})
{{ row._no }} {{ grp.label }} {{ row.has_code?'已上传':'骨架' }}
{{ row.name || row.skill_id }}
{{ row.skill_id }}
{{ row.desc || '—' }}
v{{ row.version || '—' }} {{ row.enabled ? '启用' : '停用' }}
详情 编辑 分发 删除
暂无 Skill,点右上角「上传 / 新建 Skill」。

内容目录 · 客户端菜单云端统发({{ catalogItems.length }} 项) + 新建目录项

MQTT 管理 · EMQX 消息总线 ↗ 新窗口打开 EMQX 后台

若上方空白/被拦截(EMQX 默认禁止 iframe 嵌入),请点右上角「新窗口打开 EMQX 后台」。 默认账号可在 EMQX 容器初始化时设定,或查 docker-compose 中的 EMQX_DASHBOARD__DEFAULT_USER__* 环境变量。
平台信息
保存站点基础
服务信息
版本
v0.1.0
服务地址
{{ location.host }}
部署形态
Docker Compose(云-边-端调度底座)
登录安全
超过即锁定该账号 到期自动登出 保存安全设置
修改我的密码
修改密码 修改成功后需重新登录
注册与套餐
开启后登录页显示「注册账号」 生成卡密时默认数量 组织列表将标红提醒即将到期 保存业务参数
任务调度
同时 running 的任务数上限 单设备连续失败该步数进入维护态 窗口内失败率超该值熔断 热下发失败自动回退上一版本 AI 评论/规划优先使用该模型 保存调度与 AI 参数
与 cloud-lab.cn「AI 设置」同一套配置形态:填一次 Base URL + API Key,分别选文本 / 图片 / 视频 / 音频模型即可。 短剧工作流(剧本 / 定妆图)走这里的文本与图片模型;若此处未配置,会自动回退到「AI 模型 (Key池)」里的 key。
连接配置
四模态模型
视频参数(可选)
保存 AI 配置 测试聊天 测试图片 测试视频 测试音频 {{ aiTestMsg }}
任务下发通道
跟随配置 HTTP 直推 EMQX MQTT 保存并热切换 保存后立即生效;失败则保留旧通道,可重启容器
查询 刷新
节点列表({{ filteredEdges.length }})· {{ edgesListTitle }}
全部 在线 离线
{{ edgesAuto ? '自动刷新 ON' : '自动刷新 OFF' }} 手动刷新
{{ row.node_id }} {{ row.online ? (row.status==='running'?'运行中':'在线') : '离线' }}
组织
{{ row.tenant_id }}
账号
{{ row.username || '—' }}
版本
{{ row.client_version }}
鉴权
{{ row.auth_mode==='code'?'授权码':'账号' }}
出口IP
{{ row.ip }}
设备
{{ row.device_count || 0 }}
失败
{{ (row.stats&&row.stats.consecutive_fail)||0 }} / {{ (row.stats&&row.stats.failed_total)||0 }}
最后心跳
{{ timeAgo(row.seconds_since_heartbeat) }}
详情 重启 重载配置 禁用 启用 删除
暂无节点
{{ pwdTarget?.username }} {{ pwdTarget?.user_id }} {{ planTarget?.username }} {{ planTarget?.user_id }} {{ editTarget?.user_id }}
复制全部卡密
用户名:{{ me.username }}
角色:{{ roleLabel(me.role) }}
账号ID:{{ me.user_id }}
组织:{{ me.tenant_id || '(平台全局)' }}
套餐:{{ planLabel(me.plan) }}无
到期:{{ me.expire_at ? formatTime(me.expire_at) : '—' }}
卡密兑换: 兑换
我的订单 + 转账填单
暂无订单
必填参数留空 = 任务秒失败(如 douyin_join_group 必须带 keywords): {"keywords":"AI漫剧","max_groups":5}
0=不限 0=不限 0=不限
未找到想要的 Skill?切到「Skill 库」页上传
运行参数(JSON),创建任务时自动合并进任务参数下发至电脑端。
示例:{"dm_enabled": true, "dm_text": "你好,看到你在 ai漫剧 下的评论…"} —— dm_enabled 为私信开关。
拖入或点击选择 Skill 文件
支持 .yaml/.yml/.json/.py/.lua(可留空作骨架占位)
大模型 智能体 数字人
透明下发,客户端合并渲染:cat 分类 / vendor 厂商 / tag 角标。
上架(下发) 下架(不下发)
一般选平台库(default),把已上传的代码复制给目标组织。
开启=目标组织已有的同名 Skill 被更新为新代码(升级时推荐)
{{ k }} {{ v }}
+ 新增平台
{{ skillDetail.rec.skill_id }} {{ skillDetail.rec.name }} {{ skillDetail.rec.version }} {{ skillDetail.rec.sha256 || '—' }} {{ skillDetail.rec.desc || '—' }}
代码内容:
{{ skillDetailCode }}
⋮
基本信息
节点 ID
{{ edgeDetail.node_id }}
备注
{{ edgeDetail.note || '—' }} ✎ 编辑
组织
{{ edgeDetail.tenant_name || edgeDetail.tenant_id }}
账号 / 鉴权
{{ edgeDetail.username }} / {{ edgeDetail.auth_mode }}
版本
{{ edgeDetail.client_version }}
OS / 主机
{{ edgeDetail.os_info }}
出口 IP
{{ edgeDetail.ip }}
登录时间
{{ formatTime(edgeDetail.logged_in_at) }}
最后心跳
{{ formatTime(edgeDetail.last_heartbeat_at) }} ({{ timeAgo(edgeDetail.seconds_since_heartbeat) }})
状态
{{ edgeDetail.status }} / {{ edgeDetail.online ? '在线' : '离线' }}
启用
{{ edgeDetail.enabled ? '是' : '否(被禁用)' }}
最近错误
{{ edgeDetail.last_error || '—' }}
统计
设备数
{{ edgeDetailDevices.length }}
当前任务
{{ edgeDetail.current_task_id || '—' }}
步骤统计
连续失败 {{ edgeDetail.stats?.consecutive_fail || 0 }} · 总失败 {{ edgeDetail.stats?.failed_total || 0 }} · 跳过 {{ edgeDetail.stats?.skipped_total || 0 }} · 失败率 {{ ((edgeDetail.stats?.fail_rate||0)*100).toFixed(1) }}% · 熔断 {{ edgeDetail.stats?.in_maintain ? '是':'否' }} · 启动 {{ formatUptime(edgeDetail.stats?.uptime_sec) }}
手机设备({{ edgeDetailDevices.length }})已选:{{ edgeDevSel }}(点卡片取消)
{{ d.name || d.model || '未命名设备' }} {{ d.serial }}
Android {{ d.android_version || '—' }} {{ d.battery != null ? d.battery + '%' : '—' }} {{ formatTime(d.last_seen) }}
暂无设备

事件流水 ({{ edgeEventsShow.length }}) 设备 {{ edgeDevSel }}

刷新 全部清除
{{ edgeDevSel ? '该设备暂无事件' : '暂无事件' }}
{{ ev.event_type }} {{ formatTime(ev.created_at) }}
{{ ev.message }}
{{ JSON.stringify(ev.payload, null, 2) }}
删除

命令历史 ({{ edgeCommandsShow.length }}) 设备 {{ edgeDevSel }}

刷新 全部清除
{{ edgeCmdDlg.cmd_type }} 无参数

把以下授权码粘贴到边缘端登录页的「授权码」框,下次启动可免密码登录。

{{ edgeCodeDlg.code }}

节点 {{ edgeCodeDlg.node_id }} · 组织 {{ edgeCodeDlg.tenant_id }} · {{ edgeCodeDlg.expires_in_days }} 天有效

表头支持中文/英文:平台,店铺名,账号,类目,代理ID(platform,shop_name,account,category,proxy_id)。防关联冲突的行会整行拒绝,不影响其他行。

成功 {{ importResult.created }} 家,失败 {{ importResult.failed.length }} 行。

第 {{ f.row + 1 }} 行:{{ f.reason }}

防关联规则:同一环境不可同平台绑多店;同一代理 IP 只可绑一店且不漂移。冲突会被直接拒绝。

钉钉群 → 设置 → 智能群助手 → 添加"自定义机器人",安全设置选加签,把 webhook 和密钥粘贴到这里。配置后建"定时任务"(Skill 选 ec_report_push)即可定时推送。

预览:{{ cronDescPreview }}
店铺组 指定节点