cangku/frontend/src/api/stockSalesAnalysis.js
youruo 2c8ed86c26 feat: 库存动销分析「销售=0」档支持导出 SKU 明细
- 后端新增 GET /api/stock-sales-analysis/zero-sales-export:
  复用与页面完全一致的分档口径(同一段 gradeCase 表达式 + 「有库存或有销量」过滤),
  输出仓库/SKU编码/SKU名称/库存数量/销量/统计天数/统计基准日的 SKU 级明细;
  支持.days 统计窗口、wmsCoId 逗号分隔过滤(仅允许仓库清单内的 ID,防任意拼参)、
  format=xlsx|csv,复用通用导出服务 exportWorkbook
- services 新增 fetchZeroSaleSkuRows:SKU 级「销售=0」查询,LEFT JOIN rpt.jst_sku 取名称,
  按仓库+库存倒序排列
- 前端工具栏新增「导出销售=0」按钮:跟随当前统计天数与仓库筛选,
  文件名含业务日期与仓库范围,失败时解出错误体给出可读提示
- 测试补充 3 条:防呆抛错、空参短路、SQL 口径与参数传递断言

验证:后端 syntax 通过、单测 8/8(全量 389 条仅既有 Windows 环境项失败);
前端 eslint/build/test 21/21 通过;
本地实测:全仓导出 3641 行、26 仓、销量列全为 0;
单仓(崔桥半成品包装 694 行)与页面「销售=0」SKU 数一致;
浏览器实测点击下载真实文件名「库存动销分析-销售0明细-20260926.xlsx」
2026-09-27 17:47:45 +08:00

17 lines
665 B
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import request from './request';
const LIST_TIMEOUT_MS = 5 * 60 * 1000;
// 仓库库存动销分析:仓库 × 动销等级 → SKU数量 / SKU占比 / 库存数量 / 库存占比 / 销量
// refresh=1 跳过后端 5 分钟缓存,强制重算
export const getStockSalesAnalysis = (params = {}) => request.get(
'/api/stock-sales-analysis',
{ params, timeout: LIST_TIMEOUT_MS }
);
// 导出「销售=0」档的 SKU 级明细(xlsx/csv,服务端直接返回文件流)
export const exportStockSalesZeroDetail = (params = {}) => request.get(
'/api/stock-sales-analysis/zero-sales-export',
{ params, responseType: 'blob', timeout: LIST_TIMEOUT_MS }
);