265 lines
5.5 KiB
Markdown
265 lines
5.5 KiB
Markdown
# 02-项目程序开发详细步骤
|
|
|
|
## 开发入口
|
|
|
|
前端页面:
|
|
|
|
```text
|
|
src/views/WarehouseManagement/InventoryCheck/index.vue
|
|
```
|
|
|
|
SQL 脚本:
|
|
|
|
```text
|
|
sql/仓储管理_库存盘点_库存调拨.sql
|
|
```
|
|
|
|
## 第 1 步:梳理现有库存盘点页面
|
|
|
|
确认页面已有能力:
|
|
|
|
| 已有能力 | 说明 |
|
|
| --- | --- |
|
|
| 库存查询 | 调用 `仓储管理_库存盘点_查询` |
|
|
| 编辑库存 | 调用 `仓储管理_库存盘点_货位数量_编辑数据` |
|
|
| 库位下拉 | 调用 `仓储管理_库位_查询` |
|
|
| 新增物料存货 | 页面已有新增库存相关逻辑 |
|
|
|
|
确认表格已有字段:
|
|
|
|
```text
|
|
物料编码
|
|
物料流水号
|
|
物料名称
|
|
图号或型号
|
|
物料与货位流水号
|
|
类型
|
|
库存
|
|
货位流水号
|
|
货位名称
|
|
批次编号
|
|
```
|
|
|
|
## 第 2 步:增加表格调拨入口
|
|
|
|
在库存盘点表格操作列增加“调拨”按钮。
|
|
|
|
实现要求:
|
|
|
|
1. 原操作列宽度调整为可容纳“编辑”和“调拨”。
|
|
2. 行处于编辑状态时不显示调拨按钮。
|
|
3. 行不处于编辑状态时显示调拨按钮。
|
|
|
|
关键逻辑:
|
|
|
|
```html
|
|
<el-button v-if="!scope.row.edit" type="text" size="mini" @click="openTransfer(scope.row)">调拨</el-button>
|
|
```
|
|
|
|
## 第 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. 调拨记录写入。
|
|
|