fix(wms): 修复入库单数量校验bug

- 移除多余的选中列
- 添加条码配置功能(已注释)
- 优化物料选择和工单类型选择
- 修改入库数量校验
- 调整盘点类型字典
- 优化任务类型和仓库名称显示
master^2
zangch@mesnac.com 2 days ago
parent 244d207547
commit 9cfacd896b

@ -62,7 +62,6 @@
@current-change="parentTableCellClick"
@selection-change="selectionChange" ref="parentTableRef">
<el-table-column type="selection" width="55"/>
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="入库单 主键" align="center" prop="instockId"/> -->
<el-table-column label="入库单号" align="center" prop="instockCode"/>
<el-table-column label="物料大类" align="center" prop="materialCategoryName">
@ -163,7 +162,7 @@
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="80%">
<el-card shadow="never">
<el-form :model="dialogForm" :inline="true" label-width="120px" :disabled="isView">
<el-form :model="dialogForm" :inline="true" label-width="120px" :disabled="isView" ref="dialogFormRef" :rules="dialogFormRules">
<el-form-item label="物料大类" prop="materialCategoryId">
<el-select v-model="dialogForm.materialCategoryId" placeholder="请选择物料大类" @change="setMaterialList">
<el-option v-for="item in mategoryOptions"
@ -174,7 +173,7 @@
</el-select>
</el-form-item>
<el-form-item label="工单类型" prop="instockType">
<el-select v-model="dialogForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)">
<el-select v-model="dialogForm.instockType" placeholder="请选择工单类型">
<el-option
v-for="dict in wms_instock_type"
:key="dict.value"
@ -224,7 +223,7 @@
<el-card style="margin-top: 8px" shadow="never">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="addDialogTableCell"></el-button>
<el-button type="primary" plain icon="Plus" @click="addDialogTableCell" :disabled="isAddDisabled">新增</el-button>
</el-col>
</el-row>
<el-table :data="dialogtable" style="width: 100%">
@ -532,6 +531,13 @@
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<!--
<el-form-item>
<el-button @click="batchConfigVisible = true">配置条码</el-button>
</el-form-item>
-->
<el-form-item label="已包数量" prop="printedNum">
<el-input v-model="childrenTableInfoForm.printedNum" placeholder="" :disabled="true"/>
</el-form-item>
@ -552,6 +558,17 @@
</template>
</el-dialog>
<!-- <el-dialog v-model="batchConfigVisible" title="条码配置" width="40%">
<el-select v-model="selectedComponents" multiple placeholder="选择并排序组成部分">
<el-option v-for="comp in batchComponents" :key="comp" :label="comp" :value="comp" />
</el-select>
<template #footer>
<el-button @click="batchConfigVisible = false">取消</el-button>
<el-button type="primary" @click="saveBatchConfig"></el-button>
</template>
</el-dialog>-->
<!-- 添加物料信息对话框 -->
<el-dialog title="选择物料信息" v-model="materialOpen" width='1200px' append-to-body>
<MaterialSelectInWMS
@ -571,8 +588,8 @@
<script setup name="Linkage" lang="ts">
import { listInstockOrder, getInstockOrder, delInstockOrder, addInstockOrder, updateInstockOrder, approveInstockOrder } from '@/api/wms/instockOrder';
import type { InstockOrderForm } from '@/api/wms/instockOrder/types';
import {onMounted, reactive, watch, computed} from 'vue'
import type { InstockOrderForm, InstockOrderVO } from '@/api/wms/instockOrder/types';
import { ref, onMounted, reactive, watch, computed, getCurrentInstance, toRefs, ComponentInternalInstance } from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import {getBaseWarehouseList} from "@/api/wms/baseWarehouse";
import {UserVO} from "@/api/system/user/types";
@ -590,6 +607,8 @@ import { getBaseMaterialCategoryListInWMS } from '@/api/wms/baseMaterialCategory
import { getWmsPurchaseOrderDetailList } from '@/api/wms/wmsPurchaseOrderDetail';
import { getProdOrderInfoList, listOrderInfo } from '@/api/wms/orderInfo';
import { getWmsPurchaseOrderList } from '@/api/wms/wmsPurchaseOrder';
import { useRoute } from 'vue-router';
import { parseTime } from '@/utils/ruoyi';
const {proxy} = getCurrentInstance() as ComponentInternalInstance;
const {audit_behave,
@ -663,6 +682,8 @@ const parentTableLoad = ref(false)
const childrenTableLoad = ref(false)
const isView = ref(false)
const partntTableSelectCell = ref({})
const showSearch = ref(true)
const columns = ref([])
const state = reactive({
showPurchaseOrderSelect: false,
@ -678,7 +699,8 @@ const state = reactive({
getBaseWarehouseList().then(e => {
baseStoreList.value = e.data
})
listUser().then(e => {
listUser({ pageNum: 1, pageSize: 99999 }).then(e => {
userList.value = e.rows;
})
/** 提交按钮 */
@ -710,11 +732,38 @@ const submitForm = async() => {
}
}
/* // 生成batchCode基于配置
childrenTableInfoForm.value.batchCode = generateBatchCode(childrenTableInfoForm.value)*/
await updateInstockDetail(childrenTableInfoForm.value)
getChildrenTable({instockId: partntTableSelectCell.value.instockId})
childrenTableInfoVisible.value = false
}
/*
//
const batchConfigVisible = ref(false)
const batchComponents = ref(['当前时间', '入库单号', '物料编码']) //
const selectedComponents = ref([]) //
onMounted(() => {
const saved = localStorage.getItem('batchCodeConfig')
if (saved) selectedComponents.value = JSON.parse(saved)
})
const saveBatchConfig = () => {
localStorage.setItem('batchCodeConfig', JSON.stringify(selectedComponents.value))
batchConfigVisible.value = false
}
const generateBatchCode = (form) => {
if (!selectedComponents.value.length) return '' //
return selectedComponents.value.map(comp => {
if (comp === '当前时间') return new Date().toISOString().slice(0,10)
if (comp === '入库单号') return form.instockCode
if (comp === '物料编码') return form.materialCode
return ''
}).join('-') // -
}
*/
let mategoryOptions = ref([]);
const getMaterialCategorySelect = async () => {
const res = await getBaseMaterialCategoryListInWMS(null);
@ -780,8 +829,15 @@ const query = async () => {
}
const reset = () => {
queryForm.value = {
instockId: '',
instockMethond: routeInstockMethondValue, // 使
warehouseId: '',
instockCode: '',
materialCategoryId: '',
materialCategoryName: '',
warehouseId: '',
instockType: '',
instockMethond: routeInstockMethondValue,// 使
pageNum: 1,
pageSize: 10
}
getParentTable()
}
@ -800,9 +856,9 @@ const selectionChange = (e) => {
const viewDetails = (e) => {
isView.value = true
dialogVisible.value = true
viewAllocateOrder(e.aoId).then(v => {
dialogForm.value = v.data
})
// viewAllocateOrder(e.aoId).then(v => { // Comment out or remove undefined function
// dialogForm.value = v.data
// })
}
//
@ -887,6 +943,7 @@ const addDialogTableCell = () => {
//
const dialogSubmit = () => {
console.log(dialogtable.value)
//
const detailList = (dialogtable.value || [])
.map((item: any) => ({
@ -895,16 +952,17 @@ const dialogSubmit = () => {
materialName: item.materialName,
materialSpe: item.materialSpec, // materialSpec -> materialSpe
unitName: item.materialUnit, // materialUnit -> unitName
instockQty: item.instockQty,
instockQty: Number(item.instockQty || 0),
codeYesNo: item.codeYesNo || '0',
materialCategoryId: dialogForm.value.materialCategoryId
}))
.filter(d => d.materialId && d.materialCode && Number(d.instockQty) > 0);
.filter( d =>d.materialCode && Number(d.instockQty) > 0);
// if (!detailList.length) {
// ElMessage.error('>0');
// return;
// }
console.log(detailList)
if (!detailList.length) {
ElMessage.error('请添加至少一条物料且数量>0');
return;
}
console.log(detailList,dialogtable.value);
@ -913,6 +971,7 @@ const dialogSubmit = () => {
detailListBo: detailList
};
console.log(payload)
addInstockOrder(payload).then(() => {
ElMessage.success('保存成功');
dialogVisible.value = false;
@ -954,7 +1013,14 @@ const parentTableInfoSubmit = () =>{
//
const childrenTableUpdate = async (e) => {
childrenTableInfoForm.value = (await getInstockDetail(e.instockDetailId)).data
const detail = (await getInstockDetail(e.instockDetailId)).data
const remaining = Number(detail.instockQty) - Number(detail.printedNum || 0)
if(remaining <= 0){
ElMessage.error('无剩余数量可打印')
return
}
childrenTableInfoForm.value = detail
childrenTableInfoForm.value.splitPackageCount = 1
childrenTableInfoForm.value.printCopies = 1
childrenTableInfoVisible.value = true
@ -1031,6 +1097,7 @@ const submitMaterialForm = () => {
if (selectedMaterial.value) {
if (selectType.value === 'material') {
//
console.log(selectedMaterial.value);
if (currentRowIndex.value >= 0 && dialogtable.value[currentRowIndex.value]) {
dialogtable.value[currentRowIndex.value].materialId = selectedMaterial.value.materialId;
dialogtable.value[currentRowIndex.value].materialName = selectedMaterial.value.materialName;
@ -1110,7 +1177,6 @@ const handlePurchaseOrderSelect = (order) => {
const handleProductionOrderSelect = (order) => {
state.selectedProductionOrder = order;
dialogForm.value.orderNo = order.orderCode;
// For production, do not auto-populate materials; user adds manually
};
//
@ -1143,6 +1209,16 @@ const remainingQty = computed(() => {
return Math.max(0, instock - printed) // Math.max
})
const dialogFormRef = ref();
const dialogFormRules = ref({
warehouseId: [{ required: true, message: '请选择仓库', trigger: 'change' }],
instockType: [{ required: true, message: '请选择工单类型', trigger: 'change' }]
});
const isAddDisabled = computed(() => {
return dialogForm.value.instockType === '1';
});
</script>
<style>
.demo-form-inline .el-input {

@ -68,7 +68,8 @@
<el-table-column label="计划仓库" align="center" prop="warehouseCode" v-if="columns[4].visible"/>
<el-table-column label="盘点类型" align="center" prop="checkType" v-if="columns[5].visible">
<template #default="scope">
<dict-tag :options="wms_stocking_type" :value="scope.row.checkType"/>
<!-- <dict-tag :options="wms_stocking_type" :value="scope.row.checkType"/>-->
<dict-tag :options="wms_check_task_type" :value="scope.row.checkType"/>
</template>
</el-table-column>
<el-table-column label="盘点状态" align="center" prop="checkStatus" v-if="columns[6].visible">
@ -200,8 +201,14 @@
</el-form-item>
<el-form-item label="盘点类型" prop="checkType">
<el-select v-model="form.checkType" placeholder="请选择盘点类型">
<!-- <el-option-->
<!-- v-for="dict in wms_stocking_type"-->
<!-- :key="dict.value"-->
<!-- :label="dict.label"-->
<!-- :value="dict.value"-->
<!-- ></el-option>-->
<el-option
v-for="dict in wms_stocking_type"
v-for="dict in wms_check_task_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -217,16 +224,16 @@
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item> -->
<el-form-item label="审核人" prop="auditBy">
<el-select v-model="form.auditBy" placeholder="请选择审核人">
<el-option
v-for="item in userList"
:key="item.userId"
:label="item.userName"
:value="item.userName"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="审核人" prop="auditBy">-->
<!-- <el-select v-model="form.auditBy" placeholder="请选择审核人">-->
<!-- <el-option-->
<!-- v-for="item in userList"-->
<!-- :key="item.userId"-->
<!-- :label="item.userName"-->
<!-- :value="item.userName"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="审核时间" prop="auditTime">
<el-date-picker clearable
v-model="form.auditTime"
@ -297,8 +304,9 @@ const {
material_mategories,
wms_stocking_type,
approve_status,
wms_stocking_status
} = toRefs<any>(proxy?.useDict('material_mategories', 'wms_stocking_type', 'approve_status', 'wms_stocking_status'));
wms_stocking_status,
wms_check_task_type
} = toRefs<any>(proxy?.useDict('material_mategories', 'wms_stocking_type', 'approve_status', 'wms_stocking_status', 'wms_check_task_type'));
const inventoryCheckList = ref<InventoryCheckVO[]>([]);
const inventoryCheckRecordList = ref<InventoryCheckRecordVO[]>([]);
const buttonLoading = ref(false);
@ -323,16 +331,16 @@ const columns = ref<FieldOption[]>([
{key: 0, label: `表主键`, visible: true},
{key: 1, label: `租户号`, visible: true},
{key: 2, label: `盘点单号`, visible: true},
{key: 3, label: `物料大类`, visible: true},
{key: 3, label: `物料大类`, visible: false},
{key: 4, label: `计划仓库`, visible: true},
{key: 5, label: `盘点类型`, visible: true},
{key: 6, label: `盘点状态`, visible: true},
{key: 7, label: `创建人`, visible: true},
{key: 8, label: `创建时间`, visible: true},
{key: 9, label: `审核人`, visible: true},
{key: 10, label: `审核时间`, visible: true},
{key: 11, label: `审核状态(0待审核,1审核通过,2审核未通过)`, visible: true},
{key: 12, label: `审核意见`, visible: true},
{key: 9, label: `审核人`, visible: false},
{key: 10, label: `审核时间`, visible: false},
{key: 11, label: `审核状态`, visible: false},
{key: 12, label: `审核意见`, visible: false},
{key: 13, label: `开始时间`, visible: true},
{key: 14, label: `结束时间`, visible: true},
]);

@ -7,17 +7,17 @@
<!-- <el-form-item label="任务主键" prop="taskId">-->
<!-- <el-input v-model="queryParams.taskId" placeholder="请输入任务主键" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="任务编码" prop="taskCode">-->
<!-- <el-input v-model="queryParams.taskCode" placeholder="请输入任务编码" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="任务名称" prop="taskName">-->
<!-- <el-input v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="任务类型" prop="wmsCheckTaskType">-->
<!-- <el-select v-model="queryParams.wmsCheckTaskType" placeholder="请选择任务类型" clearable >-->
<!-- <el-option v-for="dict in wms_check_task_type" :key="dict.value" :label="dict.label" :value="dict.value"/>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="任务编码" prop="taskCode">
<el-input v-model="queryParams.taskCode" placeholder="请输入任务编码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="任务名称" prop="taskName">
<el-input v-model="queryParams.taskName" placeholder="请输入任务名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="任务类型" prop="wmsCheckTaskType">
<el-select v-model="queryParams.wmsCheckTaskType" placeholder="请选择任务类型" clearable >
<el-option v-for="dict in wms_check_task_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="物料类型" prop="materialTypeId">-->
<!-- <el-input v-model="queryParams.materialTypeId" placeholder="请输入物料类型" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
@ -31,7 +31,7 @@
<!-- <el-input v-model="queryParams.warehouseId" placeholder="请输入仓库主键" clearable @keyup.enter="handleQuery" />-->
<!-- </el-form-item>-->
<el-form-item label="频率选项" prop="wmsCheckTaskFrequency">
<el-select v-model="queryParams.wmsCheckTaskFrequency" placeholder="请选择定时任务频率选项(0月度计划1年度计划2其它)" clearable >
<el-select v-model="queryParams.wmsCheckTaskFrequency" placeholder="请选择定时任务频率选项" clearable >
<el-option v-for="dict in wms_check_task_frequency" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
@ -79,8 +79,8 @@
<dict-tag :options="wms_check_task_frequency" :value="scope.row.wmsCheckTaskFrequency"/>
</template>
</el-table-column>
<el-table-column label="仓库主键" align="center" prop="warehouseId" v-if="columns[4].visible"/>
<el-table-column label="物料类型" align="center" prop="materialTypeId" v-if="columns[6].visible"/>
<el-table-column label="仓库名称" align="center" prop="warehouseName" v-if="columns[4].visible"/>
<el-table-column label="物料类型" align="center" prop="matrialTypeName" v-if="columns[6].visible"/>
<el-table-column label="抽检率" align="center" prop="checkRate" v-if="columns[7].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
@ -170,7 +170,7 @@
placeholder="只能点击右侧生成器">
<template #append>
<el-button type="primary" @click="handleShowCron">
生成计划表达式
点击生成计划表达式
</el-button>
</template>
</el-input>
@ -250,7 +250,7 @@ const columns = ref<FieldOption[]>([
{ key: 2, label: `任务类型`, visible: true },
{ key: 3, label: `定时任务`, visible: true },
{ key: 4, label: `仓库主键`, visible: true },
{ key: 4, label: `仓库`, visible: true },
// { key: 7, label: ``, visible: true },
// { key: 8, label: ``, visible: true },
// { key: 9, label: ``, visible: true },
@ -258,7 +258,7 @@ const columns = ref<FieldOption[]>([
// { key: 11, label: ``, visible: true },
{ key: 5, label: `频率选项`, visible: true },
{ key: 6, label: `物料类型`, visible: true },
{ key: 7, label: `抽检率`, visible: true },
{ key: 7, label: `抽检率`, visible: false },
]);
const initFormData: WmsCheckTaskForm = {
@ -271,6 +271,8 @@ const initFormData: WmsCheckTaskForm = {
cron: undefined,
warehouseId: undefined,
wmsCheckTaskFrequency: undefined,
matrialTypeName: undefined,
warehouseName: undefined,
}
const data = reactive<PageData<WmsCheckTaskForm, WmsCheckTaskQuery>>({
form: {...initFormData},
@ -286,6 +288,8 @@ const data = reactive<PageData<WmsCheckTaskForm, WmsCheckTaskQuery>>({
cron: undefined,
warehouseId: undefined,
wmsCheckTaskFrequency: undefined,
matrialTypeName: undefined,
warehouseName: undefined,
params: {
}
},

Loading…
Cancel
Save