请先登录
去登录实时库存总金额/总数量
{{ canViewInvReportFinancial ? '¥' + formatNumber(totalCurrentAmount) : '—' }}
{{ formatNumber(totalCurrentQuantity) }} 个
本月入库/出库数量
入库:{{ formatNumber(totalMonthIn) }} 个
出库:{{ formatNumber(totalMonthOut) }} 个
类型:{{ catStat.categoryName }}
数量:{{ formatNumber(catStat.quantity) }} 个
总金额:{{ canViewInvReportFinancial ? '¥' + formatNumber(catStat.amount) : '—' }}
| 产品ID | 产品(型号/品牌) | 订单出库 | 流水出库 | 差异 |
|---|---|---|---|---|
| {{ row.productId }} | {{ row.displayName || row.productName || row.model || '—' }} | {{ formatNumber(row.orderOut) }} | {{ formatNumber(row.inventoryLogOut) }} | {{ formatNumber(row.diff) }} |
| 产品ID | 产品(型号/品牌) | 订单出库 | 流水出库 | 差值 |
|---|---|---|---|---|
| {{ row.productId }} | {{ row.displayName || row.model || '—' }} | {{ formatNumber(row.orderOut) }} | {{ formatNumber(row.inventoryLogOut) }} | {{ formatNumber(row.diff) }} |
| 序号 | 产品分类 | 商品名称 | 库存成本价 | 预警设置 | 期初库存 | 本期入库 | 本期出库 | 实时库存 | {{ day }}日 | SN 台账 |
操作 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 启用预警 | 安全库存 主/严重 |
最高库存 | 数量 | 金额 | 数量 | 金额 | 数量 | 金额 | 数量 | 金额 | 入库 | 出库 | 操作 | ||||||||||
| {{ (reportCurrentPage - 1) * reportPageSize + index + 1 }} | {{ item.categoryName || '未分类' }} |
{{ item.productName }}
|
{{ formatNumber(item.costPrice) }}
—
|
安
严
|
{{ item.maxStock || 100 }} |
{{ formatNumber(item.initialQuantity) }}
|
¥{{ formatNumber(item.initialAmount) }} — |
{{ formatNumber(item.monthIn) }}
{{ formatNumber(item.monthIn) }}
|
¥{{ formatNumber(item.monthInAmount) }}
¥{{ formatNumber(item.monthInAmount) }}
—
|
{{ formatNumber(item.monthOut) }}
{{ formatNumber(item.monthOut) }}
|
¥{{ formatNumber(item.monthOutAmount) }}
¥{{ formatNumber(item.monthOutAmount) }}
—
|
{{ formatNumber(Math.max(0, item.currentQuantity || 0)) }} | ¥{{ formatNumber(Math.max(0, item.currentAmount || 0)) }} — |
{{ formatNumber(item.dailyStats?.in?.[day] || 0) }}
|
0) && selectInvKey(`daily_out_${item.id}_${day}`)"
@dblclick="canEdit && (item.currentQuantity > 0) && startEdit(`daily_out_${item.id}_${day}`, item.dailyStats?.out?.[day] || 0, { escFrom: item.dailyStats?.out?.[day] || 0, fromPoint: { clientX: $event.clientX, clientY: $event.clientY } })"
@keydown="(canEdit && (item.currentQuantity > 0)) && handleInvDisplayKeydown($event, `daily_out_${item.id}_${day}`, item)"
:class="['pi-excel-cell-minh text-center outline-none', { 'editable-cell': canEdit && (item.currentQuantity > 0), 'pi-inv-cell--sel': isInvKeySelected(`daily_out_${item.id}_${day}`) }]"
>{{ formatNumber(item.dailyStats?.out?.[day] || 0) }}
|
||||||||
|
{{ totalReportCount + index + 1 }}
|
{{ generateProductNumber(newRow) }} |
{{ newRow.productName || '(点击选中,Enter 或双击编辑)' }}
|
{{ formatNumber(newRow.costPrice != null ? newRow.costPrice : 0) }}
—
|
— | — | — |
{{ formatNumber(newRow.initialQuantity != null ? newRow.initialQuantity : 0) }}
|
¥{{ formatNumber((newRow.initialQuantity || 0) * (newRow.costPrice || 0)) }} — | 0 | ¥0 — | 0 | ¥0 — | {{ formatNumber(newRow.initialQuantity || 0) }} | ¥{{ formatNumber((newRow.initialQuantity || 0) * (newRow.costPrice || 0)) }} — | 0 | 0 | |||||||
本月无库存销售笔数
{{ formatNumber(outOfStockStats.totalRecords) }} 条
本月无库存销量合计
{{ formatNumber(outOfStockStats.totalQuantity) }} 个
涉及产品数
{{ formatNumber(outOfStockStats.productCount) }} 个
| 序号 | 日期 | 订单号 | 产品分类 | 产品型号 | 无库存销量 | 客服 |
|---|---|---|---|---|---|---|
| {{ (outOfStockPage - 1) * outOfStockPageSize + idx + 1 }} | {{ row.date }} | #{{ row.orderId }} | {{ row.categoryName || '—' }} | {{ row.productModel || '—' }} | {{ formatNumber(row.quantity) }} | {{ row.customerServiceName || '—' }} |
| 暂无无库存销售记录 | ||||||
| 序号 | 产品分类 | 产品型号 | 无库存销量合计 | 订单笔数 | 最早销售日期 | 最晚销售日期 |
|---|---|---|---|---|---|---|
| {{ (outOfStockPage - 1) * outOfStockPageSize + idx + 1 }} | {{ row.categoryName || '—' }} | {{ row.productModel || '—' }} | {{ formatNumber(row.totalQuantity) }} | {{ row.orderCount }} | {{ row.firstDate || '—' }} | {{ row.lastDate || '—' }} |
| 暂无无库存销售记录 | ||||||
实时库存总金额/总数量
{{ canViewInvReportFinancial ? '¥' + formatNumber(totalCurrentAmount) : '—' }}
{{ formatNumber(totalCurrentQuantity) }} 个
本月入库/出库数量
入库:{{ formatNumber(totalMonthIn) }} 个
出库:{{ formatNumber(totalMonthOut) }} 个
类型:{{ catStat.categoryName }}
数量:{{ formatNumber(catStat.quantity) }} 个
总金额:{{ canViewInvReportFinancial ? '¥' + formatNumber(catStat.amount) : '—' }}
| 分类 | 品牌 | 产品名称 | 采购价格 | 淘宝价格 | 京东价格 | 库存 | 其他 | 操作 | |
|---|---|---|---|---|---|---|---|---|---|
| {{ getCategoryName(p) || '—' }} | {{ p.brand || '其他' }} | {{ p.model }} | ¥{{ formatNumber(p.price) }} |
¥{{ formatNumber(p.taobaoPrice || 0) }}
|
¥{{ formatNumber(p.jdPrice || 0) }}
|
{{ getProductStock(p.id) }} |
{{ p.notes || '-' }}
{{ p.notes || '-' }}
|
|
|
| 加载中… | |||||||||
📦暂无产品数据 |
| ID | 分类名称 | 过剩预警 | 产品数量 | 操作 |
|---|---|---|---|---|
| #{{ cat.id }} | {{ cat.name }} | {{ (cat.overstockWarningEnabled === 0 || cat.overstockWarningEnabled === false) ? '关闭' : '开启' }} | {{ getCategoryProductCount(cat.id) }} |
|
🏷️暂无分类数据 | ||||
采购登记 → 待质检/待确认 → 确认后写入库存、SN 台账与成本历史
操作说明与校验
POST /api/inventory/in);已维护 SN 台账时须一次填齐 SN(每行一个、不可重复),且SN 行数须与入库数量一致(POST /api/inventory/manual-in-with-sn,另需 sn:write 或财务/管理员)。以下为状态为「待入库」的采购单,确认前可随时导出 SN 行清单核对。
当前没有待入库采购单
从 Excel 导入采购明细后,新单会出现在此列表。也可使用企业已有流程在别处建单后回到此处确认入库。
| 单号 | 供应商 | 状态 | 汇总 | 备注 | 创建 | 操作 |
|---|---|---|---|---|---|---|
| #{{ order.id }} | {{ order.supplierName || '—' }} | {{ labelPurchaseStatus(order.status) }} | {{ order.lineCount != null ? order.lineCount : '—' }} 行 · {{ formatNumber(order.totalQuantity != null ? order.totalQuantity : 0) }} 件 · {{ formatNumber(order.snCount != null ? order.snCount : 0) }} SN · ¥{{ formatNumber(order.totalLineAmount != null ? order.totalLineAmount : 0) }} | {{ order.notes || '—' }} |
{{ order.createdByUsername || '—' }}
{{ order.createdAt || '—' }}
|
只读
|
| 名称 | 原成本单价 | 数量 | 调整后成本单价 | 原总价 | 调整后总价 | 操作 |
|---|---|---|---|---|---|---|
|
{{ row.keyword || '输入产品名称自动检索...' }}
{{ p.productName }}
|
{{ formatNumber((getPriceAdjustPreview(row) && getPriceAdjustPreview(row).oldCostPrice) || 0) }} | {{ formatNumber((getPriceAdjustPreview(row) && getPriceAdjustPreview(row).quantity) || 0) }} |
{{ row.newCostPrice === '' || row.newCostPrice == null ? '' : row.newCostPrice }}
|
{{ formatNumber((getPriceAdjustPreview(row) && getPriceAdjustPreview(row).oldTotal) || 0) }} | {{ formatNumber((getPriceAdjustPreview(row) && getPriceAdjustPreview(row).newTotal) || 0) }} | |
| 合计 | {{ formatNumber(priceAdjustTotals.totalBefore) }} | {{ formatNumber(priceAdjustTotals.totalAfter) }} | 差额 {{ formatNumber(priceAdjustTotals.totalDiff) }} |
点击任意一行查看该次平价的各产品明细
| ID | 操作人 | 备注 | 原总价 | 调整后总价 | 差额 | 时间 |
|---|---|---|---|---|---|---|
| #{{ h.id }} | {{ h.createdByUsername || '-' }} | {{ h.note || '-' }} | {{ formatNumber(h.totalBefore) }} | {{ formatNumber(h.totalAfter) }} | {{ formatNumber(h.totalDiff) }} | {{ h.createdAt || '-' }} |
实时库存与 SN 台账
| SN | 状态 | 来源 | 平台订单号 | 订单保存时间 | 备注 | 更新时间 |
|---|---|---|---|---|---|---|
| {{ r.snCode }} | {{ r.status }} | {{ r.sourceType || '—' }} | {{ r.soldOrderPlatformId || '—' }} | {{ formatSnLedgerOrderDate(r.soldOrderCreatedAt) }} | {{ r.note || '—' }} | {{ r.updatedAt || '—' }} |
| 暂无数据 |