|
|
|
|
@ -64,8 +64,8 @@
|
|
|
|
|
<el-table-column type="selection" width="55"/>
|
|
|
|
|
<!-- <el-table-column label="入库单 主键" align="center" prop="instockId"/> -->
|
|
|
|
|
<el-table-column label="入库单号" align="center" prop="instockCode"/>
|
|
|
|
|
<el-table-column label="物料大类" align="center" prop="materialCategoryName">
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<!-- <el-table-column label="物料大类" align="center" prop="materialCategoryName">-->
|
|
|
|
|
<!-- </el-table-column>-->
|
|
|
|
|
<el-table-column label="工单类型" align="center" prop="instockType">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<dict-tag :options="wms_instock_type" :value="scope.row.instockType"/>
|
|
|
|
|
@ -138,8 +138,8 @@
|
|
|
|
|
<dict-tag :options="wms_barcode_if" :value="scope.row.codeYesNo"/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="物料大类" align="center" prop="materialCategoryName">
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<!-- <el-table-column label="物料大类" align="center" prop="materialCategoryName">-->
|
|
|
|
|
<!-- </el-table-column>-->
|
|
|
|
|
<el-table-column label="操作" fixed="right" width="200">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button size="small" @click="childrenTableUpdate( scope.row)" v-if="auditStatusLoad && partntTableSelectCell.instockType !== '6'">
|
|
|
|
|
@ -547,7 +547,7 @@
|
|
|
|
|
<el-form-item label="分包数量" prop="splitPackageCount">
|
|
|
|
|
<el-input-number v-model="childrenTableInfoForm.splitPackageCount" :min="1" :max="remainingQty" placeholder="请输入分包数量" @change="onSplitPackageCountChange" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 当分包数量大于1时显示分包模式选择和每包数量配置 -->
|
|
|
|
|
<el-form-item v-if="childrenTableInfoForm.splitPackageCount > 1" label="分包模式">
|
|
|
|
|
<el-radio-group v-model="packageMode" @change="onPackageModeChange">
|
|
|
|
|
@ -555,7 +555,7 @@
|
|
|
|
|
<el-radio value="custom">自定义每包数量</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 平均分包模式显示分包预览 -->
|
|
|
|
|
<el-form-item v-if="childrenTableInfoForm.splitPackageCount > 1 && packageMode === 'average'" label="分包预览">
|
|
|
|
|
<div class="package-preview-container">
|
|
|
|
|
@ -568,17 +568,17 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 自定义每包数量模式显示输入框 -->
|
|
|
|
|
<el-form-item v-if="childrenTableInfoForm.splitPackageCount > 1 && packageMode === 'custom'" label="每包数量分配">
|
|
|
|
|
<div class="package-qty-container">
|
|
|
|
|
<div v-for="(qty, index) in packageQtyList" :key="index" class="package-qty-item">
|
|
|
|
|
<label>第{{index + 1}}包:</label>
|
|
|
|
|
<el-input-number
|
|
|
|
|
v-model="packageQtyList[index]"
|
|
|
|
|
:min="1"
|
|
|
|
|
:max="remainingQty"
|
|
|
|
|
placeholder="请输入数量"
|
|
|
|
|
<el-input-number
|
|
|
|
|
v-model="packageQtyList[index]"
|
|
|
|
|
:min="1"
|
|
|
|
|
:max="remainingQty"
|
|
|
|
|
placeholder="请输入数量"
|
|
|
|
|
@change="validateTotalQty"
|
|
|
|
|
size="small"
|
|
|
|
|
style="width: 120px;"
|
|
|
|
|
@ -589,7 +589,7 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<el-form-item label="打印数量" prop="printCopies" v-if="childrenTableInfoForm.splitPackageCount === 1 || !childrenTableInfoForm.splitPackageCount">
|
|
|
|
|
<el-input-number v-model="childrenTableInfoForm.printCopies" :min="1" :max="20" placeholder="请输入打印条码数量" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
@ -706,7 +706,8 @@ const childrenTableInfoForm = ref<any>({
|
|
|
|
|
printCopies: 1,
|
|
|
|
|
packageQtyList: [] as number[],
|
|
|
|
|
packageMode: 'average',
|
|
|
|
|
batchCode: ''
|
|
|
|
|
batchCode: '',
|
|
|
|
|
createTime: '',
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -719,7 +720,7 @@ const queryForm = ref({
|
|
|
|
|
instockMethond: '',
|
|
|
|
|
auditStatus: '',
|
|
|
|
|
pageNum: 1,
|
|
|
|
|
pageSize: 10
|
|
|
|
|
pageSize: 10,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 获取路由实例
|
|
|
|
|
@ -734,6 +735,18 @@ if (route.query.instockMethond) {
|
|
|
|
|
queryForm.value.instockMethond = instockMethondValue;
|
|
|
|
|
routeInstockMethondValue = instockMethondValue; // 保存路由参数值
|
|
|
|
|
}
|
|
|
|
|
// 初始化时获取路由参数并设置到查询表单
|
|
|
|
|
let routeInstockTypeValue = '';
|
|
|
|
|
if (route.query.instockType) {
|
|
|
|
|
// 确保值是字符串类型,如果是数组则取第一个元素
|
|
|
|
|
const instockTypeValue = Array.isArray(route.query.instockType)
|
|
|
|
|
? route.query.instockType[0]
|
|
|
|
|
: route.query.instockType;
|
|
|
|
|
queryForm.value.instockType = instockTypeValue;
|
|
|
|
|
routeInstockTypeValue = instockTypeValue; // 保存路由参数值
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const parentTableRef = ref()
|
|
|
|
|
const parentTableData = ref([])
|
|
|
|
|
@ -811,7 +824,7 @@ const submitForm = async() => {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 将最终的分包数量传递给后端
|
|
|
|
|
childrenTableInfoForm.value.packageQtyList = finalPackageList
|
|
|
|
|
childrenTableInfoForm.value.packageMode = packageMode.value // 传递模式信息
|
|
|
|
|
@ -923,7 +936,7 @@ const reset = () => {
|
|
|
|
|
instockCode: '',
|
|
|
|
|
materialCategoryId: '',
|
|
|
|
|
materialCategoryName: '',
|
|
|
|
|
instockType: '',
|
|
|
|
|
instockType: routeInstockTypeValue,
|
|
|
|
|
instockMethond: routeInstockMethondValue,// 使用保存的路由参数值
|
|
|
|
|
auditStatus: '',
|
|
|
|
|
pageNum: 1,
|
|
|
|
|
@ -954,7 +967,7 @@ const viewDetails = (e) => {
|
|
|
|
|
// 父表格新增
|
|
|
|
|
const parentTableAdd = () => {
|
|
|
|
|
dialogVisible.value = true;
|
|
|
|
|
dialogForm.value = { instockType: '', orderNo: '', materialCategoryId: '', warehouseId: '' };
|
|
|
|
|
dialogForm.value = { instockType: '', orderNo: '', materialCategoryId: '', warehouseId: '' };
|
|
|
|
|
dialogtable.value = [];
|
|
|
|
|
// 清空表单验证状态
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
@ -1044,14 +1057,14 @@ const dialogSubmit = async () => {
|
|
|
|
|
ElMessage.error('表单引用未找到');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await dialogFormRef.value.validate();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
ElMessage.error('请填写完整的表单信息');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log(dialogtable.value)
|
|
|
|
|
// 将前端行映射为后端明细字段,并进行基本校验与过滤
|
|
|
|
|
const detailList = (dialogtable.value || [])
|
|
|
|
|
@ -1264,7 +1277,7 @@ const handleAssociatePurchaseOrder = async () => {
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// 使用新的API获取带统计数据的采购订单物料列表
|
|
|
|
|
const res = await getWmsPurchaseOrderDetailWithStatistics({
|
|
|
|
|
const res = await getWmsPurchaseOrderDetailWithStatistics({
|
|
|
|
|
poNo: order.poNo
|
|
|
|
|
});
|
|
|
|
|
dialogtable.value = res.data.map(item => ({
|
|
|
|
|
@ -1356,14 +1369,14 @@ const onSplitPackageCountChange = (count) => {
|
|
|
|
|
if (count > 1) {
|
|
|
|
|
// 默认使用平均分包模式
|
|
|
|
|
packageMode.value = 'average'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 初始化数组
|
|
|
|
|
packageQtyList.value = new Array(count).fill(1)
|
|
|
|
|
averagePackageList.value = new Array(count).fill(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 计算平均分包
|
|
|
|
|
calculateAveragePackage(count)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 同时初始化自定义数量为平均值(作为备用)
|
|
|
|
|
packageQtyList.value = [...averagePackageList.value]
|
|
|
|
|
} else {
|
|
|
|
|
@ -1379,7 +1392,7 @@ const calculateAveragePackage = (count) => {
|
|
|
|
|
if (remaining > 0 && count > 0) {
|
|
|
|
|
const avgQty = Math.floor(remaining / count)
|
|
|
|
|
const remainder = remaining % count
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (let i = 0; i < count; i++) {
|
|
|
|
|
averagePackageList.value[i] = avgQty + (i < remainder ? 1 : 0)
|
|
|
|
|
}
|
|
|
|
|
@ -1399,7 +1412,7 @@ const onPackageModeChange = (mode) => {
|
|
|
|
|
const validateTotalQty = () => {
|
|
|
|
|
const total = totalPackageQty.value
|
|
|
|
|
const remaining = remainingQty.value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (total > remaining) {
|
|
|
|
|
ElMessage.warning(`每包数量总计不能超过剩余数量 ${remaining}`)
|
|
|
|
|
}
|
|
|
|
|
|