feat(wms/move): 新增调拨单批量操作功能

1. 新增批量匹配创建物料和批量更新调拨单明细的API接口
2. 新增批量操作开关,支持批量修改库区和物料信息
3. 优化表格组件的批量操作逻辑,统一处理批量更新请求
This commit is contained in:
2026-05-18 15:27:32 +08:00
parent 5b7cc3b072
commit 74150b8c39
3 changed files with 112 additions and 17 deletions

View File

@@ -63,6 +63,34 @@ export function matchOrCreateMaterial({ itemId, itemType }) {
})
}
/**
* 批量根据钢卷列表匹配或创建物料
*/
export function matchOrCreateByCoils(pairs) {
if (!pairs || pairs.length === 0) {
return Promise.reject('参数错误')
}
return request({
url: '/wms/transferOrderItem/itemType/matchOrCreateByCoils',
method: 'post',
data: pairs
})
}
/**
* 批量修改调拨单信息
*/
export function batchUpdateTransferOrderItem(data) {
return request({
url: '/wms/transferOrderItem/batchUpdate',
method: 'post',
data: data
})
}
/**
* 批量新增调拨信息
*/

View File

@@ -220,10 +220,10 @@
<div style="margin-bottom: 10px; display: flex; align-items: center;">
<el-button icon="el-icon-download" type="warning" plain @click="handleExportDetail">导出</el-button>
<el-button style="margin-right: 10px;" icon="el-icon-refresh" type="success" plain @click="handleRefreshDetailList">刷新</el-button>
<!-- <el-button :loading="buttonLoading" style="margin-right: 10px;" icon="el-icon-check" type="primary" plain @click="handleConfirmAll" v-if="currentOrderStatus == '2'">执行全部</el-button> -->
<coil-selector v-loading="buttonLoading" ref="coilSelector" :filters="{ dataType: 1, status: 0 }" multiple @confirm="handleCoilChange" v-if="canAddCoils"></coil-selector>
<el-checkbox v-model="batchEdit" style="margin-right: 10px;">批量操作</el-checkbox>
</div>
<transfer-item-table ref="transferItemTable" :data="transferOrderItems" @refreshData="getDetailList" :orderStatus="currentOrderStatus" :canEdit="canAddCoils" />
<transfer-item-table ref="transferItemTable" :data="transferOrderItems" :batchEdit="batchEdit" @refreshData="getDetailList" :orderStatus="currentOrderStatus" :canEdit="canAddCoils" />
</el-dialog>
</div>
</template>
@@ -262,6 +262,8 @@ export default {
title: "",
// 是否显示弹出层
open: false,
// 是否批量操作
batchEdit: false,
// 查询参数
queryParams: {
pageNum: 1,

View File

@@ -49,7 +49,8 @@
</el-table-column>
<el-table-column prop="warehouseIdAfter" label="调拨后库区" width="200">
<template slot-scope="scope">
<el-select v-if="!scope.row.isConfirmed && canEdit" v-model="scope.row.warehouseIdAfter" @change="handleWarehouseChange(scope.row)" placeholder="请选择">
<el-select v-if="!scope.row.isConfirmed && canEdit" v-model="scope.row.warehouseIdAfter"
@change="handleWarehouseChange(scope.row)" placeholder="请选择">
<el-option v-for="item in warehouseList" :disabled="!item.isEnabled" :key="item.warehouseId"
:label="item.warehouseName" :value="item.warehouseId" />
</el-select>
@@ -87,7 +88,10 @@
</template>
<script>
import { matchOrCreateMaterial, confirmTransferOrderItem, cancelTransferOrderItem, updateTransferOrderItem } from '@/api/wms/transferOrderItem'
import {
matchOrCreateMaterial, confirmTransferOrderItem, cancelTransferOrderItem,
updateTransferOrderItem, matchOrCreateByCoils, batchUpdateTransferOrderItem
} from '@/api/wms/transferOrderItem'
import ProductSelect from "@/components/KLPService/ProductSelect";
import RawMaterialSelect from "@/components/KLPService/RawMaterialSelect";
import { listWarehouse } from '@/api/wms/warehouse';
@@ -108,6 +112,10 @@ export default {
orderStatus: {
type: String,
default: ''
},
batchEdit: {
type: Boolean,
default: false
}
},
components: {
@@ -125,6 +133,7 @@ export default {
warehouseList: [],
buttonLoading: false,
confirmLoading: false,
// loading: false,
}
},
mounted() {
@@ -231,7 +240,7 @@ export default {
this.$message({ message: '没有可执行的调拨项', type: 'info' });
return;
}
this.buttonLoading = true;
const promises = unconfirmedItems.map(item => confirmTransferOrderItem(item));
this.confirmLoading = true;
@@ -278,22 +287,78 @@ export default {
},
handleMaterialChange(row) {
// 如果修改后是产品,说明切换前是原料
// 如果修改后是产品,说明切换前是原料, 修改前的物料类型
const itemType = row.materialTypeAfter == '1' ? 'product' : 'raw_material'
// 修改后的物料类型
const itemTypeAfter = row.materialTypeAfter == '1' ? 'raw_material' : 'product'
this.materialLoading = true
matchOrCreateMaterial({
itemType,
itemId: row.itemIdAfter
}).then(res => {
row.itemIdAfter = res.data
updateTransferOrderItem(row)
this.materialLoading = false
}).catch(() => {
this.materialLoading = false
})
if (this.batchEdit) {
this.confirmLoading = true
matchOrCreateByCoils(this.tableData.map(item => {
return {
coilId: item.coilId,
itemTypeAfter: itemTypeAfter
}
})).then(res => {
batchUpdateTransferOrderItem(this.tableData.map(item => {
return {
orderItemId: item.orderItemId,
materialTypeAfter: row.materialTypeAfter,
itemIdAfter: res.data[item.coilId]
}
})).then(_ => {
this.materialLoading = false
for (let item of this.tableData) {
item.materialTypeAfter = row.materialTypeAfter
item.itemIdAfter = res.data[item.coilId]
}
this.confirmLoading = false
this.$message({
message: '批量更新成功',
type: 'success'
})
})
})
} else {
matchOrCreateMaterial({
itemType,
itemId: row.itemIdAfter
}).then(res => {
row.itemIdAfter = res.data
updateTransferOrderItem(row)
this.materialLoading = false
}).catch(() => {
this.materialLoading = false
})
}
},
handleWarehouseChange(row) {
updateTransferOrderItem(row)
if (this.batchEdit) {
this.confirmLoading = true
batchUpdateTransferOrderItem(this.tableData.map(item => {
return {
orderItemId: item.orderItemId,
warehouseIdAfter: row.warehouseIdAfter
}
})).then(_ => {
this.materialLoading = false
for (let item of this.tableData) {
item.warehouseIdAfter = row.warehouseIdAfter
}
this.confirmLoading = false
this.$message({
message: '批量更新成功',
type: 'success'
})
})
// for (let item of this.tableData) {
// item.warehouseIdAfter = row.warehouseIdAfter
// updateTransferOrderItem(item)
// }
} else {
updateTransferOrderItem(row)
}
}
}
}