# 02-项目程序开发详细步骤 ## 开发入口 前端页面: ```text src/views/WarehouseManagement/InventoryCheck/index.vue ``` SQL 脚本: ```text sql/仓储管理_库存盘点_库存调拨.sql ``` ## 第 1 步:梳理现有库存盘点页面 确认页面已有能力: | 已有能力 | 说明 | | --- | --- | | 库存查询 | 调用 `仓储管理_库存盘点_查询` | | 编辑库存 | 调用 `仓储管理_库存盘点_货位数量_编辑数据` | | 库位下拉 | 调用 `仓储管理_库位_查询` | | 新增物料存货 | 页面已有新增库存相关逻辑 | 确认表格已有字段: ```text 物料编码 物料流水号 物料名称 图号或型号 物料与货位流水号 类型 库存 货位流水号 货位名称 批次编号 ``` ## 第 2 步:增加表格调拨入口 在库存盘点表格操作列增加“调拨”按钮。 实现要求: 1. 原操作列宽度调整为可容纳“编辑”和“调拨”。 2. 行处于编辑状态时不显示调拨按钮。 3. 行不处于编辑状态时显示调拨按钮。 关键逻辑: ```html 调拨 ``` ## 第 3 步:增加调拨状态和表单对象 在 `data()` 中增加: ```js transferDialogVisible: false, transferLocationAdding: false, transferSubmitting: false, transferForm: { 物料与货位流水号: '', 物料流水号: '', 物料名称: '', 图号或型号: '', 类型: '', 原货位流水号: '', 原货位名称: '', 原库存数: 0, 目标货位流水号: '', 目标货位名称: '', 新货位名称: '', 调拨数量: 1, 调拨备注: '' } ``` ## 第 4 步:增加库存调拨弹窗 新增 `el-dialog`,标题为: ```text 库存调拨 ``` 弹窗内容: | 字段 | 控件 | 是否可编辑 | | --- | --- | --- | | 物料名称 | 文本 | 否 | | 图号/型号 | 文本 | 否 | | 原库位 | 文本 | 否 | | 原库存数 | 文本 | 否 | | 目标库位 | `el-select` | 是 | | 新库位 | `el-input` | 是 | | 调拨数量 | `el-input-number` | 是 | | 调拨备注 | `el-input` | 是 | ## 第 5 步:打开调拨弹窗 新增方法: ```js openTransfer(row) ``` 处理内容: 1. 校验当前行是否有 `物料与货位流水号`。 2. 校验当前行库存是否大于 0。 3. 将当前行物料、库位、库存信息填入 `transferForm`。 4. 清空目标库位、新库位、备注。 5. 打开调拨弹窗。 ## 第 6 步:选择目标库位 新增方法: ```js handleTransferLocationChange(value) ``` 处理内容: 1. 根据选择的 `货位流水号`,从 `storageLocation` 中找到货位名称。 2. 回填 `transferForm.目标货位名称`。 ## 第 7 步:一键新建库位 新增方法: ```js addTransferLocation() ``` 处理流程: 1. 校验 `transferForm.新货位名称` 不能为空。 2. 调用 `仓储管理_库位_验证是否存在`。 3. 如果库位已存在,提示并按库位名称回填已有库位。 4. 如果库位不存在,调用 `仓储管理_库位_增加数据`。 5. 新增成功后调用 `getLocateName()` 刷新库位下拉。 6. 调用 `selectTransferLocation(locationName)` 回填目标库位。 ## 第 8 步:提交库存调拨 新增方法: ```js submitTransfer() ``` 前端校验: | 校验项 | 提示 | | --- | --- | | 目标库位为空 | 请选择目标库位 | | 目标库位等于原库位 | 目标库位不能与原库位相同 | | 调拨数量小于等于 0 | 调拨数量必须大于0 | | 调拨数量大于原库存 | 调拨数量不能大于原库存数 | 提交参数: | 序号 | 参数名 | | --- | --- | | 0 | 物料与货位流水号 | | 1 | 物料流水号 | | 2 | 原货位流水号 | | 3 | 目标货位流水号 | | 4 | 调拨数量 | | 5 | 原库存数 | | 6 | 调拨备注 | | 7 | 操作者 | | 8 | 类型 | 调用接口: ```js var Data = this.CreateData('12', '仓储管理_库存盘点_库存调拨', param) ``` 成功后: 1. 提示“调拨成功”。 2. 关闭调拨弹窗。 3. 调用 `searchTable()` 刷新列表。 ## 第 9 步:后端脚本设计 脚本文件: ```text sql/仓储管理_库存盘点_库存调拨.sql ``` 脚本内容: 1. 如果 `库存盘点_调拨记录` 不存在,则创建该表。 2. 删除并重建存储过程 `dbo.仓储管理_库存盘点_库存调拨`。 3. 按 `@类型` 判断库存表: - `@类型 = N'通用件'` 使用 `库存管理_半成品与货位对照表`。 - 其他类型使用 `库存管理_物料与货位对照表`。 4. 使用事务处理扣减、增加、新增目标记录、写入日志。 5. 出错时回滚并返回失败信息。 ## 第 10 步:后端事务流程 ```text BEGIN TRAN 锁定原库存记录 校验原库存记录存在 校验目标库位不等于原库位 校验当前库存 >= 调拨数量 扣减原库位库存 查询目标库位同物料库存 如果存在则增加目标库存 如果不存在则新增目标库存记录 写入库存盘点_调拨记录 COMMIT TRAN ``` 失败处理: ```text ROLLBACK TRAN 返回 result = 0 和 msg ``` ## 第 11 步:数据库部署 部署目标: ```text SQL Server: 192.168.1.27 Database: ERPTOOL_JY_20250826Back ``` 部署对象: ```text 库存盘点_调拨记录 仓储管理_库存盘点_库存调拨 ``` ## 第 12 步:验证 验证项: 1. SQL 脚本编译通过。 2. 数据库对象存在。 3. 存储过程参数完整。 4. 前端模板解析通过。 5. 前端脚本解析通过。 6. 页面实际选择库存记录调拨。 7. 原库位库存减少。 8. 目标库位库存增加或新增。 9. 调拨记录写入。