# 采购到货单 - 页面设计开发说明文档 > 版本: 1.0.0 > 创建日期: 2026-02-13 > 更新日期: 2026-02-13 > 来源系统: 升阳云ERP 演示系统 > 所属模块: 采购管理 > 采购到货单 > 前端路由: `/purchasing/checkin` > **关联文档**: [erp数据库设计-数据字典](db/erp数据库设计-数据字典.md)(采购管理模块表与字段映射);[mom系统采购订单-页面开发说明文档](mom系统采购订单-页面开发说明文档.md)(上游单据) --- ## 目录 0. [业务流程总览](#0-业务流程总览) 1. [页面概述](#1-页面概述) 2. [页面结构](#2-页面结构) 3. [列表页设计](#3-列表页设计) 4. [新增/编辑页设计](#4-新增编辑页设计) 5. [数据字段定义](#5-数据字段定义) 6. [按钮操作说明](#6-按钮操作说明) 7. [页面交互规则](#7-页面交互规则) 8. [接口调用说明](#8-接口调用说明) 9. [状态流转](#9-状态流转) 10. [业务规则](#10-业务规则) 11. [前端组件设计](#11-前端组件设计) 12. [数据模型](#12-数据模型) --- ## 0. 业务流程总览 ### 0.1 采购到货单在 ERP 中的定位 采购到货单是**采购订单→到货登记→入库**链条中的核心登记单据,承接采购订单的采购指令,记录供应商交付物料的到货信息,下游驱动采购入库、质检入库。 ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 销售订单 │────►│ 生产计划单 │────►│ 采购计划单 │────►│ 采购订单 │ │ │ │ + BOM运算 │ │ (物料需求) │ │ (执行采购) │ └──────────────┘ └──────────────┘ └──────────────┘ └──────┬───────┘ │ 引入 ▼ ┌──────────────┐ │ ★ 采购到货单 │ │ (到货登记) │ └──────┬───────┘ │ 入库 ▼ ┌──────────────┐ │ 采购入库单 │ │ (库存增加) │ └──────────────┘ ``` ### 0.2 端到端业务流程 ``` 采购订单(已审核) │ 引入(采购订单物料明细) ▼ ┌─────────────────┐ 选择供应商 ┌─────────────────┐ │ ★ 采购到货单 │ ◄───────────────── │ 原料供应商档案 │ │ - 表头+供应商 │ │ │ │ - 物料明细子表 │ └─────────────────┘ │ - 到货数量 │ └────────┬────────┘ │ 保存 → 审核 ▼ ┌─────────────────┐ │ 采购入库单 │ ──► 库存增加 │ - 入库仓库 │ │ - 入库数量 │ └─────────────────┘ ``` ### 0.3 采购到货单内部业务流程 | 阶段 | 操作 | 触发条件 | 结果 | |------|------|----------|------| | 1. 新建 | 点击「新增」 | 始终可用 | 打开新增页,编码自动生成,状态=开立 | | 2. 引入 | 点击「引入」→ 弹窗「采购订单明细」→ 勾选 → 确定 | 新增/编辑状态 | 物料明细子表填充:跟单编号、订单编码、物料、订单数量、到货数量 | | 3. 选择仓库 | 点击仓库选择 | 新增/编辑页 | 表头填充仓库信息 | | 4. 保存 | 点击「保存」 | 至少1条物料明细 | 数据持久化 | | 5. 审核 | 点击「审核」 | 开立状态,已保存 | 状态→审核,记录审核员/日期;**审核后可生成入库单** | | 6. 反审核 | 点击「反审核」 | 审核状态,无下游入库单 | 状态→开立 | | 7. 删除 | 操作列「删除」或批量删除 | 开立状态 | 逻辑删除 | ### 0.4 上下游单据关系 | 上游单据 | 关联字段 | 说明 | |----------|----------|------| | 采购订单 | order_id, order_code | 引入弹窗「采购订单明细」| | 供应商 | supplier_id, supplier_name | 引入时从采购订单带入或手动选择 | | 下游单据 | 关联字段 | 说明 | |----------|----------|------| | 采购入库单 | checkin_id, checkin_code | 到货审核后生成入库单 | ### 0.5 关键数量逻辑 | 字段 | 含义 | 计算/来源 | |------|------|-----------| | 订单数量 (order_quantity) | 采购订单中的数量 | 引入时从采购订单带入,只读 | | 到货数量 (quantity) | 本次实际到货数量 | 引入后可修改,默认等于订单数量 | | 已入库数量 (stocked_quantity) | 已执行入库的数量 | 从入库单回写,只读 | | 总到货数量 (total_quantity) | 到货单总到货数量 | 明细行到货数量合计 | --- ## 1. 页面概述 ### 1.1 功能说明 采购到货单页面用于管理企业的采购到货登记。采购到货单是采购订单与入库操作之间的桥梁,采购员根据供应商实际交货情况登记到货物料及数量,审核后驱动仓库入库操作。 ### 1.2 业务场景 - **引入采购订单**: 从已审核的采购订单引入物料明细(订单编码、跟单编号、物料、订单数量等),填写实际到货数量 - **到货登记**: 登记供应商的物料交付信息,支持分批次到货(同一采购订单可多次到货) - **审核流程**: 到货单审核后不可编辑,审核后方可生成入库单 - **入库跟踪**: 跟踪每个到货物料的入库进度(到货数量 vs 已入库数量) ### 1.3 URL路由参数 | 参数名 | 类型 | 说明 | |--------|------|------| | - | - | 列表页无特殊参数 | --- ## 2. 页面结构 ### 2.1 整体布局 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 顶部导航栏 (64px) │ ├────────┬────────────────────────────────────────────────────────┤ │ 左侧 │ 面包屑: 首页 / 采购管理 / 采购到货单 │ │ 菜单 │ ┌────────────────────────────────────────────────┐ │ │ (200px)│ │ Tab标签: ● 采购到货单 │ │ │ │ ├────────────────────────────────────────────────┤ │ │ 采购管 │ │ 查询区域 (搜索条件) │ │ │ 理 │ ├────────────────────────────────────────────────┤ │ │ ├原料 │ │ 工具栏 (操作按钮) │ │ │ 供应 │ ├────────────────────────────────────────────────┤ │ │ 商 │ │ 数据表格 │ │ │ ├采购 │ ├────────────────────────────────────────────────┤ │ │ 订单 │ │ 底部统计 (到货数量/入库数量汇总) + 分页组件 │ │ │ ├到货 │ └────────────────────────────────────────────────┘ │ │ 单★ │ │ │ ├采购 │ │ │ 发票 │ │ │ ├退货 │ │ │ 单 │ │ ├────────┴────────────────────────────────────────────────────────┤ ``` ### 2.2 页面模式 | 模式 | 说明 | 入口 | |------|------|------| | 列表页 - 明细视图 | **默认视图**,以物料维度展示到货信息,含跟单编号/供应商/物料/到货数量/入库数量 | 菜单点击「采购到货单」 | | 列表页 - 单据视图 | 以单据维度展示列表,侧重单据流程管理,含批量操作 | 明细视图点击「单据」按钮 | | 新增页 | 新建采购到货单 | 列表页点击「新增」 | | 编辑页 | 修改采购到货单(仅开立状态) | 单据视图「编辑」按钮 | | 查看页 | 只读查看到货单详情(含入库进度) | 单据视图「查看」按钮 | ### 2.3 列表页双视图概述 列表页提供 **明细视图** 和 **单据视图** 两种展示模式,通过工具栏按钮相互切换: | 对比项 | 明细视图(默认) | 单据视图 | |--------|-----------------|---------| | 切换按钮 | 工具栏显示「单据」按钮 | 工具栏显示「明细」按钮 | | 复选框列 | 无 | 有 | | 序号列 | 有 | 无 | | 搜索条件 | 跟单编号、单据编码、供应商、物料编码、物料名称、日期范围 | 单据编码、单据状态、供应商、日期范围 | | 工具栏按钮 | 单据、查询所有、新增、导出 | 明细、查询所有、新增、删除、审核、反审核 | | 数据列 | 序号、跟单编号、单据编码、单据状态、供应商、物料名称、物料编码、到货数量、入库数量、单据日期 | 单据编码、单据日期、单据状态、供应商、采购订单号、仓库、业务状态、审核日期、操作 | | 操作列 | 无(单据编码可点击查看详情) | 查看、编辑、删除 | | 批量操作 | 不支持 | 支持(删除、审核、反审核) | | 底部统计 | 到货数量、入库数量汇总 | 到货数量、入库数量汇总 | --- ## 3. 列表页设计 ### 3.1 明细视图(默认视图) 明细视图是进入采购到货单页面时的默认视图,侧重于展示到货物料信息。 #### 3.1.1 搜索条件区域 | 序号 | 字段名 | 标签 | 组件类型 | 宽度 | 说明 | |------|--------|------|----------|------|------| | 1 | trackCode | 跟单编号 | el-input | 140px | 模糊搜索 | | 2 | checkinCode | 单据编码 | el-input | 140px | 模糊搜索 | | 3 | supplierName | 供应商 | el-input | 150px | 模糊搜索 | | 4 | itemCode | 物料编码 | el-input | 140px | 模糊搜索 | | 5 | itemName | 物料名称 | el-input | 140px | 模糊搜索 | | 6 | beginDate | 开始日期 | el-date-picker | 140px | 日期范围起 | | 7 | endDate | 结束日期 | el-date-picker | 140px | 日期范围止 | #### 3.1.2 工具栏按钮 | 序号 | 按钮名称 | 图标 | 类型 | 说明 | |------|----------|------|------|------| | 1 | 单据 | - | primary | 切换到单据视图 | | 2 | 查询所有 | - | default | 重置搜索条件并查询所有 | | 3 | 新增 | el-icon-plus | primary | 打开新增到货单页面 | | 4 | 导出 | el-icon-download | success | 导出到货单列表到Excel | #### 3.1.3 数据表格列定义 | 序号 | 列标题 | 字段名 | 宽度 | 对齐 | 说明 | |------|--------|--------|------|------|------| | 1 | 序号 | - | 60px | center | 自动编号(无复选框) | | 2 | 跟单编号 | trackCode | 130px | left | 取明细行首行的跟单编号 | | 3 | 单据编码 | checkinCode | 140px | left | 蓝色链接,可点击打开详情 | | 4 | 单据状态 | status | 90px | center | 状态标签(开立=灰色, 审核=绿色) | | 5 | 供应商 | supplierName | 180px | left | 供应商名称 | | 6 | 物料名称 | itemName | 150px | left | 取明细行首行物料名称 | | 7 | 物料编码 | itemCode | 120px | left | 取明细行首行物料编码 | | 8 | 到货数量 | totalQuantity | 100px | right | 总到货数量 | | 9 | 入库数量 | stockedQuantity | 100px | right | 已入库数量 | | 10 | 单据日期 | checkinDate | 110px | center | 到货日期 | ### 3.2 单据视图 单据视图侧重于到货单的单据流程管理,支持批量操作(审核、反审核、删除)。 #### 3.2.1 搜索条件区域 | 序号 | 字段名 | 标签 | 组件类型 | 宽度 | 说明 | |------|--------|------|----------|------|------| | 1 | checkinCode | 单据编码 | el-input | 140px | 模糊搜索 | | 2 | status | 单据状态 | el-select | 120px | 下拉选择,可清空 | | 3 | supplierName | 供应商 | el-input | 150px | 模糊搜索 | | 4 | beginDate | 开始日期 | el-date-picker | 140px | 日期范围起 | | 5 | endDate | 结束日期 | el-date-picker | 140px | 日期范围止 | **单据状态选项:** | 值 | 标签 | 标签颜色 | |----|------|----------| | DRAFT | 开立 | info (灰色) | | APPROVED | 审核 | success (绿色) | #### 3.2.2 工具栏按钮 | 序号 | 按钮名称 | 图标 | 类型 | 说明 | |------|----------|------|------|------| | 1 | 明细 | - | primary | 切换到明细视图 | | 2 | 查询所有 | - | default | 重置搜索条件并查询所有 | | 3 | 新增 | el-icon-plus | primary | 打开新增到货单页面 | | 4 | 删除 | el-icon-delete | danger | 批量删除选中记录(需勾选) | | 5 | 审核 | el-icon-check | success | 批量审核选中记录(需勾选) | | 6 | 反审核 | - | warning | 批量反审核选中记录(需勾选) | #### 3.2.3 数据表格列定义 | 序号 | 列标题 | 字段名 | 宽度 | 对齐 | 说明 | |------|--------|--------|------|------|------| | 0 | (复选框) | - | 55px | center | 多选列,用于批量操作 | | 1 | 单据编码 | checkinCode | 140px | left | 可点击打开详情 | | 2 | 单据日期 | checkinDate | 120px | center | 默认降序排列 | | 3 | 单据状态 | status | 90px | center | 状态标签(颜色区分) | | 4 | 供应商 | supplierName | 180px | left | 供应商名称 | | 5 | 采购订单号 | orderCode | 140px | left | 关联的采购订单编码 | | 6 | 仓库 | warehouseName | 120px | left | 到货仓库 | | 7 | 审核日期 | approveDate | 120px | center | 仅审核后显示 | | 8 | 操作 | - | 160px | center | 查看/编辑/删除 | #### 3.2.4 单据视图操作列按钮 | 按钮 | 颜色 | 说明 | |------|------|------| | 查看 | success (绿色文字) | 打开查看页(只读) | | 编辑 | primary (蓝色文字) | 打开编辑页(仅开立状态可编辑,已审核以查看模式打开) | | 删除 | danger (红色文字) | 二次确认后删除(仅开立状态可删除) | ### 3.3 底部统计区域(两种视图通用) | 组件 | 位置 | 说明 | |------|------|------| | 到货数量统计 | 底部左侧 | 显示 "到货数量:{totalQty}" | | 入库数量统计 | 底部左侧 | 显示 "入库数量:{stockedQty}" | ### 3.4 分页组件(两种视图通用) | 属性 | 值 | 说明 | |------|------|------| | 默认每页条数 | 100 | 可选: 10, 20, 50, 100 | | 布局 | total, sizes, prev, pager, next, jumper | 完整分页 | --- ## 4. 新增/编辑页设计 ### 4.1 页面布局 新增/编辑页面为独立的全屏页面(非弹窗),包含表头表单区和到货明细子表区。 ``` ┌──────────────────────────────────────────────────────────────┐ │ 采购到货单 [保存][取消][审核][反审核][收起] │ ├──────────────────────────────────────────────────────────────┤ │ 表头表单区 (4列布局,可折叠) │ │ ┌──────────┬──────────┬──────────┬──────────┐ │ │ │ 单据编码 │ 业务类型 │ 操作员 │ 仓库 │ │ │ │ 单据日期 │ 单据状态 │ 供应商 │ 采购订单号 │ │ │ │ 审核员 │ 审核日期 │ 备注 │ 总到货量 │ │ │ └──────────┴──────────┴──────────┴──────────┘ │ ├──────────────────────────────────────────────────────────────┤ │ 到货信息 [+ 引入] │ │ ┌──┬──────┬──────┬──────┬──┬──────┬──────┬──────┬──────┬──┐ │ │ │序│跟单编│订单编│物料编│物│主计 │订单数│到货数│已入库│操│ │ │ │号│号 │码 │码 │名│量 │量 │量 │数量 │作│ │ │ ├──┼──────┼──────┼──────┼──┼──────┼──────┼──────┼──────┼──┤ │ │ │1 │XSDD..│CGDD..│0301..│底│套 │100 │100 │0 │删│ │ │ └──┴──────┴──────┴──────┴──┴──────┴──────┴──────┴──────┴──┘ │ ├──────────────────────────────────────────────────────────────┤ │ 合计 到货总量:100.00 │ └──────────────────────────────────────────────────────────────┘ ``` ### 4.2 表头表单字段 表头采用4列栅格布局(el-col :span="6"),每行4个字段。 | 序号 | 字段名 | 标签 | 组件类型 | 必填 | 默认值 | 可编辑 | 说明 | |------|--------|------|----------|------|--------|--------|------| | 1 | checkinCode | 单据编码 | el-input | 是 | 自动生成 | 否(只读) | 格式: CGDH + 6位流水号,后端自动生成 | | 2 | businessType | 业务类型 | el-input | 否 | 采购到货 | 否(只读) | 固定为"采购到货" | | 3 | operatorName | 操作员 | el-input | 是 | 当前登录用户 | 否(只读) | 自动填充当前登录用户名 | | 4 | warehouseId | 仓库 | el-select | 否 | - | 是 | 下拉选择目标仓库 | | 5 | checkinDate | 单据日期 | el-date-picker | 是 | 当天日期 | 是 | 日期选择器 | | 6 | status | 单据状态 | el-tag | - | 开立 | 否(只读) | 标签显示,开立=info(灰) | | 7 | supplierName | 供应商 | el-input | 否 | - | 否(只读) | 引入采购订单后自动填充 | | 8 | orderCode | 采购订单号 | el-input | 否 | - | 否(只读) | 引入采购订单后自动填充 | | 9 | approverName | 审核员 | el-input | 否 | - | 否(只读) | 审核时自动填充 | | 10 | approveDate | 审核日期 | el-input | 否 | - | 否(只读) | 审核时自动填充 | | 11 | remark | 备注 | el-input(textarea) | 否 | - | 是 | 多行文本,最多500字 | | 12 | totalQuantity | 总到货量 | el-input | 否 | 0.00 | 否(只读) | 自动计算,明细行到货数量合计 | ### 4.3 到货信息子表 到货信息子表位于表头下方,标题为「到货信息」。通过「引入」按钮从采购订单引入物料。 | 序号 | 列标题 | 字段名 | 宽度 | 组件类型 | 必填 | 说明 | |------|--------|--------|------|----------|------|------| | 1 | 序号 | lineNo | 60px | 自动编号 | - | 行序号,自动递增 | | 2 | 跟单编号 | trackCode | 130px | el-input | 否 | 只读,引入后自动填充 | | 3 | 订单编码 | orderCode | 140px | el-input | 否 | 只读,引入后自动填充采购订单编码 | | 4 | 物料编码 | itemCode | 140px | el-input | 是 | 只读,引入后自动填充 | | 5 | 物料名称 | itemName | 200px | el-input | - | 只读,引入后自动填充 | | 6 | 型号规格 | specification | 150px | el-input | 否 | 只读,引入后自动填充 | | 7 | 主计量 | unitName | 80px | el-input | - | 只读,引入后自动填充 | | 8 | 订单数量 | orderQuantity | 120px | el-input | - | 只读,引入后自动填充采购订单数量 | | 9 | 到货数量 | quantity | 120px | el-input-number | 是 | 可修改,引入后默认为订单数量 | | 10 | 已入库数量 | stockedQuantity | 120px | el-input | - | 只读,入库后回写 | | 11 | 备注 | remark | 120px | el-input | 否 | 行备注 | | 12 | 操作 | - | 80px | el-button | - | 删除按钮(仅编辑状态) | ### 4.4 引入采购订单弹窗 点击到货信息区域的「引入」按钮,打开采购订单选择弹窗。 | 属性 | 值 | |------|------| | 弹窗标题 | 采购订单明细 | | 弹窗宽度 | 1000px | | 弹窗高度 | 自适应,最大70vh | | 关闭方式 | 右上角 X 按钮、取消按钮 | | 选择模式 | 可勾选多条采购订单明细行(多选) | **弹窗搜索区:** | 组件 | 说明 | |------|------| | 订单编码 | 模糊搜索采购订单编码 | | 供应商 | 模糊搜索供应商名称 | | 物料编码 | 可选,模糊搜索 | | 物料名称 | 可选,模糊搜索 | | 开始日期、结束日期 | 可选,日期范围筛选 | | 搜索按钮 | primary类型,执行搜索 | | 查询所有 | 清空条件并刷新列表 | **弹窗列表结构(层级表格):** - **父行**(采购订单头):供应商、订单编码、订单日期;左侧可展开/收起。 - **子行**(采购订单明细,展开后显示):物料编码、物料名称、型号规格、主计量、订单数量、已到货数量、可到货数量。 - 勾选子行后点击「确定」引入到到货明细子表。 **弹窗列表表格列(平铺模式时):** | 序号 | 列标题 | 字段名 | 宽度 | 说明 | |------|--------|--------|------|------| | 0 | (复选框) | - | 55px | 多选列 | | 1 | 订单编码 | orderCode | 140px | 采购订单编码 | | 2 | 供应商 | supplierName | 180px | | | 3 | 物料编码 | itemCode | 140px | | | 4 | 物料名称 | itemName | 200px | | | 5 | 型号规格 | specification | 150px | | | 6 | 主计量 | unitName | 80px | | | 7 | 订单数量 | orderQty | 100px | | | 8 | 已到货数量 | arrivedQty | 100px | 已被其他到货单引用的数量 | | 9 | 可到货数量 | availableQty | 100px | 订单数量 - 已到货数量 | **引入交互:** - 勾选一条或多条采购订单明细行,点击「确定」按钮 - 引入后自动填充到货信息子表:跟单编号、订单编码、物料编码、物料名称、主计量、订单数量、到货数量(默认=可到货数量) - 同时自动填充表头:供应商(取引入的采购订单供应商)、采购订单号 - 引入后到货数量可修改,支持分批次到货 --- ## 5. 数据字段定义 ### 5.1 采购到货单表头字段(erp_po_checkin) > 字段定义以 **《erp数据库设计-数据字典》** 与 **erp数据库设计-DDL.sql** 为准。 | 字段名 | 数据库字段 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|-----------|------|------|------|--------|------| | 到货单ID | checkin_id | bigint | - | 是 | AUTO | 主键,自增 | | 租户ID | tenant_id | varchar | 20 | 是 | - | 多租户隔离 | | 到货单编码 | checkin_code | varchar | 32 | 是 | 自动生成 | 格式: CGDH + 6位流水号 | | 到货日期 | checkin_date | date | - | 是 | 当天 | 到货登记日期 | | 单据状态 | status | varchar | 20 | 是 | DRAFT | 开立/审核 | | 业务类型 | business_type | varchar | 20 | 否 | NULL | 业务类型 | | 采购订单ID | order_id | bigint | - | 否 | - | 外键 → erp_po_order | | 采购订单编码 | order_code | varchar | 32 | 否 | - | 冗余 | | 供应商ID | supplier_id | bigint | - | 否 | - | 外键 → 供应商档案 | | 供应商编码 | supplier_code | varchar | 32 | 否 | - | 冗余 | | 供应商名称 | supplier_name | varchar | 100 | 否 | - | 冗余 | | 仓库ID | warehouse_id | bigint | - | 否 | - | 外键 → 仓库档案 | | 仓库编码 | warehouse_code | varchar | 32 | 否 | - | 冗余 | | 仓库名称 | warehouse_name | varchar | 50 | 否 | - | 冗余 | | 总到货数量 | total_quantity | decimal | 18,4 | 否 | 0 | 明细行到货数量合计 | | 已入库数量 | stocked_quantity | decimal | 18,4 | 否 | 0 | 已入库数量合计 | | 备注 | remark | varchar | 500 | 否 | - | | | 操作员ID | operator_id | bigint | - | 否 | - | 操作员ID | | 操作员名称 | operator_name | varchar | 50 | 否 | - | 操作员名称 | | 审核员ID | approver_id | bigint | - | 否 | - | 审核员ID | | 审核员名称 | approver_name | varchar | 50 | 否 | - | 审核员名称 | | 审核日期 | approve_date | datetime | - | 否 | - | 审核日期 | | 删除标志 | del_flag | char | 1 | 是 | 0 | 0存在/1删除 | | 创建者 | create_by | varchar | 64 | 否 | - | | | 创建时间 | create_time | datetime | - | 否 | - | | | 更新者 | update_by | varchar | 64 | 否 | - | | | 更新时间 | update_time | datetime | - | 否 | - | | ### 5.2 采购到货单明细字段(erp_po_checkin_line) | 字段名 | 数据库字段 | 类型 | 长度 | 必填 | 默认值 | 说明 | |--------|-----------|------|------|------|--------|------| | 明细ID | line_id | bigint | - | 是 | AUTO | 主键,自增 | | 到货单ID | checkin_id | bigint | - | 是 | - | 外键 → erp_po_checkin.checkin_id | | 到货单编码 | checkin_code | varchar | 32 | 是 | - | 冗余 | | 行号 | line_no | int | - | 是 | - | 行序号 | | 采购订单明细ID | order_line_id | bigint | - | 否 | - | 外键 → erp_po_order_line.line_id | | 跟单编号 | track_code | varchar | 32 | 否 | - | 跟单编号 | | 物料ID | item_id | bigint | - | 是 | - | 外键 → erp_md_item.item_id | | 物料编码 | item_code | varchar | 32 | 是 | - | 冗余 | | 物料名称 | item_name | varchar | 100 | 是 | - | 冗余 | | 型号规格 | specification | varchar | 200 | 否 | - | | | 计量单位 | unit_name | varchar | 20 | 否 | - | 冗余 | | 订单数量 | order_quantity | decimal | 18,4 | 否 | 0 | 采购订单数量 | | 到货数量 | quantity | decimal | 18,4 | 是 | 0 | 本次到货数量 | | 已入库数量 | stocked_quantity | decimal | 18,4 | 否 | 0 | 已入库数量 | | 备注 | remark | varchar | 200 | 否 | - | | | 删除标志 | del_flag | char | 1 | 是 | 0 | 0存在/1删除 | | 租户ID | tenant_id | varchar | 20 | 是 | - | | --- ## 6. 按钮操作说明 ### 6.1 明细视图工具栏按钮 #### 6.1.1 「单据」按钮(视图切换) | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 切换到单据视图,重新加载列表数据 | | 效果 | 搜索区域、工具栏、表格列全部切换为单据视图样式 | #### 6.1.2 查询所有按钮 | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 清空所有搜索条件,重新加载列表(pageNum=1) | #### 6.1.3 新增按钮 | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 路由跳转到新增采购到货单页面 | | 路由 | `/purchasing/checkin/new` | #### 6.1.4 导出按钮 | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 按当前搜索条件导出到货单列表到Excel | ### 6.2 单据视图工具栏按钮 #### 6.2.1 「明细」按钮(视图切换) | 项目 | 说明 | |------|------| | 触发条件 | 始终可用 | | 操作 | 切换到明细视图,重新加载列表数据 | #### 6.2.2 删除按钮(批量) | 项目 | 说明 | |------|------| | 触发条件 | 勾选一条或多条记录(否则disabled) | | 前置校验 | 仅开立(DRAFT)状态允许删除;已审核状态记录跳过并提示 | | 操作 | 弹出确认框:"确认删除选中的{n}条到货记录?",确认后调用删除接口 | #### 6.2.3 审核按钮(批量) | 项目 | 说明 | |------|------| | 触发条件 | 勾选一条或多条记录(否则disabled) | | 前置校验 | 仅开立(DRAFT)状态允许审核;需至少有1条到货明细 | | 操作 | 弹出确认框,确认后批量审核 | | 结果 | status → APPROVED,自动记录审核员和审核日期 | #### 6.2.4 反审核按钮(批量) | 项目 | 说明 | |------|------| | 触发条件 | 勾选一条或多条记录(否则disabled) | | 前置校验 | 仅审核(APPROVED)状态允许反审核;需检查是否已有入库单 | | 操作 | 弹出确认框,确认后批量反审核 | | 结果 | status → DRAFT,清空审核员和审核日期 | ### 6.3 新增/编辑页按钮 #### 6.3.1 保存按钮 | 项目 | 说明 | |------|------| | 位置 | 页面右上角 | | 颜色 | primary (蓝色) | | 触发条件 | 表单校验通过 | | 操作 | 保存到货单表头和明细数据 | | 成功提示 | "保存成功" | #### 6.3.2 取消按钮 | 项目 | 说明 | |------|------| | 位置 | 保存按钮右侧 | | 颜色 | default (灰色) | | 操作 | 返回列表页 | #### 6.3.3 审核按钮 | 项目 | 说明 | |------|------| | 位置 | 取消按钮右侧 | | 颜色 | success (绿色) | | 显示条件 | 编辑模式且 status = DRAFT 且有明细数据 | | 操作 | 调用审核接口,成功后页面变为只读 | #### 6.3.4 反审核按钮 | 项目 | 说明 | |------|------| | 位置 | 审核按钮右侧 | | 颜色 | warning (橙色) | | 显示条件 | 查看模式且 status = APPROVED | | 前置条件 | 该到货单无已入库记录 | | 操作 | 调用反审核接口,成功后页面变为可编辑 | #### 6.3.5 收起/展开按钮 | 项目 | 说明 | |------|------| | 位置 | 页面右上角最右侧 | | 操作 | 折叠/展开表头表单区域 | #### 6.3.6 引入按钮(到货信息子表) | 项目 | 说明 | |------|------| | 位置 | 到货信息区域右上角 | | 颜色 | primary (蓝色) | | 操作 | 打开采购订单选择弹窗,引入订单物料行 | | 显示条件 | 仅编辑状态显示 | #### 6.3.7 查看页顶部工具栏 | 项目 | 说明 | |------|------| | 适用 | 查看采购到货单页面 | | 按钮 | 新增、编辑、审核、反审核、收起 | | 新增 | 跳转新增页面 | | 编辑 | 跳转编辑页(仅开立状态启用) | #### 6.3.8 记录导航「上一条」「下一条」 | 项目 | 说明 | |------|------| | 位置 | 表头区域左侧标题旁 | | 显示条件 | 查看/编辑模式下,存在多条记录时显示 | | 操作 | 加载上一条/下一条到货单详情并刷新表单 | --- ## 7. 页面交互规则 ### 7.1 列表页通用交互 | 序号 | 交互场景 | 交互规则 | |------|----------|----------| | 1 | 页面首次加载 | 默认以明细视图加载第1页数据,按单据日期降序排列 | | 2 | 搜索操作 | 点击搜索按钮,重置pageNum=1,保持当前pageSize不变 | | 3 | 单据编码点击 | 点击单据编码列蓝色链接,路由跳转至查看页 | | 4 | 状态标签 | 用el-tag组件渲染:开立=info(灰), 审核=success(绿) | | 5 | 空数据状态 | 列表无数据时显示空状态图标和"暂无数据"文字 | | 6 | 视图切换 | 切换视图时保留公共搜索字段(单据编码、日期范围) | | 7 | 底部汇总 | 两种视图均显示到货数量和入库数量汇总 | ### 7.2 新增/编辑页交互 | 序号 | 交互场景 | 交互规则 | |------|----------|----------| | 1 | 页面加载(新增) | 自动填充:单据编码(调接口获取或后端自动)、单据日期(当天)、操作员(当前用户)、业务类型(采购到货)、总到货量(0.00) | | 2 | 页面加载(编辑) | 调用详情接口加载到货单表头、到货明细数据 | | 3 | 引入采购订单 | 点击「引入」→ 打开采购订单选择弹窗 → 勾选订单明细行 → 确认引入 → 自动填充到货信息子表和表头关联字段 | | 4 | 引入后修改数量 | 引入的到货数量可修改,支持分批次到货(如订单100个,本次到货50个) | | 5 | 保存操作 | 前端表单校验 → 校验通过调用保存接口 → 成功提示 → 页面变为编辑模式 | | 6 | 审核操作 | 需先保存 → 确认弹窗 → 调用审核接口 → 成功后页面变只读 | | 7 | 反审核操作 | 确认弹窗 → 调用反审核接口 → 成功后页面变可编辑(需检查无下游入库单) | | 8 | 表头折叠 | 点击「收起」→ 表头表单区域收起,仅显示子表明细;点击「展开」→ 恢复 | | 9 | 总到货量自动计算 | 到货信息中到货数量的合计值自动更新到表头「总到货量」字段 | ### 7.3 表单校验规则 #### 表头校验 | 字段 | 规则 | 提示信息 | |------|------|----------| | checkinDate | 必填 | 到货日期不能为空 | #### 到货明细校验 | 字段 | 规则 | 提示信息 | |------|------|----------| | itemCode | 必填 | 请引入采购订单物料 | | quantity | 必填,min=0.01 | 到货数量必须大于0 | #### 业务校验 | 规则 | 说明 | |------|------| | 至少一行到货明细 | 保存时至少要有一条到货物料行 | | 审核前需保存 | 审核操作前需先保存当前数据 | | 到货数量不超过可到货数量 | 引入时到货数量默认为可到货数量,可减少但不建议超出 | --- ## 8. 接口调用说明 ### 8.1 接口总览 | 序号 | 功能 | 方法 | 路径 | 说明 | |------|------|------|------|------| | 1 | 查询到货单列表 | GET | /erp/po/checkin/list | 分页查询到货单列表 | | 2 | 获取到货单详情 | GET | /erp/po/checkin/{checkinId} | 获取单条到货单表头+明细 | | 3 | 新增到货单 | POST | /erp/po/checkin | 创建新到货单 | | 4 | 修改到货单 | PUT | /erp/po/checkin | 更新到货单表头+明细 | | 5 | 删除到货单 | DELETE | /erp/po/checkin/{checkinIds} | 批量删除到货单 | | 6 | 导出到货单 | POST | /erp/po/checkin/export | 导出到货单列表到Excel | | 7 | 审核到货单 | PUT | /erp/po/checkin/approve/{checkinId} | 审核到货单(**待后端实现**) | | 8 | 反审核到货单 | PUT | /erp/po/checkin/reject/{checkinId} | 反审核到货单(**待后端实现**) | | 9 | 查询可引入采购订单 | GET | /erp/po/order/list | 获取已审核的采购订单列表 | | 10 | 获取采购订单详情 | GET | /erp/po/order/{orderId} | 获取采购订单含明细行 | > **说明**: 审核/反审核接口后端暂未实现,需要后端开发。前端可预留接口调用代码。 ### 8.2 接口详细说明 #### 8.2.1 查询到货单列表 ``` GET /erp/po/checkin/list ``` **请求参数:** | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | pageNum | integer | 否 | 页码,默认1 | | pageSize | integer | 否 | 每页数,默认100 | | checkinCode | string | 否 | 到货单编码(模糊) | | trackCode | string | 否 | 跟单编号(模糊) | | supplierName | string | 否 | 供应商名称(模糊) | | itemCode | string | 否 | 物料编码(模糊) | | itemName | string | 否 | 物料名称(模糊) | | status | string | 否 | 单据状态 | | beginDate | string | 否 | 开始日期 (yyyy-MM-dd) | | endDate | string | 否 | 结束日期 (yyyy-MM-dd) | **响应示例:** ```json { "total": 50, "rows": [ { "checkinId": 1, "checkinCode": "CGDH000001", "checkinDate": "2026-02-13", "status": "DRAFT", "businessType": "采购到货", "orderId": 47, "orderCode": "CGDD000047", "supplierName": "南京某某金属材料有限公司", "warehouseName": "原料仓", "totalQuantity": 500.00, "stockedQuantity": 0, "operatorName": "admin", "lines": [ { "lineId": 1, "checkinId": 1, "lineNo": 1, "trackCode": "XSDD000090", "itemCode": "0301000001", "itemName": "底架组件", "unitName": "套", "orderQuantity": 500.00, "quantity": 500.00, "stockedQuantity": 0 } ] } ], "code": 200, "msg": "查询成功" } ``` #### 8.2.2 获取到货单详情 ``` GET /erp/po/checkin/{checkinId} ``` **响应**: 同列表行结构,含完整 lines 数组。 #### 8.2.3 新增到货单 ``` POST /erp/po/checkin ``` **请求体:** ```json { "checkinDate": "2026-02-13", "businessType": "采购到货", "orderId": 47, "orderCode": "CGDD000047", "supplierId": 10, "supplierCode": "GYS001", "supplierName": "南京某某金属材料有限公司", "warehouseId": 1, "warehouseCode": "YLC", "warehouseName": "原料仓", "remark": "", "lines": [ { "lineNo": 1, "orderLineId": 100, "trackCode": "XSDD000090", "itemId": 200, "itemCode": "0301000001", "itemName": "底架组件", "specification": "", "unitName": "套", "orderQuantity": 500.00, "quantity": 500.00 } ] } ``` #### 8.2.4 修改到货单 ``` PUT /erp/po/checkin ``` **请求体**: 同新增,但包含 `checkinId` 和各明细行的 `lineId`。 #### 8.2.5 删除到货单 ``` DELETE /erp/po/checkin/{checkinIds} ``` **业务规则:** - 仅允许删除开立(DRAFT)状态的到货单 - 删除时同时删除明细行记录 - 逻辑删除(del_flag = 1) --- ## 9. 状态流转 ### 9.1 单据状态流转图 ``` ┌──────────────┐ │ │ ┌─────────► 开立(DRAFT) ◄──────────┐ │ │ │ │ │ └──────┬───────┘ │ │ │ │ │ [审核操作] [反审核操作] │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ │ │ └──────────┤ 审核(APPROVED)├───────────┘ │ │ └──────┬───────┘ │ [入库操作] │ ▼ ┌──────────────┐ │ │ │ 入库中/完成 │ │ │ └──────────────┘ ``` ### 9.2 状态说明 | 状态 | 编码 | 可执行操作 | 说明 | |------|------|-----------|------| | 开立 | DRAFT | 编辑、保存、删除、审核 | 初始状态,可自由编辑 | | 审核 | APPROVED | 查看、反审核、生成入库单 | 生效状态,不可编辑 | --- ## 10. 业务规则 ### 10.1 编码规则 | 规则 | 说明 | |------|------| | 前缀 | CGDH | | 流水号 | 6位数字,不足补零 | | 格式 | CGDH000001, CGDH000002, ... | | 生成方式 | 后端自动生成,不可手动修改 | ### 10.2 引入采购订单规则 | 规则 | 说明 | |------|------| | 来源 | 仅可引入已审核的采购订单中的物料明细 | | 数量限制 | 到货数量不能超过可到货数量(订单数量 - 已到货数量) | | 数量可修改 | 引入后到货数量可修改,支持分批次到货 | | 多订单引入 | 同一到货单可引入多个采购订单的物料 | | 重复引入 | 已引入的订单明细行不允许重复引入 | ### 10.3 入库规则 | 规则 | 说明 | |------|------| | 前置条件 | 到货单必须已审核(APPROVED)才能生成入库单 | | 入库数量 | 入库数量不能超过到货数量 | | 回写 | 入库完成后回写 stocked_quantity 字段 | ### 10.4 下游引用规则 | 引用场景 | 影响 | |----------|------| | 已生成入库单 | 不允许反审核、不允许删除 | | 部分入库 | 不允许反审核 | --- ## 11. 前端组件设计 ### 11.1 文件结构 ``` src/ ├── api/ │ └── checkin.ts # 采购到货单相关API接口定义(已存在) ├── views/ │ └── Purchasing/ │ └── Checkin/ │ ├── index.vue # 列表页入口(已存在,需重构支持双视图) │ └── form.vue # 新增/编辑/查看页(需新增) ``` ### 11.2 API接口文件 ```typescript // src/api/checkin.ts(已存在,需补充审核接口) import request from './request' // 查询到货单列表 export function getCheckinList(params: CheckinQuery): Promise // 获取到货单详情 export function getCheckinDetail(checkinId: number): Promise // 新增到货单 export function createCheckin(data: Partial): Promise // 更新到货单 export function updateCheckin(data: Partial): Promise // 删除到货单 export function deleteCheckin(checkinIds: string): Promise // 审核到货单(待后端实现后启用) export function approveCheckin(checkinId: number): Promise // 反审核到货单(待后端实现后启用) export function rejectCheckin(checkinId: number): Promise // 导出到货单 export function exportCheckin(params: CheckinQuery): Promise ``` ### 11.3 路由配置 ```typescript // src/router/index.ts(采购到货单路由) { path: '/purchasing', component: Layout, children: [ { path: 'checkin', name: 'PurchaseCheckinList', component: () => import('@/views/Purchasing/Checkin/index.vue'), meta: { title: '采购到货单' } }, { path: 'checkin/new', name: 'PurchaseCheckinNew', component: () => import('@/views/Purchasing/Checkin/form.vue'), meta: { title: '新增采购到货单' }, hidden: true }, { path: 'checkin/edit/:id', name: 'PurchaseCheckinEdit', component: () => import('@/views/Purchasing/Checkin/form.vue'), meta: { title: '编辑采购到货单' }, hidden: true }, { path: 'checkin/view/:id', name: 'PurchaseCheckinView', component: () => import('@/views/Purchasing/Checkin/form.vue'), meta: { title: '采购到货单详情' }, hidden: true } ] } ``` --- ## 12. 数据模型 ### 12.1 表关系图 ``` ┌──────────────────────────┐ │ erp_po_order │ │ (采购订单) │ │ │ │ order_id (PK) │ │ order_code │ │ supplier_id │ │ supplier_name │ └──────────┬───────────────┘ │ 1:N (引入) ▼ ┌──────────────────────────┐ ┌──────────────────────────┐ │ erp_po_checkin │ │ erp_md_supplier │ │ (采购到货单/表头) │────►│ (供应商) │ │ │ │ │ │ checkin_id (PK) │ │ supplier_id (PK) │ │ checkin_code (UK) │ │ supplier_name │ │ order_id (FK) ───────────┼──► └──────────────────────────┘ │ supplier_id (FK) │ │ warehouse_id (FK) │ ┌──────────────────────────┐ │ status │ │ 仓库档案 │ │ total_quantity │────►│ warehouse_id (PK) │ │ stocked_quantity │ │ warehouse_name │ └──────────┬───────────────┘ └──────────────────────────┘ │ 1:N ▼ ┌──────────────────────────┐ │ erp_po_checkin_line │ ┌──────────────────────────┐ │ (到货明细) │ │ erp_md_item │ │ │ │ (物料档案) │ │ line_id (PK) │ │ │ │ checkin_id (FK)──────────┼──► │ item_id (PK) │ │ order_line_id (FK) │ │ item_code │ │ item_id (FK)─────────────┼──► │ item_name │ │ order_quantity │ └──────────────────────────┘ │ quantity │ │ stocked_quantity │ └──────────────────────────┘ │ 入库(下游) ▼ ┌──────────────────────────┐ │ erp_wm_item_recpt │ │ (采购入库单) │ │ │ │ recpt_id (PK) │ │ source_doc_id (FK)───────┼──► erp_po_checkin.checkin_id │ source_doc_code │ │ warehouse_id │ └──────────────────────────┘ ``` ### 12.2 数据流向 ``` 采购订单(erp_po_order) ──引入──► 采购到货单(erp_po_checkin) │ 审核后入库 │ ▼ 采购入库单(erp_wm_item_recpt) │ ▼ 库存增加(wm_item_stock) ``` --- ## 附录A: 状态标签颜色映射 ```javascript // 状态标签类型映射 const statusTagMap = { 'DRAFT': 'info', // 灰色 - 开立 'APPROVED': 'success' // 绿色 - 审核 } // 状态标签文字映射 const statusLabelMap = { 'DRAFT': '开立', 'APPROVED': '审核' } ``` --- ## 附录B: 与采购订单页面的关联说明 采购到货单页面与采购订单页面存在紧密的业务关联: | 关联点 | 说明 | |--------|------| | 引入采购订单 | 到货单通过「引入」功能从已审核的采购订单获取物料明细 | | 到货数量回写 | 到货单保存后,将到货数量回写到采购订单的 arrived_quantity 字段 | | 供应商信息 | 引入采购订单时自动带入供应商信息 | | 数据流向 | 采购订单(下达采购)→ 采购到货单(登记到货)→ 采购入库单(入库) | --- ## 附录C: 现有实现状态与开发计划 | 组件 | 状态 | 说明 | |------|------|------| | 数据库表 | ✅ 已完成 | erp_po_checkin, erp_po_checkin_line 已建表 | | 后端 CRUD | ✅ 已完成 | PoCheckinController 已实现 list/detail/add/edit/delete | | 后端审核 | ❌ 待开发 | approve/reject 接口需新增 | | 前端 API | ✅ 已完成 | checkin.ts 已定义 CRUD 接口(审核接口预留) | | 列表页 | ⚠️ 需重构 | index.vue 已有基础实现,需完善双视图、批量操作等 | | 表单页 | ❌ 待开发 | form.vue 需新增(新增/编辑/查看页) | | 路由配置 | ⚠️ 需补充 | 列表页路由已有,form 页路由需新增 | --- ## 修订历史 | 版本 | 日期 | 修订内容 | 修订人 | |------|------|----------|--------| | 1.0.0 | 2026-02-13 | 初始版本,基于数据库设计和采购订单PRD参考,完整页面设计开发说明 | System |