瀏覽代碼

docs: 商家结算供货明细按月导出设计规格

对齐月度汇总口径,明确选月导出 02 明细的交互与 API 变更。

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu 2 月之前
父節點
當前提交
dbd3e0aa55
共有 1 個文件被更改,包括 134 次插入 和 0 次删除
  1. 134 0
      docs/superpowers/specs/2026-08-31-supplier-supply-export-by-month-design.md

+ 134 - 0
docs/superpowers/specs/2026-08-31-supplier-supply-export-by-month-design.md

@@ -0,0 +1,134 @@
+# 商家结算「导出供货结算」按月导出设计
+
+> 日期:2026-08-31  
+> 范围:`web-admin` 商家结算管理 · 模板 02 明细导出  
+> 关联:`docs/superpowers/specs/2026-08-30-settlement-report-export-template-design.md`  
+> 状态:设计已确认,待实现
+
+## 1. 背景与目标
+
+### 1.1 背景
+
+商家结算管理页现有两个报表导出按钮:
+
+| 按钮 | 模板 | 当前行为 |
+|------|------|----------|
+| 导出供货结算 | 02 供货商供货结算 | 跟页上筛选/勾选导出商品明细;时间优先完结日 |
+| 月度结算导出 | 05 月度供货商结算汇总 | 弹窗选月;按订单下单月 `create_at` 汇总 |
+
+运营期望两者成对使用:**同一月份的汇总表 + 明细表**。
+
+### 1.2 目标
+
+- 「导出供货结算」改为:**选月 → 导出该月全部商品明细**。
+- 与「月度结算导出」使用**同一时间口径**(订单 `create_at` 落在所选年月)。
+- 明细不再依赖页上日期筛选、关键字、勾选订单。
+
+### 1.3 非目标
+
+- 不改客户结算 / 配送列表的明细导出交互。
+- 不改模板 02 / 05 列结构与 Excel 生成工具。
+- 不替换结算单行内「下载」旧版 Excel。
+- 不恢复「按筛选/勾选导出明细」能力(本期明确放弃)。
+
+---
+
+## 2. 已确认决策
+
+1. 交互:**只按月份**(点按钮 → 选月 → 导出该月全量明细)。
+2. 时间字段:与月度汇总一致,用订单 **`create_at`**(不再用完结日优先)。
+3. 范围:当前运营区域 + `is_del = 0` + 排除已取消订单;不叠加供应商/关键字/勾选。
+4. 方案:后端明细接口支持 `yearMonth`;前端固定走月度路径(方案 B)。
+
+---
+
+## 3. 交互与产物
+
+### 3.1 交互
+
+- 「导出供货结算」打开选月弹窗(样式对齐现有「月度供货商结算汇总导出」:`order-module-dialog` + 月份 `el-date-picker`)。
+- 标题建议:`供货结算明细导出`(与汇总弹窗区分)。
+- 未选月份:提示「请选择结算月份」,不请求。
+- 无数据:`暂无数据`;有数据:下载后关闭弹窗。
+
+「月度结算导出」行为不变。
+
+### 3.2 文件命名
+
+| 按钮 | Sheet | 文件名 |
+|------|-------|--------|
+| 导出供货结算 | `02_供货商供货结算` | `供应商_供货结算_YYYY-MM.xlsx` |
+| 月度结算导出 | `05_月度供货商结算汇总` | `供应商_月度结算汇总_YYYY-MM.xlsx`(不变) |
+
+---
+
+## 4. 数据口径
+
+与 `build_supplier_monthly_summary` 对齐:
+
+- `yearMonth`:`YYYY-MM` → `[start, end)`(`parse_year_month`)。
+- 过滤:`BizOrder.create_at >= start AND create_at < end`。
+- `BizOrder.is_del = 0`,`order_status != cancelled`。
+- `region_id`:当前有效区域。
+- 行粒度:仍为一行 = 一条订单商品行(供货价视角);列填充规则仍按原 02 模板(扣款/实结等无数据则空)。
+
+**配对保证**:同一 `yearMonth` + 同一 `regionId` 下,明细中出现的供应商集合应覆盖汇总表供应商;汇总笔数/数量/应付可由该月明细聚合得到(允许浮点展示差异在既有金额规则内)。
+
+---
+
+## 5. API 变更
+
+### 5.1 `GET /web/admin/settlement-reports/supplier-supply-lines`
+
+新增查询参数:
+
+| 参数 | 必填 | 说明 |
+|------|------|------|
+| `yearMonth` | 与筛选模式互斥 | `YYYY-MM`;有值时进入**按月模式** |
+
+**按月模式(本期商家结算页使用):**
+
+- 必填:`yearMonth`;可选:`regionId`。
+- 忽略:`supplierId`、`keyword`、`startDate`、`endDate`、`orderIds`。
+- 服务层按 §4 过滤;时间字段改为 `create_at`(仅此模式)。
+
+**筛选模式(保留兼容,本期 web-admin 商家结算页不再调用):**
+
+- 无 `yearMonth` 时行为可与现网一致(含完结日优先逻辑),供其他潜在调用方或后续回退。
+- 若同时传 `yearMonth` 与筛选参数:以 `yearMonth` 为准,忽略筛选参数(不报错)。
+
+非法 `yearMonth`:返回 400。
+
+### 5.2 前端 API
+
+`fetchSettlementReportSupplierSupplyLines` 增加可选 `yearMonth`;商家结算页只传 `{ yearMonth, regionId }`。
+
+---
+
+## 6. 前端改动要点
+
+文件:`web-admin/src/views/system/supplier-settlement/index.vue`
+
+- 「导出供货结算」改为打开选月弹窗(可复用状态机:一个弹窗 + `exportKind: 'detail' | 'monthly'`,或两个独立弹窗;推荐**一个弹窗 + kind**,避免重复 UI)。
+- `handleExportSupplyLines`:校验月份 → 调接口 → 映射 `HEADERS_02` → 文件名带 `YYYY-MM`。
+- 删除明细导出对 `buildFilters` / `selectedIds` 的依赖。
+
+Excel 工具:`settlement-report-excel.ts` 无需改表头。
+
+UI 规范:弹窗/按钮对齐 Fresh Mint;若有表述变更,在 `docs/web-admin-ui-spec-fresh-mint.md` 简短留痕。
+
+---
+
+## 7. 测试要点
+
+1. 选某月导出明细与同月汇总:供应商集合一致;明细行可按供应商聚合出汇总数量/应付(在金额规则内)。
+2. 无订单月份:提示暂无数据,不下载空文件。
+3. 未选月点导出:校验提示。
+4. 已取消订单不出现在明细与汇总。
+5. 区域隔离:只含当前区域数据。
+
+---
+
+## 8. 与既有 Spec 的关系
+
+本设计**修订** 2026-08-30 设计中「02 跟页上筛选/勾选、时间优先完结日」在**商家结算管理入口**上的约定;模板列与 05 汇总逻辑不变。实现后应回写该文档 §3 / §5.2 对应说明,并注明以本文为准。