正在检查登录状态…
当前账号还没有被分配任何权限,请联系管理员开通后再使用。

游戏管理

新建游戏自动带出三个框架维度:人物属性 / 功能养成 / 验证玩法

新建游戏

游戏框架 {{ currentGameName }}

一级三个维度固定,二级与三级自由拆解,用于梳理游戏的功能结构

全部展开 全部收起
{{ l1.name }}
{{ fwDesc(l1.name) }}
{{ l1.children.length }} 个模块 · {{ totalLogs(l1) }} 本日志
+ 新增模块
还没有二级模块,点上方「+ 新增模块」
{{ openNodes[l2.id] ? '▾' : '▸' }} {{ l2.name }} {{ l2.log_count }} 日志 + 三级 改名 删
无三级分类
{{ l3.name }} {{ l3.log_count }} 日志 改名 删

日志 {{ currentGameName }}

先建日志、定好字段 → 传截图并绑定这本日志 → AI 按字段清单逐项读值 → 勾选后写入记录;同一张图重复上传会自动跳过

新建日志 识别设置 模型接入
{{ logShotNodeLabel }} {{ logShotList.length }} 张
{{ logShotBatchRunning ? '识别中…' : '一键识别 ' + logShotList.filter(s => s.ai_status !== 'done').length + ' 张' }} 上传截图
{{ logShotBatchText }}
识别中 {{ logShotBusySec(s.id) }}s 模型较慢,仍在识别,别关页面…
{{ s.log_name || '未绑日志' }} {{ s.role_name || '未选角色' }} · {{ s.record_date }}
已入库 待写入 识别失败 未绑日志 未识别
绑定日志 {{ isLogShotBusy(s.id) ? '识别中' : '识别' }} 本批结果 重识 删
{{ logShotNode.status === 'un' ? '这个范围内没有待识别的截图。' : '这个范围内没有已识别的截图。' }}
点右上角「上传截图」,先选目标日志再拖图 —— AI 会按这本日志的字段去读。
点日志名称查看数据;行尾可「改名」「删除」。删除会连该日志的记录一起清掉,需二次确认。 新建日志请点右上角「新建日志」,先定义字段,再上传截图绑定识别。
← 返回日志列表

{{ currentLog ? currentLog.name : '' }}

{{ currentLog.category_path }} · 表头 {{ currentLog ? currentLog.fields.length + 2 + (currentLog.row_key_name ? 1 : 0) : 0 }} 列 · 共 {{ entries.length }} 条数据 (按「{{ currentLog.row_key_name }}」分行,同一天可多条)

查看识别提示词 上传截图 表头设置 新增记录 删除本日志
字段
角色名称 日期 {{ currentLog.row_key_name }} {{ f.name }}({{ f.unit }}) 还没有自定义表头,点右上「表头设置」添加
数据展示
{{ r.name }} 角色:{{ matrix.roles[0].name }} {{ matrix.rows.length }} 条记录 · {{ matrix.headers.length }} 列
还没有数据
点右上「新增记录」,选角色与日期后即可逐项录入
新增第一条记录
#
{{ h.name }}
({{ h.unit }}) 固定
操作
{{ ri + 1 }} {{ c.text }}
编辑 删
{{ row.filled }}/{{ row.total }}
一行 = 一条记录(某角色某天)。绿点 = 已确认入库,灰点 = 草稿; 「已填/总数」为该行已填写的自定义列数。带「固定」标记的两列由系统自动生成。 双击任意数值单元格可直接改,回车保存、Esc 取消; 识别错的行用行尾「删」清掉,缺的记录用右上「新增记录」补。
← 返回数据列表

{{ currentLog ? currentLog.name : '' }}

{{ entryStatus==='confirmed' ? '已确认' : '草稿' }} 录入方式:{{ entrySource==='ai' ? 'AI 识别' : '手动' }}

保存草稿 确认入库
方式一 · 手动录入
左侧传图对照,右侧逐项填写(当前可用)
方式二 · 截图 AI 识别 {{ aiOk ? '可用' : '待接入' }}
上传截图后按本日志字段定义自动提取 看提示词
截图 上传截图
暂无截图
手动录入时可不上传;接 AI 后为必需
{{ s.original_name || '截图' }} 移除
数据填写 · {{ filledCount }} / {{ totalFieldCount }} 已填
固定列
数值类字段请填纯数字(如 123、1.2万、27.6%)。填「4-4」这类章节-关卡内容会被标为 待核对并保留原文——说明该字段类型应为「文本」或「复合值」,可到「字段设置」调整。

数据展示 {{ currentGameName }}

按日志分组、指标为行、日期为列,列头显示为第 N 天

保存为视图 导出 Excel
配置已收起 {{ cfgSummary }} 重新生成 {{ cfgCollapsed ? '展开配置' : '收起配置' }}
选择日志与字段 已选 {{ viewGroups.length }} 本 / {{ selectedFieldCount }} 个字段
全选 清空
{{ log.name }} {{ fieldCountOf(log) }}
{{ f.name }}
该日志还没定义表头
{{ metricLabel(m, log.id) }} ×
+ 统计指标
暂无日志
筛选
今天
日期自动显示为「第N天」,起始日即第1天;未选起始日则取最早数据日。
生成表格
已保存视图
{{ v.name }} 删
聚合结果 · {{ pivot.role_name }} {{ pivot.start_date }} 起 · 共 {{ pivot.day_count }} 天 · {{ pivot.groups.length }} 本日志 · {{ pivot.metric_count }} 个指标
日志 指标
{{ h.label }}
{{ h.date_label }}

静态配置库

主线任务、关卡、等级数值等一次性维护的数据,不属每日记录

导入 Excel 新建配置表

商业化 {{ currentGameName }}

建分类 → 传截图 → AI 读出活动名与时间 → 排期表

识别设置 模型接入
开服日 排期表的「第1天」= 开服日 保存
+ 新建分类
{{ cat.name }} {{ cat.activities.length }} 个活动
改名 删
识别依据:{{ cat.hint }}
{{ a.name }} × 还没有活动 —— 传截图识别后会自动出现在这里
还没有分类。这里只建一级分类就够了,活动名交给 AI 从截图里读。
例如:返利类 / 特权类 / 直购类 / 冲榜活动 / 基金战令 / 限时礼包
{{ commShotNodeLabel }} {{ commShotList.length }} 张
{{ commRecognizing ? '识别中…' : '一键识别 ' + commShotList.length + ' 张' }} {{ commStoring ? '入库中…' : '一键入库 ' + commShotPendingCount + ' 张' }} 上传截图
{{ commBatchText }}
至 含待确认 刷新 共 {{ commSchedule.day_count }} 天 · {{ commSchedule.total_slots }} 段排期
导出 Excel
{{ commSchedule.game_name }} · 活动排期 开服日 {{ commSchedule.open_date || '未设置(以最早排期为第1天)' }} 箭头=活动周期 斜纹=常驻 虚线左端=首日未知
日期列较多时,左右滚动左侧两列保持冻结
活动大类 活动名称 {{ h.day }}天
{{ h.label }}
{{ h.weekday }}
还没有排期数据。先上传活动截图并识别,或在「分类」页维护分类后手工加排期。

账号管理

新建账号、设置人员名称、按「游戏 + 功能」分配阅读或编辑权限

新增账号
请先在左侧选择一个游戏,或到「游戏管理」新建
自动创建三个一级维度
当前游戏:{{ roleForm.gameName }}。录入数据时必须从这里的角色中选择。
添加
{{ catForm.parentName }}
绑到框架的二级/三级模块下,截图库会按模块归类(一级维度不能直接挂)。
一张截图里有多条记录时(多张卡牌、多件装备…),用哪一列区分它们。 选了之后同角色同一天可以有多条记录;这一列只作行标识, 即使它在下面表头里存在,也不会重复出一列。
表头(列名) 前两列固定为系统字段,下面是本日志自己的列
添加常用字段组 + 单个表头
固定列: 角色名称 日期 (系统自动生成,无需定义)
还没有自定义表头。点「添加常用字段组」一键带入,或「+ 单个表头」逐个建
# 列名 类型 单位 枚举值 / 识别提示 必填
{{ i + 1 }}
分行
删
表头共 {{ logForm.fields.length + 2 }} 列 = {{ logForm.fields.length }} 个自定义列 + 2 个固定列
创建
创建后进入录入页,逐项填写字段值;也可上传截图(AI 接入后自动识别)。

把「{{ copyForm.srcName }}」的框架拆解与日志字段定义复制到目标游戏,不含任何数据。

+ 添加一行
把 Excel 拖到这里,或点击选择,也可以直接 Ctrl + V 粘贴文件
共 {{ configImportResult.totals.sheets }} 个 sheet · 新建 {{ configImportResult.totals.created }} 张 · 覆盖更新 {{ configImportResult.totals.updated }} 张 · 跳过 {{ configImportResult.totals.skipped }} 张 · 数据行 {{ configImportResult.totals.rows }} 行
活动名和活动时间由 AI 从截图里读,不需要提前建活动。
把图拖到这里,或点击选择,也可以直接 Ctrl + V 粘贴
截图依据:{{ commReco.evidence }}
{{ commReco.activity_id ? '已匹配到同名活动,直接沿用' : '将按「分类 + 这个名字」新建或复用活动' }}
固定为上传时选的分类,AI 与识别结果都不会改它;要换分类请把图传到对应分类下
截图里没写活动时间(永久/常驻)就打开;常驻不占日期格
常驻活动不需要日期,确认后会在排期表里单独标「常驻」。
快速填入: {{ p.label }}
留空 = 沿用上面已保存的 Key。 想彻底换掉先点 清除已保存的 Key
框里如果自己冒出一串内容,那是浏览器「密码自动填充」塞进来的别处密码, 清空它再保存,否则会把真 Key 顶掉。
获取可用模型
网关可用({{ aiModels.length }} 个,「可识图」是自动标注、仅供参考):
模型名必须和网关里的完全一致,写错会报 429「no available upstream」 或 404。点「获取可用模型」直接从列表里选最稳。
{{ aiForm.enabled ? '已启用,AI 识别可用' : '已关闭,识别按钮会提示未接入' }}
{{ aiResult.ok ? '✓ ' : '✗ ' }}{{ aiResult.message }}
上次测试({{ fmtTime(aiInfo.last_test_at) }}):{{ aiInfo.last_test_msg }}
生效范围 本游戏 全局 · 所有游戏 {{ recogScope === 'game' ? '本游戏的内容优先,叠加在全局设置之后' : '全局设置对所有游戏生效,各游戏可以再补自己的规则' }}
恢复默认
{{ recogTips.rules }}
{{ recogTips.aliases }}
{{ recogTips.examples }}
生成预览 这是真正发给模型的全文,用于核对分类依据和上下文有没有带上(未保存的改动不会出现在这里)
普通账号(按游戏分配权限) 管理员(全部权限) {{ accountForm.active ? '正常,可登录使用' : '已停用,该账号无法登录' }}
这本日志还没有字段,先去「表头设置」把要记录的列定好
识别目标就是日志的字段清单:先建日志、把列定好,再传截图。
把图拖到这里,或点击选择,也可以直接 Ctrl + V 粘贴
{{ logShotResult.shots.length ? (logShotResult.shots[logShotActive].original_name || '截图') : '' }} · 本批共 {{ logShotResult.shots.length }} 张,结果已合并
归属 目标日志 {{ logShotResult.log_name }} · 读到 {{ logShotResult.filled }}/{{ logShotResult.total }} 个字段
列就是「{{ logShotResult.log_name }}」的字段,AI 只负责把值填进去。 读不到的留空,写入时空值不会覆盖已录入的内容。 每行一条记录,按「{{ logShotResult.row_key_name }}」区分。 图上还有、但日志里没有对应列的指标会收在下面的表外发现,勾上才会写进去。
共 {{ logShotRowCount }} 条记录 · {{ logShotColCount }} 列 · 图上没读到:{{ logShotResult.missing.join('、') }} {{ logShotPickColCount === logShotColCount ? '取消全部列' : '全选全部列' }} {{ logShotPickCount === logShotRowCount ? '取消全部行' : '全选全部行' }}
角色名称 日期
{{ c.checked === false ? '不写' : '写入' }}
{{ c.name }} 分行
{{ c.kind_label }} {{ c.filled }}/{{ logShotRowCount }} 未读到
{{ ri + 1 }}
{{ logShotRoleName }} {{ logShotDateText }} 删
{{ logShotExtraOpen ? '▾' : '▸' }} 表外发现 {{ logShotExtraCount }} 项 图上有、但日志里没有对应的列;默认不写入
勾上的会写进日志:写进哪一列填日志里没有的名字 = 新建一列; 填已有的列名 = 直接写进那一列。 现在勾了 {{ logShotPickCount }} 条记录,表外项无法确定属于哪一条,只会建列、不填值。
写 AI 读到的名字 值 单位 写进哪一列
{{ e.name }} {{ e.value }} {{ e.unit }}
快速填入: {{ p.label }}
留空 = 沿用上面已保存的 Key。 想彻底换掉先点 清除已保存的 Key
框里如果自己冒出一串内容,那是浏览器「密码自动填充」塞进来的别处密码, 清空它再保存,否则会把真 Key 顶掉。
获取可用模型
网关可用({{ logAiModels.length }} 个,「可识图」是自动标注、仅供参考):
模型名必须和网关里的完全一致,写错会报 429「no available upstream」 或 404。点「获取可用模型」直接从列表里选最稳。
{{ logAiForm.enabled ? '已启用,日志截图可以识别' : '已关闭,识别时会提示未接入' }}
{{ logAiResult.ok ? '✓ ' : '✗ ' }}{{ logAiResult.message }}
上次测试({{ fmtTime(logAiInfo.last_test_at) }}):{{ logAiInfo.last_test_msg }}
生效范围 本游戏 全局 · 所有游戏 {{ logConfScope === 'game' ? '本游戏的内容优先,叠加在全局设置之后' : '全局设置对所有游戏生效,各游戏可以再补自己的规则' }}
恢复默认
{{ logConfTips.rules }}
{{ logConfTips.aliases }}
示例图 上传 1~3 张示范截图,每张写一句「这张该怎么读」。识别时会连同待识别图一起发给模型, 比纯文字更容易纠正「看错区域、拆错行」。最多用 {{ logConfExLimit }} 张; 也可以复制截图后直接 Ctrl + V 粘贴。
+ 上传示例图
还没有示例图。把一张「读得准的同类截图」传上来,写清哪里该读、哪里不要读就行。
{{ e.scope === 'global' ? '全局' : '本游戏' }} {{ e.original_name }}
删除
当前实际生效 {{ logConfExUsed }} 张(全局 + 本游戏,上限 {{ logConfExLimit }} 张)。 每多一张会多传一张图,单次识别会慢一些——只留最典型的几张。
文字示例 不想传图就用文字写「截图里有什么 → 应该输出什么」
{{ logConfTips.examples }}
生成预览 这是真正发给模型的全文,用于核对补充规则、别名和已有字段有没有带上(未保存的改动不会出现在这里)
当前 Provider:{{ promptData.provider }} · 业务字段:{{ promptData.field_count }} 个
{{ promptData.prompt }}
统计指标算的是「当天的所有行」,不是某一格。例如卡牌养成一天有 15 行, 「品质 · 传说 = 11」就是数当天有多少行满足 品质=传说。
{{ metricLog ? metricLog.name : '—' }} 每行由「{{ metricRowKeyName }}」区分
{{ metricTypeHint }}
带上{{ metricRowKeyName || '行名' }}(例:60 · 安提戈涅) 顺序 倒序
顺序=取值从小到大(星级 0、1、2…,文本按字符);倒序=从大到小。
顺序=TOP1 排最上;倒序=TOP{{ metricForm.n || 5 }} 排最上(取的仍是最大的 {{ metricForm.n || 5 }} 个)。
删
+ 加条件 {{ metricForm.conds.length ? '多个条件之间是「且」的关系' : '不加条件 = 统计当天全部行' }}
松开鼠标即可加入
也可以复制截图后直接 Ctrl + V 粘贴