# 预销售单/预采购单 API 字段分析报告 > **文档目的:** 对比 API 响应字段与前端实际使用情况,优化接口返回数据 > > **生成日期:** 2026-02-01 --- ## 一、问题概述 - **业务场景:** 预销售单/预采购单的列表、详情展示 - **涉及 API:** - `GET /api/v1/pre-sales-orders/` - `GET /api/v1/pre-sales-orders/{id}/` - `GET /api/v1/pre-purchase-orders/` - `GET /api/v1/pre-purchase-orders/{id}/` - **问题类型:** API 返回了前端未使用的冗余字段 --- ## 二、单据主体字段分析 ### 2.1 API 返回但前端未使用的字段(建议移除或设为可选) | 字段 | 类型 | 说明 | 前端使用情况 | |------|------|------|-------------| | `merchant` | int | 商户 ID | ❌ 未使用,前端用户已在自己商户下 | | `merchant_name` | string | 商户名称 | ❌ 未使用 | | `created_by` | int\|null | 创建者用户 ID | ❌ 未使用,只用 username | | `operator` | int\|null | 经办人 ID | ❌ 未使用,只用 name | | `updated_at` | datetime | 更新时间 | ❌ 未使用 | ### 2.2 前端实际使用的字段 | 字段 | 使用场景 | |------|----------| | `id` | 主键,编辑/删除操作 | | `human_id` | 列表显示、详情标题 | | `customer` / `supplier` | 表单回显(编辑时) | | `customer_name` / `supplier_name` | 列表列、详情显示 | | `warehouse` | 表单回显(编辑时) | | `warehouse_name` | 列表列、详情显示 | | `created_by_username` | 详情抽屉显示 | | `operator_name` | 列表列、详情显示 | | `kind` | 列表列(标签)、详情显示 | | `remarks` | 列表列、详情显示 | | `created_at` | 列表列(格式化显示) | | `items` | 详情明细表格 | --- ## 三、明细 items 字段分析 ### 3.1 API 返回但前端未使用的字段 | 字段 | 类型 | 说明 | 前端使用情况 | |------|------|------|-------------| | `quantity_of_rolls` | string\|null | 各条数数量 | ❌ 页面未显示 | | `num_of_rolls` | int | 条数 | ❌ 页面未显示 | | `order_quantity` | int\|null | 下单数量 | ❌ 页面未显示 | | `created_at` | datetime | 明细创建时间 | ❌ 页面未显示 | | `updated_at` | datetime | 明细更新时间 | ❌ 页面未显示 | ### 3.2 前端实际使用的字段 | 字段 | 使用场景 | |------|----------| | `id` | 表格 row key | | `product_id` | 编辑时回显 | | `product_name` | 明细表格列 | | `spec` | 明细表格列 | | `color` | 明细表格列 | | `quantity` | 明细表格列 | | `unit` | 明细表格列 | | `remarks` | 明细表格列 | --- ## 四、建议方案 ### 方案 A:精简默认响应(推荐) 移除以下字段的默认返回,减少数据传输量: **单据主体移除:** ```diff { "id": 1, "human_id": "YS20260201000001", - "merchant": 1, - "merchant_name": "XX商户", "customer": 123, "customer_name": "客户A", "warehouse": 1, "warehouse_name": "主仓库", - "created_by": 10, "created_by_username": "admin", - "operator": 5, "operator_name": "张三", "kind": 1, "remarks": "备注", "created_at": "2026-02-01T10:00:00Z", - "updated_at": "2026-02-01T10:00:00Z", "items": [...] } ``` **明细 items 移除:** ```diff { "id": 1, "product_id": 100, "product_name": "产品A", "color": "红色", "quantity": "20.00", "unit": "米", "spec": "规格1", - "quantity_of_rolls": null, - "num_of_rolls": 1, - "order_quantity": null, "remarks": "明细备注" - "created_at": "2026-02-01T10:00:00Z", - "updated_at": "2026-02-01T10:00:00Z" } ``` ### 方案 B:支持 fields 参数按需返回 如果其他客户端可能需要这些字段,可以支持 `fields` 查询参数: ``` GET /api/v1/pre-sales-orders/?fields=id,human_id,customer_name,items ``` --- ## 五、预估收益 假设每条单据平均 5 个明细项: | 优化项 | 移除字段数 | 预估节省字节 | |--------|-----------|-------------| | 单据主体 | 5 个字段 | ~150 bytes/单据 | | 明细项 | 5 个字段 × 5 项 | ~250 bytes/单据 | | **总计** | - | ~400 bytes/单据 | 列表页默认 20 条:**节省约 8KB/请求** --- ## 六、确认事项 请后端同事确认: 1. [ ] 上述"未使用字段"是否可以从默认响应中移除? 2. [ ] 是否有其他客户端(如小程序、管理后台)依赖这些字段? 3. [ ] 如果有其他依赖,是否采用方案 B(fields 参数)? 4. [ ] `quantity_of_rolls`、`num_of_rolls`、`order_quantity` 这三个明细字段是否有业务场景需要?如果暂时不用,前端类型定义中会保留但标记为可选。 --- **前端负责人:** [待填写] **后端负责人:** [待填写] **预计完成:** [待填写]