feat: 增加调拨单审批功能及界面优化

fix(调拨单): 修正审批状态校验逻辑
feat(调拨单): 添加审批API接口
refactor(调拨单明细): 重构表格组件支持不同状态操作
style(调拨单): 优化界面显示和操作按钮
perf(发货单): 自动设置发货时间为当前时间
chore: 删除无用调拨记录页面
This commit is contained in:
砂糖
2026-04-10 11:10:30 +08:00
parent c323ef7a52
commit 9b52621df1
9 changed files with 324 additions and 1758 deletions

View File

@@ -1,5 +1,5 @@
<template>
<el-table :data="tableData" style="width: 100%" border>
<el-table :data="tableData" style="width: 100%" border v-loading="confirmLoading">
<el-table-column prop="coilId" label="钢卷号">
<template slot-scope="scope">
<CoilNo :coil-no="scope.row.coil.enterCoilNo" :coil="scope.row.coil" />
@@ -25,19 +25,19 @@
<el-table-column prop="materialTypeAfter" label="调拨后类型" width="100">
<template slot-scope="scope">
<el-select v-if="!scope.row.isConfirmed" v-model="scope.row.materialTypeAfter"
<el-select v-if="!scope.row.isConfirmed && canEdit" v-model="scope.row.materialTypeAfter"
@change="handleMaterialChange(scope.row)" placeholder="请选择">
<el-option label="原料" :value="1" />
<el-option label="产品" :value="2" />
</el-select>
<div v-else slot-scope="scope">
<div v-else>
{{ scope.row.materialTypeAfter == '1' ? '原料' : '产品' }}
</div>
</template>
</el-table-column>
<el-table-column prop="itemIdAfter" v-loading="materialLoading" label="调拨后物料" width="260">
<template slot-scope="scope">
<div v-loading="materialLoading" v-if="!scope.row.isConfirmed">
<div v-loading="materialLoading" v-if="!scope.row.isConfirmed && canEdit">
<RawMaterialSelect v-model="scope.row.itemIdAfter" v-if="scope.row.materialTypeAfter == '1'" />
<ProductSelect v-model="scope.row.itemIdAfter" v-else-if="scope.row.materialTypeAfter == '2'" />
</div>
@@ -49,7 +49,7 @@
</el-table-column>
<el-table-column prop="warehouseIdAfter" label="调拨后库区" width="200">
<template slot-scope="scope">
<el-select v-if="!scope.row.isConfirmed" v-model="scope.row.warehouseIdAfter" placeholder="请选择">
<el-select v-if="!scope.row.isConfirmed && canEdit" v-model="scope.row.warehouseIdAfter" placeholder="请选择">
<el-option v-for="item in warehouseList" :disabled="!item.isEnabled" :key="item.warehouseId"
:label="item.warehouseName" :value="item.warehouseId" />
</el-select>
@@ -61,17 +61,25 @@
<el-table-column type="action" label="操作" width="180">
<template slot-scope="scope">
<el-button icon="el-icon-check" size="mini" v-if="!scope.row.isConfirmed" @click="handleConfirm(scope.row)"
:loading="buttonLoading">确认</el-button>
<el-button icon="el-icon-close" size="mini" @click="handleCancel(scope.row)"
:loading="buttonLoading">取消</el-button>
<div v-if="orderStatus == 0">
<el-button icon="el-icon-check" size="mini" v-if="!scope.row.isConfirmed" @click="handleUpdate(scope.row)"
:loading="buttonLoading">保存</el-button>
<el-button icon="el-icon-close" size="mini" @click="handleCancel(scope.row)"
:loading="buttonLoading">删除</el-button>
</div>
<div v-else>
<el-button icon="el-icon-check" size="mini" v-if="!scope.row.isConfirmed" @click="handleConfirm(scope.row)"
:loading="buttonLoading" :disabled="orderStatus != '2'">执行</el-button>
<!-- <el-button icon="el-icon-close" size="mini" @click="handleCancel(scope.row)"
:loading="buttonLoading" :disabled="orderStatus !== '2'">取消</el-button> -->
</div>
</template>
</el-table-column>
</el-table>
</template>
<script>
import { matchOrCreateMaterial, confirmTransferOrderItem, cancelTransferOrderItem } from '@/api/wms/transferOrderItem'
import { matchOrCreateMaterial, confirmTransferOrderItem, cancelTransferOrderItem, updateTransferOrderItem } from '@/api/wms/transferOrderItem'
import ProductSelect from "@/components/KLPService/ProductSelect";
import RawMaterialSelect from "@/components/KLPService/RawMaterialSelect";
import { listWarehouse } from '@/api/wms/warehouse';
@@ -84,6 +92,14 @@ export default {
data: {
type: Array,
default: () => []
},
canEdit: {
type: Boolean,
default: false
},
orderStatus: {
type: String,
default: ''
}
},
components: {
@@ -99,7 +115,8 @@ export default {
tableData: [],
materialLoading: false,
warehouseList: [],
buttonLoading: false
buttonLoading: false,
confirmLoading: false,
}
},
mounted() {
@@ -111,8 +128,8 @@ export default {
if (newVal !== oldVal) {
// 预处理数据
this.tableData = newVal.map(item => {
const isConfirmed = this.isConfirmed(item);
if (isConfirmed) {
const isEmpty = this.isEmpty(item);
if (isEmpty) {
return {
...item,
oBefore: {
@@ -131,7 +148,7 @@ export default {
surfaceTreatmentDesc: item.surfaceTreatmentAfter,
zincLayer: item.zincLayerAfter
},
isConfirmed: true
isConfirmed: this.isConfirmed(item)
}
} else {
return {
@@ -148,7 +165,7 @@ export default {
itemIdAfter: item.itemIdBefore,
warehouseIdAfter: item.warehouseIdBefore,
materialTypeAfter: item.materialTypeBefore,
isConfirmed: false
isConfirmed: this.isConfirmed(item)
}
}
});
@@ -167,8 +184,23 @@ export default {
// 是否是已调拨状态
isConfirmed(item) {
// 只有三个after字段有值才认为是已调拨状态
// return item && item.itemIdAfter && item.warehouseIdAfter && item.materialTypeAfter
return item.isTransferred == 1
},
// isEmpty 是否为空
isEmpty(item) {
return item && item.itemIdAfter && item.warehouseIdAfter && item.materialTypeAfter
},
handleUpdate(row) {
updateTransferOrderItem(row).then(res => {
this.$message({
message: '保存成功',
type: 'success'
})
// 刷新数据
this.$emit('refreshData')
})
},
// 确认调拨
handleConfirm(item) {
this.buttonLoading = true
@@ -185,6 +217,35 @@ export default {
this.buttonLoading = false
})
},
handleConfirmAll() {
const unconfirmedItems = this.tableData.filter(item => !item.isConfirmed && !item.isTransferred);
if (unconfirmedItems.length === 0) {
this.$message({ message: '没有可执行的调拨项', type: 'info' });
return;
}
this.buttonLoading = true;
const promises = unconfirmedItems.map(item => confirmTransferOrderItem(item));
this.confirmLoading = true;
return Promise.all(promises).then(results => {
const successCount = results.filter(res => res.code === 200).length;
if (successCount > 0) {
this.$message({
message: `成功执行 ${successCount} 项调拨`,
type: 'success'
});
this.$emit('refreshData');
}
}).catch(error => {
this.$message({
message: '执行调拨时发生错误',
type: 'error'
});
}).finally(() => {
this.buttonLoading = false;
this.confirmLoading = false;
});
},
// 取消调拨
handleCancel(item) {
this.$confirm('确认取消调拨吗?', '提示', {