{{menuItems.find(m=>m.key===tab)?.label}}
📂
{{cats.length}}
分类
🍜
{{items.length}}
菜品
🏪
{{stores.length}}
门店
📤
{{logs.length}}
发送记录
运营快捷通道
全局设置
欢迎消息
添加门店
门店列表
{{s.name}} 默认
{{s.address}}
📞 {{s.phone}}
🕐 {{s.hours}}
🍽 {{s.signature}}
分类管理
📂 {{c.name}} {{c.name_en}} {{c.name_km}}
{{items.filter(i=>i.category_id===c.id).length}} 道
添加菜品(三语)
菜品列表
{{c.name}}
{{it.name}} {{it.name_en}} {{it.name_km}}
${{it.price}}
添加特惠(三语)
活动列表
{{p.title_km}} | {{p.title_en}} | {{p.title}}
发布公告(三语)
公告列表
📢 {{a.title_km||a.title_en||a.title}}
发送历史
{{l.message_type}}
{{l.content}}
自动发送
{{a.name||'自动 #'+a.id}}
每{{a.interval_minutes}}分钟
Telegram Bot
Bot {{status.bot_running?'运行中':'未启动'}}
发送导航菜单到群组
重新推送后,群内旧的导航菜单将被新菜单覆盖。菜单按钮:
🎁 会员中心
✅ 每日签到
🏪 门店信息
📋 在线菜单
🔥 优惠活动
📢 最新公告
🎟 抢优惠券
🎰 幸运抽奖
📞 联系我们
网站配置
登录设置
启用 Telegram 扫码登录
开启后,访问后台需先通过 Telegram 群管理员验证
标语口号(三语)
🎖️
{{loyaltyStats.members||0}}
会员数
⭐
{{loyaltyStats.total_points||0}}
积分总量
🔥
{{loyaltyStats.checkins||0}}
签到次数
🎁
{{loyaltyStats.claims||0}}
已抢券
会员积分体系设置
等级体系(按累计获得积分升级)
收银金额与积分关系配置
{{t('checkout_config_intro')}}
会员清单
共 {{members.length}} 人| 用户 | 会员号 | 等级 | 积分 | 累计获得 | 连签 | 收银员 | 注册 | |
|---|---|---|---|---|---|---|---|---|
| {{m.first_name||m.username||m.tg_user_id}} @{{m.username}} | {{m.member_code||'—'}} | L{{m.level}} {{levelName(m)}} | {{m.points}} | {{m.total_earned}} | 🔥 {{m.checkin_streak}} | {{m.cashier?'是':'否'}} | {{ fmtDate(m.created_at) }} {{ fmtTime(m.created_at) }} |
会员配置 · {{memberEdit.first_name||memberEdit.username||memberEdit.tg_user_id}}
收银员
开启后该会员可在会员中心使用「收银功能」(前台核销)
{{editingCoupon?'编辑优惠券(抢券)':'新建优惠券(抢券)'}}
固定金额券填「抵扣数值」,百分比券填「折扣率%(80=打8折)」并可设「抵扣上限」;留空时系统会从「优惠文字」自动解析(如「满50减10」→ 门槛 50、减免 10)。赠品券在收银台可勾选核销,但不参与金额抵扣。结账时低于门槛的券会自动置灰、不可选。
优惠券列表
{{c.title}}
/ {{c.title_en}}
/ {{c.title_km}}
{{c.discount_text}}
· {{c.end_date ? ('截止 '+c.end_date) : '长期有效'}}
{{c.kind==='newcomer'?'新人券':('已抢 '+c.claimed+'/'+(c.total||'∞'))}}
新人首单券(拉新自动发)
启用自动发放
用户首次 /start 自动建档并发券(每人限 1 张)
发送抢券到群组
📋 推送预览
🎁 {{grabPreviewCoupon.title}}
💸 {{grabPreviewCoupon.discount_text}}
⏳ 有效期至:{{grabPreviewCoupon.end_date}}
♾️ 长期有效
🔥 剩余 {{Math.max(grabPreviewCoupon.total-grabPreviewCoupon.claimed,0)}}/{{grabPreviewCoupon.total}} 张
[🎁 立即抢券] 按钮
💸 {{grabPreviewCoupon.discount_text}}
⏳ 有效期至:{{grabPreviewCoupon.end_date}}
♾️ 长期有效
🔥 剩余 {{Math.max(grabPreviewCoupon.total-grabPreviewCoupon.claimed,0)}}/{{grabPreviewCoupon.total}} 张
[🎁 立即抢券] 按钮
{{t('coupon_rules_title')}}
{{t('coupon_rules_intro')}}
{{t('rule_mutex')}}
{{t('rule_mutex_desc')}}
{{couponRules.mutex_discount_types?.enabled?t('rule_enabled'):t('rule_disabled')}}
{{t('rule_gift')}}
{{t('rule_gift_desc')}}
{{couponRules.gift_min_spend?.enabled?t('rule_enabled'):t('rule_disabled')}}
{{t('rule_level')}}
{{t('rule_level_desc')}}
{{couponRules.level_max_coupons?.enabled?t('rule_enabled'):t('rule_disabled')}}
{{t('fin_period')}}:
~
{{t('fin_stat_orders')}}
{{dashStats.order_count||0}}
{{t('fin_stat_received')}}
{{checkoutCur}}{{fmtMoney(dashStats.received_amount)}}
{{t('fin_stat_discount')}}
-{{checkoutCur}}{{fmtMoney(dashStats.discount_amount)}}
({{dashStats.coupon_count||0}} {{t('coupons')}})
{{t('fin_stat_points')}}
+{{dashStats.points_earned||0}}
{{t('fin_dash_hint')}}
{{t('fin_period')}}:
~
{{t('fin_records')}}({{cashierTotal}})
{{t('no_records')}}
| {{t('fin_order_no')}} | {{t('fin_member')}} | {{t('fin_member_code')}} | {{t('fin_payable')}} | {{t('fin_discount')}} | {{t('fin_paid')}} | {{t('fin_coupons')}} | {{t('fin_points')}} | {{t('fin_cashier')}} | {{t('fin_time')}} |
|---|---|---|---|---|---|---|---|---|---|
| {{o.order_no}} | {{o.member_name||'—'}} | {{o.member_code||'—'}} | {{checkoutCur}}{{o.raw_amount}} | -{{checkoutCur}}{{o.discount_amount}} | {{checkoutCur}}{{o.final_amount}} |
—
{{o.coupon_count}} {{t('coupons')}}
{{c.code}}
{{c.title}} -{{checkoutCur}}{{c.discount}}
{{c.title}} 🎁
|
+{{o.points_earned}} | {{o.cashier||'—'}} | {{o.created_at}} |
{{t('fin_page_info')}} {{orderPage}}/{{cashierPages}} · {{cashierTotal}}
{{orderPage}}
{{t('fin_period')}}:
~
{{t('fin_coupon_records')}}({{couponTotal}})
{{t('no_records')}}
| {{t('fin_order_no')}} | {{t('fin_member')}} | {{t('fin_member_code')}} | {{t('fin_coupon_name')}} | {{t('fin_coupon_code')}} | {{t('fin_coupon_discount')}} | {{t('fin_cashier')}} | {{t('fin_time')}} |
|---|---|---|---|---|---|---|---|
| {{c.order_no}} | {{c.member_name||'—'}} | {{c.member_code||'—'}} | {{c.title||'—'}} | {{c.code||'—'}} | {{c.is_gift ? '🎁 '+t('fin_gift') : '-'+checkoutCur+fmtMoney(c.discount)}} | {{c.cashier||'—'}} | {{c.created_at}} |
{{t('fin_page_info')}} {{couponPage}}/{{couponPages}} · {{couponTotal}}
{{couponPage}}
{{editingMall?'编辑商品':'新建积分商城商品'}}
商品列表
暂无商品
{{p.title_km||p.title_en||p.title}} · {{p.cost_points}} 积分
{{p.description_km||p.description_en||p.description||'—'}}
· {{p.validity_days ? p.validity_days+'天有效' : '长期有效'}}
· 库存 {{p.stock}}
创建抽奖活动
抽奖活动列表
暂无抽奖活动
{{lt.title}}
{{lt.title_en}}
{{lt.status==='active'?'进行中':'已开奖'}}
{{lt.reward_type==='points'?'⭐积分奖励':'🎁优惠券'}}
⭐ 奖励:{{lt.reward_points||0}} 积分(开奖发放)
🏆 奖品:{{lt.prize}}
📝 {{lt.description}}
👥 参与:{{lt.entry_count}} 人 / {{lt.max_entries}} · ⭐ 积分:{{lt.points_cost||'免费'}} · ⏳ 截止:{{lt.end_date||'未设置'}}
🎉 中奖者:{{lt.winner_name}}(开奖时间:{{lt.drawn_at}})
发送抽奖到群组
📋 推送预览
🎰 {{sendLotteryData.title}}
🇺🇸 {{sendLotteryData.title_en}}
🇰🇭 {{sendLotteryData.title_km}}
🏆 奖品:{{sendLotteryData.prize}}
🏆 Prize: {{sendLotteryData.prize_en}}
📝 {{sendLotteryData.description}}
{{sendLotteryData.points_cost>0?('⭐ 消耗积分: '+sendLotteryData.points_cost):'🆓 免费参加'}}
👥 已参加: {{sendLotteryData.entry_count}}{{sendLotteryData.max_entries?('/'+sendLotteryData.max_entries):''}}
⏳ 截止: {{sendLotteryData.end_date}}
[🎰 立即参加抽奖 / Join] 按钮
🇺🇸 {{sendLotteryData.title_en}}
🇰🇭 {{sendLotteryData.title_km}}
🏆 奖品:{{sendLotteryData.prize}}
🏆 Prize: {{sendLotteryData.prize_en}}
📝 {{sendLotteryData.description}}
{{sendLotteryData.points_cost>0?('⭐ 消耗积分: '+sendLotteryData.points_cost):'🆓 免费参加'}}
👥 已参加: {{sendLotteryData.entry_count}}{{sendLotteryData.max_entries?('/'+sendLotteryData.max_entries):''}}
⏳ 截止: {{sendLotteryData.end_date}}
[🎰 立即参加抽奖 / Join] 按钮
智能群管控(反博彩广告)
启用自动拦截
自动删除群内博彩/诈骗广告并处置
拦截记录(共 {{loyaltyStats.moderated||0}} 条)
| 时间 | 用户 | 类型 | 处置 | 内容 |
|---|---|---|---|---|
| {{l.created_at}} | {{l.username||l.user_id}} | {{l.reason}} | {{l.action}} | {{l.content}} |
备份配置
自动备份
上次备份:{{backupCfg.last_backup}}
本地备份文件
暂无备份文件
📦
{{f.filename}}
{{f.created_at}} · {{(f.size/1024).toFixed(1)}} KB
上传备份文件还原
上传一个 .db 备份文件,将当前数据库还原为该文件内容(还原前会自动保存当前数据库为 .prerestore 文件)
备份历史记录
暂无备份记录
| 文件名 | 大小 | 目标 | 触发 | 状态 | 时间 | |
|---|---|---|---|---|---|---|
| {{h.filename}} | {{h.file_size? (h.file_size/1024).toFixed(1)+' KB' : '-'}} | {{h.destination}} | {{h.trigger==='scheduled'?'定时':'手动'}} | {{h.status==='success'?'成功':'失败'}} | {{h.created_at}} |