⚠ {{failedInfo.failed}} 张小票识别失败
重识别中 {{failedInfo.done}}/{{failedInfo.total}},成功 {{failedInfo.ok}} …
其中 {{failedInfo.reprocessable}} 张原图仍在,可重新识别{{failedInfo.failed>failedInfo.reprocessable?'(其余原图已过保留期或文件损坏,无法重跑)':''}}
原图已过保留期或文件损坏,无法重跑(详见服务器状态页错误列表)
数据总览
{{dayHint}}
{{c.label}}
{{fmtN(c.val)}}
{{reviewScope}}有 {{fmtN(stats.needs_review)}} 张待复核,机器拿不准,点开手动归到好评/差评即可。
各门店小票数
每店一根柱,按 好评 / 差评 / 空评 堆叠
各门店评价占比
每店合计 100%,直观对比差评率、空评率偏高的门店
{{dimLabel}} · 评价趋势
评价分组占比
各门店详情
| 门店 | 小票数 | 好评 | 差评 | 空评 | 有效评价 | 好评率 | 差评率 | 空评率 |
|---|---|---|---|---|---|---|---|---|
| 暂无数据 | ||||||||
| {{s.store}} | {{fmtN(s.n)}} | {{fmtN(s.good)}} | {{fmtN(s.bad)}} | {{fmtN(s.empty)}} | {{fmtN(s.good+s.bad)}} | {{posRate(s)}} | {{negRate(s)}} | {{emptyRate(s)}} |
点任一门店可下钻到它的小票明细 · 好评率/差评率已剔除空评(分母=好评+差评,两者相加=100%);空评率=空评/小票总数
菜品好评率{{(dashStore||dishStoreF)?' · '+(dashStore||dishStoreF):''}}
按差评数排序(抱怨最集中的菜排最前);好评率低但评价少的菜请看好评率列
| 门店 | 编号 | 档口 | 菜品 | 好评+超赞 | 中评+差评 | 有效评价 | 好评率 | 差评率 |
|---|---|---|---|---|---|---|---|---|
| 暂无菜品数据 | ||||||||
| {{d.store}} | {{d.code}} | {{d.stall}} | {{d.name}} | {{fmtN(d.good)}} | {{fmtN(d.bad)}} | {{fmtN(d.good+d.bad)}} | {{posRate(d)}} | {{negRate(d)}} |
注:统计与识别结果永久保留;小票原图仅保留最近 15 天,更早的仍可查看识别结果,但看不到原图。
上传与识别
这批小票是哪一天的?
默认昨天(今天传昨天的票),可自行调整
把 整个大文件夹 拖进来(里面每个子文件夹=一家店),或点击选择文件夹
子文件夹名=店名 · 自动识别上传 · 分批处理不卡机
上传中断了?整包重传即可——已识别过的同一张图会自动跳过,不会重复计数
{{uploadName}}
{{prog.done+prog.failed}} / {{prog.total}}
{{prog.status==='done' ? '识别完成 · 成功 '+prog.done+' 张'+(prog.dup?'(其中 '+prog.dup+' 张重复已跳过)':'')+(prog.failed?' · 失败 '+prog.failed+' 张':'') : '识别中…'}}
去查看
门店管理
{{storeErr}}
| 顺序 | 门店名称 | 自定义分组 | 小票数 | 操作 |
|---|---|---|---|---|
| 还没有门店,先新增一个 | ||||
| {{s.name}} | {{s.receipts}} | |||
调整顺序:电脑端按住左侧手柄 ⣿ 拖到目标位置(手机端用 ▲▼);数据总览的门店下拉、各门店表格、导出图都跟这个顺序。
自定义分组:直接输入新分组名(如「郑州区」「厨房系列」),也可从已有的里选;分组后可在数据总览按组查看和导出图,方便按组发钉钉。
自定义分组:直接输入新分组名(如「郑州区」「厨房系列」),也可从已有的里选;分组后可在数据总览按组查看和导出图,方便按组发钉钉。
菜品管理
{{dishMgrErr}}
共 {{dishRows.length}} 条 · 可用 {{dishRows.filter(d=>d.status).length}}
| 编号 | 档口 | 菜品名称 | 状态 | 计入好评率 | 操作 |
|---|---|---|---|---|---|
| 还没有菜品:上面逐条新增,或用下面的整表粘贴导入 | |||||
{{mgrPage}} / {{mgrPages}}
识别逻辑:小票识别只把菜名匹配到可用菜品——打印模糊导致的错字会自动匹配到最接近的菜品
(相似度≥75%,如「酥炸鱼柳」→「酥炸龙利鱼柳」),统计和导出标注编号/档口;
禁用(未上线/已下架)的菜不参与匹配,新识别不会归到它头上;历史小票数据不受增删改影响。
不计入:套餐、酒水、茶位费这类不反映菜品质量的品项,设为「不计入」后不进菜品好评率统计和导出 (小票本身的好评/差评分组不受影响);单张小票里某道菜要单独排除,在小票详情里把它改成「不计入」。
权限:菜品库是识别归并的基准,仅用户/管理员可增删改(上传员只能看数据,不能动菜品库)。
不计入:套餐、酒水、茶位费这类不反映菜品质量的品项,设为「不计入」后不进菜品好评率统计和导出 (小票本身的好评/差评分组不受影响);单张小票里某道菜要单独排除,在小票详情里把它改成「不计入」。
权限:菜品库是识别归并的基准,仅用户/管理员可增删改(上传员只能看数据,不能动菜品库)。
未入库菜品
(共 {{unmatched.length}} 个)
近 14 天识别到、但台账里没有的菜(出现 ≥2 次,按次数排序)。加进台账后,它的错字变体会自动归并、统计带编号档口。
{{unmatchedLoaded ? '没有未入库菜品,台账是全的 👍' : '点「刷新」查看'}}
| 识别到的菜名 | 出现 | 台账里最接近的 | 操作 |
|---|---|---|---|
| {{u.name}} | {{u.n}} | {{u.near}} ({{Math.round(u.ratio*100)}}%像) — |
{{unmPage}} / {{unmPages}}
怎么判断:如果"最接近的"就是同一道菜(只是台账名和小票打印名不一致),
建议直接把台账里那条改成小票上的打印名(上面的表格里改),比新增一条更好;
如果确实是台账漏了的新菜,点「加入台账」再补编号和档口。
整表粘贴导入
从 Excel 里复制「品项编号、档口、品项名称」三列直接粘贴(每行一条);也兼容只贴「编号+品名」两列或只贴品名一列。
每次导入为整表替换,同名菜会保留原来的 可用/禁用 状态,新菜默认可用。历史数据的归并同样生效。
{{catalogErr}}
操作日志
共 {{auditTotal}} 条
| 时间 | 账号 | 操作 | 对象 | 详情 |
|---|---|---|---|---|
| {{a.created_at}} | {{a.username}} | {{auditActions[a.action]||a.action}} | {{a.target}} | {{a.detail}} |
| 暂无操作记录 | ||||
{{auditPage}} / {{auditPages}}
服务器状态
加载中…
识别 API 状态(实时探测)
Google 官方 API · {{status.runtime.model}}
{{status.api.fallback.ok?'正常':'异常'}}
延迟 {{status.api.fallback.ms}}ms · {{status.api.fallback.error}}
{{status.counters.google_ok}}
调用成功(本次运行)
{{status.counters.google_fail}}
调用失败(本次运行)
存储 / 系统
| 小票总数 | {{status.data.receipts}} |
| 数据库大小 | {{status.data.db_mb}} MB |
| 图片占用 | {{status.data.img_mb}} MB |
| 磁盘剩余 | {{status.data.disk.free_mb}} / {{status.data.disk.total_mb}} MB |
运行时
| 运行时长 | {{fmtUptime(status.runtime.uptime_s)}} |
| 识别模型 | {{status.runtime.model}} |
| 并发数 | {{status.runtime.workers}} |
识别费用 (直连官方时按 token×官方牌价估算)
| 今日 | {{fmtCost(status.billing?.today)}} |
| 本周(周一起) | {{fmtCost(status.billing?.week)}} |
| 本月 | {{fmtCost(status.billing?.month)}} |
| 账户累计 | {{fmtCost(status.billing?.total)}} |
按 token × Google 官方牌价估算(汇率 7.2),含识别+复审全部调用;实际以 Google 账单为准。
最近 API 事件
暂无
{{fmtTime(e.t)}} · {{e.msg}}
最近识别失败的小票
暂无
{{e.created_at}} · {{e.error}}
最近上传批次
| 批次 | 总数 | 成功 | 失败 | 状态 | 时间 |
|---|---|---|---|---|---|
| {{b.name}} | {{b.total}} | {{b.done}} | {{b.failed}} | {{b.status}} | {{b.created_at}} |
小票管理
期间 {{f.date_from}} ~ {{f.date_to}}
分组 {{f.store_group}}
共 {{total}} 张
{{r.biz_date||'—'}}
已修改
{{r.store||'—'}}
{{r.eval_group||'—'}}
›
{{d.name}}({{d.rating}}){{i < (r.dishes.length>4?3:r.dishes.length-1) ? '、' : ''}}
…共{{r.dishes.length}}道
无菜品
手写
无效多勾
需复核
暂无数据,先去「上传与识别」
{{page_n}} / {{pages}}