Merge remote-tracking branch 'origin/master'

master
夜笙歌 1 week ago
commit e673690245

File diff suppressed because it is too large Load Diff

@ -5,23 +5,23 @@
<el-form-item label="入库单号"> <el-form-item label="入库单号">
<el-input v-model="queryForm.instockCode" placeholder="输入调拨单号" clearable/> <el-input v-model="queryForm.instockCode" placeholder="输入调拨单号" clearable/>
</el-form-item> </el-form-item>
<el-form-item label="工单类型" prop="instockType"> <el-form-item label="工单类型" prop="instockType">
<el-select v-model="queryForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)" clearable > <el-select v-model="queryForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)" clearable >
<el-option v-for="dict in wms_instock_type" :key="dict.value" :label="dict.label" :value="dict.value"/> <el-option v-for="dict in wms_instock_type" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="入库方式" prop="instockMethond"> <el-form-item label="入库方式" prop="instockMethond">
<el-select v-model="queryForm.instockMethond" placeholder="请选择入库方式" clearable > <el-select v-model="queryForm.instockMethond" placeholder="请选择入库方式" clearable >
<el-option v-for="dict in instock_methond" :key="dict.value" :label="dict.label" :value="dict.value"/> <el-option v-for="dict in instock_methond" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="审核状态" prop="auditStatus"> <el-form-item label="审核状态" prop="auditStatus">
<el-select v-model="queryForm.auditStatus" placeholder="请选择审核状态" clearable > <el-select v-model="queryForm.auditStatus" placeholder="请选择审核状态" clearable >
<el-option v-for="dict in approve_status" :key="dict.value" :label="dict.label" :value="dict.value"/> <el-option v-for="dict in approve_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="仓库" prop="warehouseId"> <el-form-item label="仓库" prop="warehouseId">
<el-select v-model="queryForm.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="queryForm.warehouseId" placeholder="请选择所属仓库">
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"
@ -29,7 +29,7 @@
:value="item.warehouseId" :value="item.warehouseId"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button :loading="parentTableLoad" type="primary" @click="query"></el-button> <el-button :loading="parentTableLoad" type="primary" @click="query"></el-button>
<el-button @click="reset"></el-button> <el-button @click="reset"></el-button>
@ -143,8 +143,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" fixed="right" width="200"> <el-table-column label="操作" fixed="right" width="200">
<template #default="scope"> <template #default="scope">
<el-button size="small" @click="childrenTableUpdate( scope.row)" v-if="auditStatusLoad"> <el-button size="small" @click="childrenTableUpdate( scope.row)" v-if="auditStatusLoad">
打印 打印
</el-button> </el-button>
<el-button <el-button
size="small" size="small"
@ -165,60 +165,60 @@
<el-card shadow="never"> <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">
<el-form-item label="物料大类" prop="materialCategoryId"> <el-form-item label="物料大类" prop="materialCategoryId">
<el-select v-model="dialogForm.materialCategoryId" placeholder="请选择物料大类" @change="setMaterialList"> <el-select v-model="dialogForm.materialCategoryId" placeholder="请选择物料大类" @change="setMaterialList">
<el-option v-for="item in mategoryOptions" <el-option v-for="item in mategoryOptions"
:key="item.materialCategoryId" :key="item.materialCategoryId"
:label="item.materialCategoryName" :label="item.materialCategoryName"
:value="item.materialCategoryId" :value="item.materialCategoryId"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="工单类型" prop="instockType"> <el-form-item label="工单类型" prop="instockType">
<el-select v-model="dialogForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)"> <el-select v-model="dialogForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)">
<el-option <el-option
v-for="dict in wms_instock_type" v-for="dict in wms_instock_type"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="订单编号" prop="orderNo"> <el-form-item label="订单编号" prop="orderNo">
<el-input v-model="dialogForm.orderNo" placeholder="请输入订单编号" /> <el-input v-model="dialogForm.orderNo" placeholder="请输入订单编号" />
</el-form-item> </el-form-item>
<el-form-item label="采购订单" v-if="state.showPurchaseOrderSelect"> <el-form-item label="采购订单" v-if="state.showPurchaseOrderSelect">
<el-select v-model="state.selectedPurchaseOrder" placeholder="请选择采购订单" value-key="poId" style="width: 200px"> <el-select v-model="state.selectedPurchaseOrder" placeholder="请选择采购订单" value-key="poId" style="width: 200px">
<el-option v-for="item in state.purchaseOrders" :key="item.poId" :label="item.poNo" :value="item" /> <el-option v-for="item in state.purchaseOrders" :key="item.poId" :label="item.poNo" :value="item" />
</el-select> </el-select>
<el-button type="primary" @click="handleAssociatePurchaseOrder" style="margin-left: 10px" :disabled="!state.selectedPurchaseOrder"> <el-button type="primary" @click="handleAssociatePurchaseOrder" style="margin-left: 10px" :disabled="!state.selectedPurchaseOrder">
关联 关联
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item label="生产订单" v-if="state.showProductionOrderSelect"> <el-form-item label="生产订单" v-if="state.showProductionOrderSelect">
<el-select v-model="state.selectedProductionOrder" placeholder="请选择生产订单" @change="handleProductionOrderSelect" value-key="productOrderId"> <el-select v-model="state.selectedProductionOrder" placeholder="请选择生产订单" @change="handleProductionOrderSelect" value-key="productOrderId">
<el-option v-for="item in state.productionOrders" :key="item.productOrderId" :label="item.orderCode" :value="item" /> <el-option v-for="item in state.productionOrders" :key="item.productOrderId" :label="item.orderCode" :value="item" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item label="审核人" prop="auditBy"> <!-- <el-form-item label="审核人" prop="auditBy">
<el-select v-model="dialogForm.auditBy" placeholder="请选择审核人"> <el-select v-model="dialogForm.auditBy" placeholder="请选择审核人">
<el-option <el-option
v-for="item in userList" v-for="item in userList"
:key="item.userId" :key="item.userId"
:label="item.userName" :label="item.userName"
:value="item.userName" :value="item.userName"
/> />
</el-select> </el-select>
</el-form-item> --> </el-form-item> -->
<el-form-item label="仓库ID" prop="warehouseId"> <el-form-item label="仓库ID" prop="warehouseId">
<el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库">
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"
:label="item.warehouseName" :label="item.warehouseName"
:value="item.warehouseId" :value="item.warehouseId"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card style="margin-top: 8px" shadow="never"> <el-card style="margin-top: 8px" shadow="never">
@ -359,16 +359,16 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" fixed="right" width="200"> <el-table-column label="操作" fixed="right" width="200">
<template #default="scope"> <template #default="scope">
<el-button <el-button
size="small" size="small"
type="danger" type="danger"
@click="tableUDelete(scope.row)" @click="tableUDelete(scope.row)"
> >
删除 删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="已包数量" prop="printedNum"> <!-- <el-table-column label="已包数量" prop="printedNum">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.printedNum" placeholder="请输入已包数量" /> <el-input v-model="scope.row.printedNum" placeholder="请输入已包数量" />
@ -418,20 +418,20 @@
<el-form :model="parentTableInfoForm" label-width="120px"> <el-form :model="parentTableInfoForm" label-width="120px">
<el-form-item label="物料大类" prop="materialCategoryId"> <el-form-item label="物料大类" prop="materialCategoryId">
<el-select v-model="parentTableInfoForm.materialCategoryId" placeholder="请选择物料大类" :disabled="true"> <el-select v-model="parentTableInfoForm.materialCategoryId" placeholder="请选择物料大类" :disabled="true">
<el-option v-for="item in mategoryOptions" <el-option v-for="item in mategoryOptions"
:key="item.materialCategoryId" :key="item.materialCategoryId"
:label="item.materialCategoryName" :label="item.materialCategoryName"
:value="item.materialCategoryId" :value="item.materialCategoryId"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="工单类型" prop="instockType"> <el-form-item label="工单类型" prop="instockType">
<el-select v-model="parentTableInfoForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)"> <el-select v-model="parentTableInfoForm.instockType" placeholder="请选择工单类型(1采购订单,2生产订单,3手工,4系统生成)">
<el-option <el-option
v-for="dict in wms_instock_type" v-for="dict in wms_instock_type"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -535,11 +535,11 @@
<el-form-item label="已包数量" prop="printedNum"> <el-form-item label="已包数量" prop="printedNum">
<el-input v-model="childrenTableInfoForm.printedNum" placeholder="" :disabled="true"/> <el-input v-model="childrenTableInfoForm.printedNum" placeholder="" :disabled="true"/>
</el-form-item> </el-form-item>
<el-form-item label="分包数量" prop="printNum"> <el-form-item label="分包数量" prop="splitPackageCount">
<el-input v-model="childrenTableInfoForm.printNum" placeholder="请输入分包数量" /> <el-input-number v-model="childrenTableInfoForm.splitPackageCount" :min="1" :max="remainingQty" placeholder="请输入分包数量" />
</el-form-item> </el-form-item>
<el-form-item label="打印数量" prop="barcodeNum"> <el-form-item label="打印数量" prop="printCopies" v-if="childrenTableInfoForm.splitPackageCount === 1 || !childrenTableInfoForm.splitPackageCount">
<el-input v-model="childrenTableInfoForm.barcodeNum" placeholder="请输入打印条码数量" /> <el-input-number v-model="childrenTableInfoForm.printCopies" :min="1" :max="20" placeholder="请输入打印条码数量" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -572,7 +572,7 @@
<script setup name="Linkage" lang="ts"> <script setup name="Linkage" lang="ts">
import { listInstockOrder, getInstockOrder, delInstockOrder, addInstockOrder, updateInstockOrder, approveInstockOrder } from '@/api/wms/instockOrder'; import { listInstockOrder, getInstockOrder, delInstockOrder, addInstockOrder, updateInstockOrder, approveInstockOrder } from '@/api/wms/instockOrder';
import type { InstockOrderForm } from '@/api/wms/instockOrder/types'; import type { InstockOrderForm } from '@/api/wms/instockOrder/types';
import {onMounted, reactive, watch} from 'vue' import {onMounted, reactive, watch, computed} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus' import {ElMessage, ElMessageBox} from 'element-plus'
import {getBaseWarehouseList} from "@/api/wms/baseWarehouse"; import {getBaseWarehouseList} from "@/api/wms/baseWarehouse";
import {UserVO} from "@/api/system/user/types"; import {UserVO} from "@/api/system/user/types";
@ -667,10 +667,37 @@ listUser().then(e => {
}) })
/** 提交按钮 */ /** 提交按钮 */
const submitForm = async() => { const submitForm = async() => {
await updateInstockDetail(childrenTableInfoForm.value); if (!childrenTableInfoForm.value.instockQty || !childrenTableInfoForm.value.printedNum) {
getChildrenTable({instockId: partntTableSelectCell.value.instockId}); ElMessage.error('物料数据未加载完成,请重试')
childrenTableInfoVisible.value = false; return
}
const split = Number(childrenTableInfoForm.value.splitPackageCount) || 1
const copies = Number(childrenTableInfoForm.value.printCopies) || 1
const remaining = remainingQty.value
if (split > remaining) {
ElMessage.error('分包数量不能超过剩余物料量')
return
}
if (split > 1) {
if (remaining % split !== 0) {
ElMessage.error('剩余物料量无法平均分包,请调整分包数量')
return
} }
// >1barcodeNum=11
childrenTableInfoForm.value.printCopies = 1
} else {
if (copies < 1) {
ElMessage.error('重复打印数量至少为1')
return
}
}
await updateInstockDetail(childrenTableInfoForm.value)
getChildrenTable({instockId: partntTableSelectCell.value.instockId})
childrenTableInfoVisible.value = false
}
let mategoryOptions = ref([]); let mategoryOptions = ref([]);
const getMaterialCategorySelect = async () => { const getMaterialCategorySelect = async () => {
@ -846,8 +873,8 @@ const dialogSubmit = () => {
addInstockOrder(dialogForm.value).then(e => { addInstockOrder(dialogForm.value).then(e => {
addInstockDetail(dialogtable.value.map(item => { addInstockDetail(dialogtable.value.map(item => {
return {...item, instockCode: e.data.instockCode,instockId: e.data.instockId, materialCategoryId: e.data.materialCategoryId} return {...item, instockCode: e.data.instockCode,instockId: e.data.instockId, materialCategoryId: e.data.materialCategoryId}
} }
) )
).then(v => { ).then(v => {
dialogVisible.value = false dialogVisible.value = false
@ -865,14 +892,14 @@ const parentTableApproveSubmit = () =>{
if(e.data==0){ if(e.data==0){
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '请通知对应负责人审批', message: '请通知对应负责人审批',
}) })
} }
if(e.data!=0){ if(e.data!=0){
ElMessage({ ElMessage({
type: 'success', type: 'success',
message: '审批完成', message: '审批完成',
}) })
} }
parentTableApproveVisible.value = false parentTableApproveVisible.value = false
@ -893,25 +920,27 @@ const parentTableInfoSubmit = () =>{
// //
const childrenTableUpdate = async (e) => { const childrenTableUpdate = async (e) => {
childrenTableInfoForm.value = (await getInstockDetail(e.instockDetailId)).data childrenTableInfoForm.value = (await getInstockDetail(e.instockDetailId)).data
childrenTableInfoForm.value.splitPackageCount = 1
childrenTableInfoForm.value.printCopies = 1
childrenTableInfoVisible.value = true childrenTableInfoVisible.value = true
} }
// //
const tableUDelete = (row) => { const tableUDelete = (row) => {
ElMessageBox.confirm( ElMessageBox.confirm(
'确定要删除这些数据吗?', '确定要删除这些数据吗?',
'Warning', 'Warning',
{ {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
} }
) )
.then(async () => { .then(async () => {
const index = dialogtable.value.indexOf(row); const index = dialogtable.value.indexOf(row);
console.log(index) console.log(index)
dialogtable.value.splice(index,1) dialogtable.value.splice(index,1)
}) })
} }
@ -1072,6 +1101,12 @@ const validateQty = (row, val) => {
} }
}; };
// computed
const remainingQty = computed(() => {
const instock = Number(childrenTableInfoForm.value.instockQty) || 0
const printed = Number(childrenTableInfoForm.value.printedNum) || 0
return Math.max(0, instock - printed) // Math.max
})
</script> </script>
<style> <style>

Loading…
Cancel
Save