📋 货易达内部工作台
🕐 最近同步: {{ syncInfo.run_at?.slice(0,19) }} ·
范围 {{ syncInfo.start_time }} ~ {{ syncInfo.end_time }} ·
{{ syncInfo.total_count }} 单 · {{ syncInfo.inserted }} 新增
⏳ 首次数据同步中,请稍候...
📦 纸箱规格(已作为新产品加入商品库)
纸箱规格来自「仓库运营 › 📐 箱型」字典。每种纸箱作为一条新产品独立存在商品库(品类=纸箱),
规格、单价、每箱件数都是纸箱自己的属性,不再与具体商品做关联。
{{ catBoxSyncMsg }}
| 规格 | 备注名 | 纸箱价(€/箱) | 每箱件数 | 作为商品 |
|---|---|---|---|---|
| {{ b.label }} | {{ b.name || '—' }} | €{{ fmtNum(b.box_price_eur, 2) }} | {{ b.qty_per_box > 1 ? b.qty_per_box + ' 件' : '1 件' }} | BOX-{{ b.label.replace(/[^0-9A-Za-z]/g,'X').replace(/^X+|X+$/g,'').toUpperCase() }} |
按 Enter 也可搜索
📜 历史批次
加载中...
| 批次号 | 运单状态 | 航班号 | 订单数 | 认证率 | 总运费(€) | 关税(€) | 毛利润(€) | 操作 |
|---|---|---|---|---|---|---|---|---|
| 🔒{{ b.batch_no }} | {{ waybillStateLabel(b.waybill_state) }} | {{ b.flight_no || '—' }} | {{ b.total_orders || b.total || 0 }} | {{ b.verification_rate || 0 }}% | {{ b.fee_order_count > 0 ? (b.fee_total/100).toFixed(2) : '—' }} | {{ b.fee_order_count > 0 ? (b.fee_customs_total/100).toFixed(2) : '—' }} | {{ (b.profit/100).toFixed(2) }} {{ (b.profit_est/100).toFixed(2) }}估 — |
暂无历史批次
共 {{ batchHistoryTotal }} 条
{{ batchHistoryPage + 1 }}
🔒 已封锁批次(共 {{ lockedBatches.length }} 个)
{{ b.batch_no }}
{{ b.total_orders }}单
最近批次快捷入口:
🔒{{ b.batch_no }} ({{ b.total }})
📦 批次
🔒{{ batchResult.batch_no }}
总订单
{{ batchResult.total_orders }}
✅ 已认证身份证
{{ batchResult.verified_count }}
{{ batchResult.verification_rate }}%
❌ 未认证
{{ batchResult.unverified_count }}
{{ (100 - batchResult.verification_rate).toFixed(1) }}%
💰 费用统计
{{ (batchResult.fee_total/100).toFixed(2) }} 元
关税 {{ (batchResult.fee_customs_total/100).toFixed(2) }} · 运费 {{ (batchResult.fee_ship_total/100).toFixed(2) }}
毛利润
€ {{ (billingData.total_income - billingComputed.totalExpense).toFixed(2) }}
🧾 清关批次工作台
加载中…
✅ 校验通过
⚠️ 待处理 {{ (batchDesk.issues_total || 0) + (batchDesk.conflicts_total || 0) }} 项
(校验 {{ batchDesk.issues_total }})
(冲突 {{ batchDesk.conflicts_total }})
包裹 {{ (batchDesk.summary?.parcels ?? 0) }} · 行 {{ (batchDesk.summary?.lines ?? 0) }} · 快照 v{{ batchDesk.revision }}
小票数据未生成 基础数据:{{ v.name }}#{{ v.id }}
小票数据未生成 基础数据:{{ v.name }}#{{ v.id }}
未建立
该批次未在批次工作台导入
{{ batchResult.unverified_count }}人待查
(已认证 {{ batchResult.verified_count }} 单)
{{ exportFormat }}格式导出
{{ Math.round(exportProgress.current / exportProgress.total * 100) }}%
{{ exportProgress.current }}/{{ exportProgress.total }}
...
{{ exportProgress.msg }}
👤 按寄件人统计
| 寄件人 | 总单 | 已认证 | 缺资料 | 认证率 |
|---|---|---|---|---|
| {{ item.name }} | {{ item.total }} | {{ item.verified }} | {{ item.unverified }} | {{ item.rate }}% |
第 {{ batchSenderPage+1 }} / {{ batchSenderTotalPages }} 页,共 {{ (batchSenderNames||[]).length }} 位寄件人
📋 订单明细
| {{ c.label }} |
|---|
第 {{ batchOrderPage+1 }} / {{ batchOrderTotalPages }} 页,共 {{ (filteredBatchOrders||[]).length }} 条
❌ {{ batchError }}
☑️ 已选 {{ selectedIds.size }} 条
| {{ c.label }} | |
|---|---|
第 {{ currentPage + 1 }} / {{ totalPages }} 页
{{ searchQuery ? '🔍' : '📦' }}
{{ searchQuery ? `未找到包含 "${searchQuery}" 的订单` : '暂无订单数据' }}
{{ searchQuery ? '试试其他关键词,或清除搜索条件' : '请先同步数据' }}
❌ 未认证身份证
{{ stats.truly_missing_count ?? stats.unverified_count ?? 0 }}
(近60天活跃: {{ stats.truly_missing_count ?? 0 }}人 / 全部: {{ stats.unverified_count ?? 0 }}人)
共 {{ verifiedOrdersTotal }} {{ showVerified ? '条' : '人' }}
| {{ c.label }} |
|---|
{{ showVerified ? '暂无已认证记录' : '✅ 全部已认证,无需补资料' }}
| {{ c.label }} |
|---|
👥 今日上班
{{ whData.shift.staff_count }} 人上班
合计 {{ whData.shift.total_hours }} 小时
人均 {{ whData.shift.avg_hours }} 小时
→
| 姓名 | 上班 | 下班 | 工时 | 备注 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ s.hours !== null ? s.hours + ' h' : '—' }} | {{ s.staff }} | {{ s.clock_in || '—' }} | {{ s.clock_out || '—' }} | {{ s.hours !== null ? s.hours + ' h' : '—' }} | {{ s.note || '' }} |
暂无考勤记录,请在上方添加。
📦 今日打包量与成本
总打包 {{ packData.kpi.total_pkgs }} 件
人工成本 €{{ fmtMoney(packData.kpi.labor_eur) }} ({{ packData.kpi.labor_hours }}h × €{{ packData.kpi.labor_rate_eur_per_hour }})
纸箱费 €{{ fmtMoney(packData.kpi.box_eur) }}
{{ packData.kpi.box_type_count }} 款纸箱 / {{ packData.kpi.staff_count }} 人
件数 vs 昨日 {{ packData.kpi.vs_yesterday.pkgs_pct >= 0 ? '+' : '' }}{{ packData.kpi.vs_yesterday.pkgs_pct }}%
📐 纸箱型号 × 品类(行=用了哪款纸箱,列=打了多少)
| 纸箱型号 | 菲莱PM | 奶粉 | 杂货 | 合计件 | 纸箱费(€) |
|---|---|---|---|---|---|
| {{ m.box_type }} | {{ m.PM || '—' }} | {{ m.奶粉 || '—' }} | {{ m.杂货 || '—' }} | {{ m.pkgs }} | {{ fmtMoney(m.box_eur) }} |
今日暂无打包记录,请在上方录入。
🧾 品类汇总
| 品类 | 件数 | 占比 | 纸箱费(€) |
|---|---|---|---|
| {{ c.category === 'PM' ? '菲莱PM' : c.category }} | {{ c.pkgs }} | {{ c.share }}% | {{ fmtMoney(c.box_eur) }} |
👷 打包人效率
| 打包人 | 菲莱PM | 奶粉 | 杂货 | 合计 | 占比 | 人工成本(€) |
|---|---|---|---|---|---|---|
| {{ s.staff }} | {{ s.PM || '—' }} | {{ s.奶粉 || '—' }} | {{ s.杂货 || '—' }} | {{ s.pkgs }} | {{ s.share }}% | {{ s.labor_eur ? '€' + fmtMoney(s.labor_eur) + ' (' + s.labor_hours + 'h)' : (s.manual_cny ? '€' + fmtMoney(s.manual_eur) : '—') }} |
暂无数据
📋 明细记录
| 打包人 | 纸箱 | 品类 | 客户 | 件数 | 纸箱费 | 人工产出比 | 来源 | |
|---|---|---|---|---|---|---|---|---|
| {{ r.staff }} | {{ r.box_type }} | {{ r.category === 'PM' ? '菲莱PM' : r.category }} | {{ r.customer || '—' }} | {{ r.pkg_count }} | {{ fmtMoney(r.box_eur) }} | {{ r.labor_ratio != null ? r.labor_ratio + ' 件/€' : '—' }} | {{ r.source === 'manual' ? '人工值' : '公式值' }} |
加载中…
📐 纸箱型号管理
暂无预置规格,请自行添加。纸箱价格按「每个包裹一个纸箱」计入成本(单价 × 件数)。
| 规格 | 备注名 | 纸箱价格(€/箱) | |
|---|---|---|---|
| {{ b.label }} | {{ b.name || '—' }} | €{{ fmtNum(b.box_price_eur, 2) }} |
📊 今日托盘
封托盘 {{ whData.pallet.sealed_pallets || 0 }} 个
扫描入库 {{ whData.scanned_pkgs || 0 }} 包裹
发走 {{ whData.pallet.shipped_pallets || 0 }} 托 / {{ fmtNum(whData.pallet.shipped_weight_kg) }} kg
+人工 {{ (whData.pallet.manual_received_pallets || 0) + (whData.pallet.manual_shipped_pallets || 0) }} 托(不计入统计)
🛒 采购入库 {{ whPurchaseData.total_qty || 0 }} 件 / {{ fmtNum(whPurchaseData.total_weight_kg) }} kg / {{ whPurchaseData.pallet_count || 0 }} 托
🛒 采购入库挂托盘明细
{{ pn }}
收到 · {{ k }}
{{ v.pallets }} 托
{{ fmtNum(v.weight_kg) }} kg
今日暂无收到托盘记录。
| 托盘号 | 品类 | 重量(kg) | 方向 | 备注 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ p.direction === 'out' ? '发走' : '收到' }} | {{ p.pallet_no }} | {{ p.category }} | {{ fmtNum(p.weight_kg) }} | {{ p.direction === 'out' ? '发走' : '收到' }} | {{ p.note || '' }} |
🔒 今日封托盘(过账运单)
| 批次 | 包裹 | 过账时间 |
|---|---|---|
| {{ w.batch_no }} | {{ w.orders }} | {{ (w.post_time||'').replace('T',' ').slice(0,16) }} |
✈️ 今日发走托盘
| 托盘号 | 批次 | 重量 |
|---|---|---|
| {{ p.pallet_no }} | {{ p.batch_no }} | {{ fmtNum(p.weight_kg) }} kg |
今日暂无发走托盘记录(托盘台账按航班日)。
🛒 商品采购入库
{{ whPurchaseData.lines || 0 }} 行
{{ whPurchaseData.total_qty || 0 }} 件 · {{ fmtNum(whPurchaseData.total_weight_kg) }} kg
€{{ fmtNum(whPurchaseData.total_eur) }}
{{ whPurchaseData.pallet_count || 0 }} 托盘
✅ 已审核 {{ whPurchaseData.approved_lines || 0 }}
⏳ 待审核 {{ whPurchaseData.pending_lines }}
⚠️ 到货后需在「📊 库存管理」按账号登记库存基数
{{ whPurchaseError }}
{{ whPurchaseMatched }}
| 供应商 | SKU | 名称 | 品类 | 数量 | 单价(€) | 金额(€) | 重量(kg) | 托盘 | 账号 | 备注 | 审核 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ fmtNum((Number(whPurchaseEdit.qty)||0) * (Number(whPurchaseEdit.price_eur)||0)) }} | {{ p.approved ? '✅ 已审核' : '⏳ 待审核' }} | {{ p.supplier }} | {{ p.sku }} | {{ p.name_cn }} | {{ p.category }} | {{ p.qty }} {{ p.unit }} | {{ fmtNum(p.price_eur) }} | {{ fmtNum(p.amount_eur) }} | {{ fmtNum(p.weight_kg) }} | {{ p.pallet_no || '—' }} | {{ p.account }}— | {{ p.note || '' }} |
今日暂无采购入库记录。上游无采购接口,需人工录入。
📦 按品类
| 品类 | 行 | 数量 | 重量 | 金额(€) |
|---|---|---|---|---|
| {{ c.category }} | {{ c.lines }} | {{ fmtNum(c.qty) }} | {{ fmtNum(c.weight_kg) }} kg | {{ fmtNum(c.amount_eur) }} |
🏢 按供应商
| 供应商 | 行 | 数量 | 重量 | 金额(€) |
|---|---|---|---|---|
| {{ s.supplier }} | {{ s.lines }} | {{ fmtNum(s.qty) }} | {{ fmtNum(s.weight_kg) }} kg | {{ fmtNum(s.amount_eur) }} |
📦 累计结存(全部采购入库累计)
{{ whPurchaseStock.total_skus }} 个SKU
{{ fmtNum(whPurchaseStock.total_qty) }} 件 · {{ fmtNum(whPurchaseStock.total_weight_kg) }} kg
€{{ fmtNum(whPurchaseStock.total_eur) }}
| SKU | 名称 | 品类 | 在库数量 | 在库重量 | 在库金额(€) | 入库次数 | 最后到货 |
|---|---|---|---|---|---|---|---|
| {{ s.sku }} | {{ s.name_cn }} | {{ s.category }} | {{ fmtNum(s.qty) }} {{ s.unit }} | {{ fmtNum(s.w) }} kg | {{ fmtNum(s.amount_eur) }} | {{ s.lines }} | {{ s.last_date }} |
暂无累计入库数据。
🚚 今日卡车取货
📤 今日出库 {{ (whData.outbound && whData.outbound.pkgs) || 0 }} 包裹 · {{ fmtMoney((whData.outbound && whData.outbound.weight_kg) || 0) }} kg
{{ whData.truck.merchant_count || 0 }} 家商家 · {{ whData.truck.total_pkgs || 0 }} 包裹
+人工 {{ whData.truck.manual_merchant_count || 0 }} 家 / {{ whData.truck.manual_count || 0 }} 件(不计入统计)
📦 今日出库构成:
{{ b.category }} {{ b.pkgs }} 件 / {{ fmtMoney(b.weight_kg) }} kg
📌 口径说明
:今日出库 {{ whData.outbound.pkgs || 0 }} 件(含前几天入库的库存)·
下方商家表 = 今日入库 {{ (whData.truck.auto_count) || 0 }} 件(今天扫描入库,按货易达账号分组)
· 差额 {{ (whData.outbound.pkgs || 0) - (whData.truck.auto_count || 0) }} 件为前几天入库、今天才出库
| 商家 | 今日数量 | 系统统计 | 来源 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| {{ m.auto_count }} | {{ m.source === 'manual' ? '人工' : '系统' }} | {{ m.merchant }} | {{ m.count }} | {{ m.auto_count }} | {{ m.source === 'manual' ? '人工' : '系统' }} |
今日暂无卡车取货记录。
🖨 打单发货
数据来自本地订单库(等同「订单列表」)· 点击「🔄 同步更新」只拉最新订单
⏳ 扣库存中…
{{ stockDeductMsg }}
查询中…
⏳ 同步最新订单中…{{ printSyncMsg }}
🖨 正在生成面单 PDF…
❌ {{ printError }}
⚠️ {{ printWarn }}
勾选要显示的列 · 拖动 ⠿ 调整顺序
⠿
{{ c.label }}
▼
全部线路
{{ ln.name }}
没有匹配的线路
▼
全部账号
{{ printMemberPicked.includes(m) ? '☑' : '☐' }}{{ m }}
没有匹配的账号
→
共 {{ printMeta.total }} 单 · 本地查询耗时 {{ printMeta.elapsed }}s
(命中订单 {{ printMeta.upstream_total }} 单,本地商品筛选后 {{ printMeta.total }} 单)
· 关键词「{{ printKeyword }}」命中 {{ printRowsAll.length }} 单
(未打印快递单 = 快递单号已生成但面单还没下载)
| 打印 | 状态 | {{ c.label }} {{ printSortIcon(c.key) }} | ||
|---|---|---|---|---|
| {{ r.label_downloaded ? '已打印' : '未打印' }} | {{ printShipTag(r) }} |
{{ r.seller_remark || '—' }}
✎ 已手工修改
|
{{ printKeyword ? '没有匹配「' + printKeyword + '」的订单。' : '没有符合条件的订单。' }}
总数 {{ catData.stats.total }}
奶粉 {{ catData.stats.milk_cnt }}
人工新增 {{ catData.stats.manual_cnt }}
人工修改 {{ catData.stats.edited_cnt }}
📦 纸箱 {{ catBoxStats.specs }} 种
{{ catError }}
| {{ c.label }} | |||
|---|---|---|---|
| 没有匹配的商品 |
{{ catOffset+1 }} - {{ Math.min(catOffset+50, catData.total) }} / {{ catData.total }}
📜 按历史发货记录同步商品库
账号:{{ (catHistAccounts||[]).join(' / ') }}
收录 {{ catHistPreview.scope_total }} SKU
发货商品 {{ catHistPreview.shipped_skus }}
耗材 {{ catHistPreview.consumable_skus }}
新增补录 {{ (catHistPreview.added||[]).length }}
移出范围 {{ catHistPreview.deleted_count }}
➕ 新增补录(历史发货但商品库没有)
{{ s }}
➖ 移出收录范围(其他账号在卖)
{{ s }}
⚠️ 移出的商品行在库内保留(不影响其它账号的库存扣减),仅从商品数据库列表移除。
按货易达账号拆分库存(MSCJ / tingna520 / junjie0803 / daniel)
⚠️ {{ invUnassigned }} 条未填基数
{{ a.account }}
库存基数
{{ a.stock }}
订单出库
{{ a.out }}
可用库存
{{ a.available }}
SKU {{ a.sku_count }} 个 · 出库 SKU {{ a.out_sku_count }} 个
涉及账号 {{ invSummary.allocated ? invSummary.allocated.accounts : 0 }} 个
出库台账 {{ invSummary.ledger ? invSummary.ledger.rows : 0 }} 条 / {{ invSummary.ledger ? invSummary.ledger.qty : 0 }}
⚠️ 还没有给任何账号登记库存基数 —— 请直接在下方表格里点库存基数数字填入各账号的实际存货
(红底行 = 有订单出库但还没填基数)。
{{ invError }}
{{ invMsg }}
📦 库存操作
调拨:
→
| {{ c.label }} |
|---|
| {{ r.stock }} |
| 暂无数据,请点上方「✏️ 设置基数」登记各账号库存 |
第 {{ invPage }} / {{ invPages }} 页 · 共 {{ invTotal }} 条
共 {{ auditData.total }} 条写操作记录
(删除操作带 ⚠️ 并附删除前快照,可直接还原)
加载中…
暂无写操作记录
| 时间 | 操作者 | 来源 | 级别 | 动作 | 详情 | 操作 |
|---|---|---|---|---|---|---|
| {{ a.ts.replace('T',' ') }} | {{ a.actor }} | {{ a.source==='local' ? '本机' : '外网' }} | {{ a.level }} | {{ a.action }} | {{ (a.detail||'').slice(0,300) }} |
加载数据中...