筷马ERP
| 门店 | 订单数 | 消费者 | 复购率 | 客单价 | 营收 | 新客/复购 |
|---|---|---|---|---|---|---|
| {{ st.name }} | {{ fmtInt(st.orders) }} | {{ fmtInt(st.consumers) }} | {{ st.repeat_rate }}% | ¥{{ fmtMoney(st.avg_order_value) }} | ¥{{ fmtMoney(st.revenue) }} | {{ st.seg_local['新客']||0 }} / {{ st.seg_local['复购']||0 }} |
| 商品 | 销量 | 日均 | 建议安全库存(×3天) |
|---|---|---|---|
| {{ p.name }} | {{ fmtInt(p.qty) }} | {{ p.daily }} | {{ p.safety }} |
| 商品 | 全局营收 |
|---|---|
| {{ p.name }} | ¥{{ fmtMoney(p.global_rev) }} |
| 该店已覆盖全局热销品 | |
| 组合 | 同单次数 |
|---|---|
| {{ c.a }} + {{ c.b }} | {{ c.together }} |
| 暂无稳定共现组合 | |
| 平台单号 | 门店 | 订单时间 | 类型 | 退款状态 | 平台原始原因 | 商品 | 数量 | 金额 | 归因原因 | 备注 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ ev.platform_order_no }} | {{ ev.store_name }} | {{ ev.order_time || '—' }} | {{ ev.kind }} | {{ ev.refund_status }} | {{ ev.reason || '—' }} | {{ ev.goods_name || '—' }} | {{ ev.goods_qty!=null?ev.goods_qty:'—' }} | {{ ev.goods_money!=null?('¥'+fmtMoney(ev.goods_money)):'—' }} |
{{ ev.attributed_by }} @ {{ (ev.attributed_at||'').slice(0,16) }}
|
|
|
| 门店 | 订单数 | 退单事件 | 退单率% | 门店可控 | 少放 | 放错 | 质量 | 破损 | 未注明 |
|---|---|---|---|---|---|---|---|---|---|
| {{ r.store }} | {{ r.orders }} | {{ r.refund_events }} | {{ r.refund_rate }} | {{ r.store_ctl }} | {{ r.short }} | {{ r.wrong }} | {{ r.quality }} | {{ r.package }} | {{ r.unspecified }} |
| 商品 | 被退次数 |
|---|---|
| {{ g.goods }} | {{ g.refund_count }} |
| 日期 | 退单事件 | 门店可控 |
|---|---|---|
| {{ t.date }} | {{ t.total }} | {{ t.ctl }} |
| 单号 | 类型 | 方向 | 金额 | 关联单据 | 时间 |
|---|---|---|---|---|---|
| {{ r.record_no }} | {{ r.type==='income'?'收入':'支出' }} | {{ r.direction==='in'?'入账':'出账' }} | {{ r.direction==='in'?'+':'-' }}¥{{ r.amount.toFixed(2) }} | {{ r.related_order_no || '-' }} | {{ r.created_at }} |
| 暂无数据 | |||||
| SKU | 产品 | 入库数 | 总成本 | 均价 |
|---|---|---|---|---|
| {{ r.sku }} | {{ r.name }} | {{ r.total_in_qty }} | ¥{{ r.total_cost.toFixed(2) }} | ¥{{ r.avg_cost.toFixed(2) }} |
| 暂无数据 | ||||
| 品牌 | 有单门店 | 单量 | 收入 | 支出(成本价) | 毛利(可分总额) | 毛利率 | 已结算 | 未结算 | 数据完整度 |
|---|---|---|---|---|---|---|---|---|---|
| {{ b.brand_name }} | {{ b.stores_n }} | {{ b.orders_n }} | ¥{{ b.revenue.toFixed(2) }} | ¥{{ b.cost.toFixed(2) }} | ¥{{ b.gross_profit.toFixed(2) }} | {{ b.gross_margin.toFixed(2) }}% | ¥{{ b.settled_amt.toFixed(2) }}— | ¥{{ b.unsettled_amt.toFixed(2) }}— | 缺成本 {{ b.no_item_n }} 单 / {{ b.lines_no_price }} 行完整 |
| 合计(全部品牌) | {{ finance.brandTotal.stores_n }} | {{ finance.brandTotal.orders_n }} | ¥{{ finance.brandTotal.revenue.toFixed(2) }} | ¥{{ finance.brandTotal.cost.toFixed(2) }} | ¥{{ finance.brandTotal.gross_profit.toFixed(2) }} | {{ finance.brandTotal.gross_margin.toFixed(2) }}% | ¥{{ finance.brandTotal.settled_amt.toFixed(2) }} | ¥{{ finance.brandTotal.unsettled_amt.toFixed(2) }} | 缺成本 {{ finance.brandTotal.no_item_n }} 单 / {{ finance.brandTotal.lines_no_price }} 行 |
| 暂无数据 | |||||||||
| 门店 | 编码 | 子品牌 | 单量 | 收入 | 支出(成本价) | 毛利 | 毛利率 | 已结算 | 未结算 |
|---|---|---|---|---|---|---|---|---|---|
| {{ s.store_name }} | {{ s.store_code }} | {{ s.sub_brand_name }} | {{ s.orders_n }} | ¥{{ s.revenue.toFixed(2) }} | ¥{{ s.cost.toFixed(2) }} | ¥{{ s.gross_profit.toFixed(2) }} | {{ s.gross_margin.toFixed(2) }}% | ¥{{ s.settled_amt.toFixed(2) }}— | ¥{{ s.unsettled_amt.toFixed(2) }}— |
| 暂无数据 | |||||||||
| # | 平台单号 | 门店 | 订单时间 | 实收 | 待推成本 | SKU | 审核 | 核对提示 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|---|
| {{ q.id }} | {{ q.platform_order_no }} |
{{ q.store_name || '-' }} | {{ (q.order_time || '').replace('T',' ').slice(0,16) }} | ¥{{ (q.actual_amount||0).toFixed(2) }}- | ¥{{ (q.push_total||0).toFixed(2) }} | {{ q.sku_count || 0 }} | 红灯黄灯绿灯- | {{ q.hold_flag==='partial_refund' ? '部分退款待核' : (q.hold_flag==='refund_rejected' ? '退款被驳回' : '退款待核') }}{{ auditBrief(q) || (q.hold_reason || '需人工核对后再决定是否推送') }}{{ q.warn }}{{ auditBrief(q) }}✓ 无异常 | ||
| 暂无待核对推送单 ✓ | ||||||||||
| 单号 | 平台单号 | 供应商 | 门店 | 实收 | 成本 | 利润 | 状态 | 日期 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
{{ o.order_no }} |
{{ o.platform_order_no }}- | {{ o.supplier_name || '-' }} | {{ o.store_name || '-' }} | ¥{{ (o.actual_amount||0).toFixed(2) }}- | ¥{{ (o.cost_amount||0).toFixed(2) }} | {{ o.profit==null?'-':'¥'+(o.profit||0).toFixed(2) }} | {{ o.isReview?'⏳待审核':(o.status==='completed'?'已完成':(o.status==='rejected'?'已驳回':'待入库')) }} | {{ o.order_date || (o.created_at||'').slice(0,10) }} {{ (o.created_at||'').slice(11,16) }} |
待采购审核 |
| 暂无采购单 — 请调整筛选条件 | |||||||||
{{ pushQueue.drawer.sender_code || '-' }}| 海鼎商品码 | 商品名 | 数量 | 单价(成本) | 小计 | |
|---|---|---|---|---|---|
| {{ it.name || '-' }} | ¥{{ ((it.qty||0)*(it.price||0)).toFixed(2) }} | ||||
| 明细为空,请点「+ 加一行」或「按订单行重建明细」 | |||||
| 商品 | 下单 | 已退 | 实际成交 | 成本单价 | 成交金额 |
|---|---|---|---|---|---|
| {{ wr.name }}已退款无货号 | {{ wr.qty }} | {{ (wr.refund_qty||0)>0 ? wr.refund_qty : '-' }} | {{ wr.remain_qty || 0 }} | ¥{{ (wr.cost||0).toFixed(2) }} | ¥{{ (wr.remain_amount||0).toFixed(2) }} |
| 商品 | 数量 | 售价 |
|---|---|---|
| {{ oi.name }} | {{ oi.quantity }} | ¥{{ (oi.unit_price||0).toFixed(2) }} |
| 商品 | 数量 | 单价 | 小计 | |
|---|---|---|---|---|
| ¥{{ ((it.quantity||0)*(it.unitPrice||0)).toFixed(2) }} |
{{ purchaseDetail.order.order_no }}{{ purchaseDetail.order.platform_order_no }}🔗{{ rec.partner_num }} · ¥{{ (rec.amount||0).toFixed(2) }}
| 海鼎商品码 | 商品名称 | 数量 | 单价 | 小计 |
|---|---|---|---|---|
{{ it.goods_code }} | {{ it.goods_name }}⚠️ 兜底 | {{ it.qty }} | ¥{{ ((it.display_unit_price!=null?it.display_unit_price:it.price)||0).toFixed(2) }} | ¥{{ ((it.display_unit_price!=null?(it.display_unit_price*it.qty):it.subtotal)||0).toFixed(2) }} |
| 商品 | SKU | 数量 | 单价 | 小计 |
|---|---|---|---|---|
| {{ it.product_name }} | {{ it.product_sku || '-' }} | {{ it.quantity }} | ¥{{ (it.unit_price||0).toFixed(2) }} | ¥{{ (it.subtotal||0).toFixed(2) }} |
| 暂无明细 | ||||
| 用户名 | 姓名 | 角色 | 门店 | 归属上级 | 状态 | 创建时间 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ u.username }} | {{ u.real_name || '-' }} | {{ u.role_name }} | {{ storeName(u.store_id) }} | {{ u.manager_name || '-' }} | {{ u.status==='active'?'正常':'禁用' }} | {{ u.created_at }} | |
| 暂无用户 | |||||||
https://nowwa-food.com (生产环境请替换为您的域名)
1. 销售回传(海鼎 → ERP)
海鼎收银时调用此接口,扣减库存、触发售罄广播:
POST /api/haiding/sale_callback
Content-Type: application/json
{
"haiding_store_id": "HD001", // 海鼎门店ID
"haiding_order_no": "POS20260708001", // 海鼎订单号
"items": [
{"sku": "P001", "quantity": 2, "unit_price": 12.5}
]
}
返回:
{
"code": 0,
"data": {
"available": 28,
"is_soldout": false,
"broadcast_to": ["taobao", "haiding", "hiboos", "qianniuhua", "jianfu"] // 售罄时广播的平台
}
}
2. 库存同步(ERP → 海鼎)
系统会主动推送库存变化给海鼎,无需海鼎调用。
推送地址:海鼎提供的 webhook URL(需在海鼎后台配置)
订单回调(外卖 → ERP)
外卖平台有新订单时,调用此接口预占库存:
POST /api/takeaway/<platform>/order_callback
其中 platform = meituan | eleme | jd
Content-Type: application/json
{
"platform_order_no": "MT202607081234",
"platform_shop_id": "MT-S001", // 平台店铺ID
"items": [
{"sku": "P001", "quantity": 1}
],
"customer": {
"name": "张三",
"phone": "13800138000",
"address": "北京市朝阳区..."
},
"total_amount": 28.5
}
返回:
{
"code": 0,
"data": {
"order_no": "ORD20260708001",
"status": "confirmed",
"reserved": 1 // 预占数量
},
"msg": "订单已确认"
}
库存推送(ERP → 外卖)
售罄时系统自动推送售罄信息到外卖平台,无需平台调用。
推送地址:各外卖平台开放平台 webhook URL(在 ERP 端配置)
1. 提交小票打印
POST /api/print/receipt
Content-Type: application/json
{
"device_id": "PRINT-001",
"order_no": "ORD20260708001",
"items": [
{"name": "金枪鱼饭团", "qty": 2, "price": 12.5, "subtotal": 25}
],
"total": 25.0
}
2. 提交标签打印
POST /api/print/label
Content-Type: application/json
{
"device_id": "PRINT-L01",
"product_name": "金枪鱼饭团",
"price": 12.5,
"production_time": "2026-07-08 06:00:00",
"shelf_life_hours": 12
}
每个门店都需要独立配置各平台 ID:
修改路径:菜单 → 门店管理 → 点击「编辑」
┌─────────┐
│ 美团/饿了么/京东 │ ──订单回调──> ERP库存中心 ──预占库存──> 确认接单
└─────────┘ │
├── 库存变化时
▼
┌──────────┐
│ 推送库存 │
└──────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│ 海鼎 │ │ 淘宝 │ │ 海博 │ ← 售罄时立即同步
└──────┘ └──────┘ └──────┘
│
▼
┌─────────┐
│ 京东 │
└─────────┘
┌─────────┐
│ 海鼎POS │ ──销售回传──> ERP库存中心 ──扣减库存──> 触发各平台同步
└─────────┘
当前为演示版本,未启用签名验证。
生产环境建议:
timestamp + sign 签名app_key 和 app_secret以系统所有者(king)身份,为各角色开关功能权限。修改后该角色重新登录或刷新即生效。
给当前账号单独开通或关闭功能权限。未勾选时,继承该角色默认权限。