曼玉餐厅
小票识别系统
Manyu Receipt OCR
{{loginErr}}
曼玉餐厅
{{mustChange ? '首次登录,请修改密码' : '修改密码'}}
账号 {{username}} · 为安全起见请设置新密码
至少 8 位,含 字母/数字/符号 中至少两类,不能是常见弱密码
{{cpErr}}
曼玉餐厅 {{menuLabel}}
⚠ {{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}}
按店导出 Excel
勾选要导出的门店。每个门店单独一个工作表,列出该店每道菜的 超赞 / 好评 / 中评 / 差评 及 合计 / 好评率 / 差评率(差评多的菜排前)。不勾 = 全部门店。
门店 ({{exStores.length}}/{{storeList.length}})
|
下载小票数据
下载所选日期的小票原图,压缩包内按 好评组 / 差评组 / 空评组 分文件夹,每组下再按门店分子文件夹;含手写的会再复制一份到 含手写 文件夹。原图仅保留最近 15 天,所以只能选还留着图的日期。
选择日期 ({{dlSel.length}}/{{dlDates.length}})
|
近 15 天暂无可下载的原图
正在从服务器打包原图,图片较多时可能要十几秒,请不要关闭窗口…
导出图片
勾选门店导出评价图(发钉钉用)。单选出这家店一张;多选每店各一张,≥2 家再附一张所选门店的汇总图。图片按总览当前选的期间「{{dimLabel}}」出,不勾 = 全部门店。
门店 ({{imgStores.length}}/{{storeList.length}})
|
{{toastMsg}}
原图已按 15 天保留期清理
识别结果已永久保留
{{detail.store||'—'}}
{{detail.biz_date||'—'}} · #{{detail.receipt_no||'—'}}
{{detailPos}}
{{detail.eval_group}} 空票 含无效多勾 需复核: {{detail.review_reason}} 已修改 · {{detail.edited_by}} {{(detail.edited_at||'').slice(5,16)}} 扫描: {{detail.scan_quality||'—'}}
{{d.name}} {{d.rating}} [{{d.marks}}]
手写留言
{{detail.handwriting_text||'(检出手写,内容未转写)'}}
{{detail.error}}
人工归类{{detail.needs_review?'(机器拿不准,请你定)':''}}