Merge remote-tracking branch 'origin/master'

master
夜笙歌 4 months ago
commit 3a5a840953

@ -47,6 +47,36 @@ export interface AllocateOrderDetailForm extends BaseEntity {
*/ */
materialId?: string | number; materialId?: string | number;
/**
*
*/
materialCode?: string;
/**
*
*/
materialName?: string;
/**
*
*/
batchCode?: string;
/**
*
*/
locationCode?: string;
/**
* ID
*/
storeId?: string | number;
/**
*
*/
inventoryQty?: number;
/** /**
* *
*/ */

@ -341,7 +341,7 @@ export interface BaseMaterialInfoForm extends BaseEntity {
* () * ()
*/ */
materialCategoryId: string; materialCategoryId: string;
materialCategories: string;//暂时保留 // materialCategories: string;//暂时保留
/** /**
* *

@ -87,7 +87,7 @@ export interface InstockDetailVO {
purchaseQty?: number; purchaseQty?: number;
/** /**
* * WmsInstockRecord
*/ */
instockedQty?: number; instockedQty?: number;
@ -96,6 +96,15 @@ export interface InstockDetailVO {
*/ */
remainingQty?: number; remainingQty?: number;
/**
* >1使
*/
packageQtyList?: number[];
/**
* average:, custom:
*/
packageMode?: string;
} }
@ -183,7 +192,7 @@ export interface InstockDetailForm extends BaseEntity {
purchaseQty?: number; purchaseQty?: number;
/** /**
* * WmsInstockRecord
*/ */
instockedQty?: number; instockedQty?: number;
@ -192,6 +201,16 @@ export interface InstockDetailForm extends BaseEntity {
*/ */
remainingQty?: number; remainingQty?: number;
/**
* >1使
*/
packageQtyList?: number[];
/**
* average:, custom:
*/
packageMode?: string;
} }
export interface InstockDetailQuery extends PageQuery { export interface InstockDetailQuery extends PageQuery {

@ -78,11 +78,14 @@
<span>{{ formatDayHourMinutes(scope.row.minParkingTime) }}</span> <span>{{ formatDayHourMinutes(scope.row.minParkingTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="最大停放时间" align="center" prop="maxParkingTime" v-if="columns[7].visible"> <el-table-column label="保质期" align="center" prop="maxParkingTime" v-if="columns[7].visible">
<template #default="scope"> <template #default="scope">
<span>{{ formatDayHourMinutes(scope.row.maxParkingTime) }}</span> <span>{{ formatDayHourMinutes(scope.row.maxParkingTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="最大库存" align="center" prop="maxStockAmount" v-if="columns[11].visible"/>
<el-table-column label="最小库存" align="center" prop="minStockAmount" v-if="columns[12].visible"/>
<el-table-column label="安全库存" align="center" prop="safeStockAmount" v-if="columns[13].visible"/>
<el-table-column label="质检要求" align="center" prop="inspectionRequest" v-if="columns[10].visible"> <el-table-column label="质检要求" align="center" prop="inspectionRequest" v-if="columns[10].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="inspection_request" :value="scope.row.auditStatus"/> <dict-tag :options="inspection_request" :value="scope.row.auditStatus"/>
@ -156,34 +159,7 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="最小停放时间" prop="minParkingTime"> <el-form-item label="不正确" prop="maxParkingTime">
<el-input-number
v-model="form.minParkingDays"
placeholder="请输入天数"
:min="0"
:max="10000"
:controls="false"
:style="{ width: '50px' }"
/>
<span>&nbsp;&nbsp;</span>
<el-input-number v-model="form.minParkingHours" placeholder="请输入小时" :min="0" :max="23" :controls="false" :style="{ width: '50px' }" />
<span>&nbsp;小时&nbsp;</span>
<el-input-number
v-model="form.minParkingMinutes"
placeholder="请输入分钟"
:min="0"
:max="59"
:controls="false"
:style="{ width: '50px' }"
/>
<span>&nbsp;分钟&nbsp;</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="最大停放时间" prop="maxParkingTime">
<el-input-number <el-input-number
v-model="form.maxParkingDays" v-model="form.maxParkingDays"
placeholder="请输入天数" placeholder="请输入天数"
@ -193,19 +169,42 @@
:style="{ width: '50px' }" :style="{ width: '50px' }"
/> />
<span>&nbsp;&nbsp;</span> <span>&nbsp;&nbsp;</span>
<el-input-number v-model="form.maxParkingHours" placeholder="请输入小时" :min="0" :max="23" :controls="false" :style="{ width: '50px' }" /> <!-- <el-input-number v-model="form.maxParkingHours" placeholder="请输入小时" :min="0" :max="23" :controls="false" :style="{ width: '50px' }" />-->
<span>&nbsp;小时&nbsp;</span> <!-- <span>&nbsp;小时&nbsp;</span>-->
<el-input-number <!-- <el-input-number-->
v-model="form.maxParkingMinutes" <!-- v-model="form.maxParkingMinutes"-->
placeholder="请输入分钟" <!-- placeholder="请输入分钟"-->
:min="0" <!-- :min="0"-->
:max="59" <!-- :max="59"-->
:controls="false" <!-- :controls="false"-->
:style="{ width: '50px' }" <!-- :style="{ width: '50px' }"-->
/> <!-- />-->
<span>&nbsp;分钟&nbsp;</span> <!-- <span>&nbsp;分钟&nbsp;</span>-->
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-form-item label="最大库存" prop="maxStockAmount">
<el-input-number
v-model="form.maxStockAmount"
placeholder="请输入最大库存"
:min="0"
/>
</el-form-item>
<el-form-item label="最小库存" prop="minStockAmount">
<el-input-number
v-model="form.minStockAmount"
placeholder="请输入最小库存"
:min="0"
/>
</el-form-item>
<el-form-item label="安全库存" prop="safeStockAmount">
<el-input-number
v-model="form.safeStockAmount"
placeholder="请输入安全库存"
:min="0"
/>
</el-form-item>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
@ -260,6 +259,7 @@ import { BaseMaterialInfoVO, BaseMaterialInfoQuery, BaseMaterialInfoForm } from
// import { getFactoryList } from "@/api/wms/baseFactoryInfo"; // import { getFactoryList } from "@/api/wms/baseFactoryInfo";
import { getBaseMaterialTypeList } from "@/api/wms/baseMaterialType"; import { getBaseMaterialTypeList } from "@/api/wms/baseMaterialType";
import {getBaseMaterialCategoryListInWMS} from "@/api/wms/baseMaterialCategory"; import {getBaseMaterialCategoryListInWMS} from "@/api/wms/baseMaterialCategory";
import { formatDayHourMinutes } from '@/utils/ruoyi';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { apply_flag, inner_tube_flag, const { apply_flag, inner_tube_flag,
@ -307,10 +307,13 @@ const columns = ref<FieldOption[]>([
{ key: 5, label: `物料规格`, visible: true }, { key: 5, label: `物料规格`, visible: true },
{ key: 6, label: `最小停放时间`, visible: false }, { key: 6, label: `最小停放时间`, visible: false },
{ key: 7, label: `最大停放时间`, visible: true }, { key: 7, label: `保质期`, visible: true },
{ key: 8, label: `备注`, visible: false }, { key: 8, label: `备注`, visible: false },
{ key: 9, label: `"是否高价值`, visible: true }, { key: 9, label: `"是否高价值`, visible: true },
{ key: 10, label: `质检要求`, visible: true }, { key: 10, label: `质检要求`, visible: true },
{ key: 11, label: `最大库存`, visible: true },
{ key: 12, label: `最小库存`, visible: true },
{ key: 13, label: `安全库存`, visible: true },
]); ]);
const initFormData: BaseMaterialInfoForm = { const initFormData: BaseMaterialInfoForm = {
@ -343,9 +346,11 @@ const initFormData: BaseMaterialInfoForm = {
purchasePriceUnitId: undefined, purchasePriceUnitId: undefined,
approveDate: undefined, approveDate: undefined,
erpModifyDate: undefined, erpModifyDate: undefined,
maxStockAmount: undefined, maxStockAmount: undefined,
minStockAmount: undefined, minStockAmount: undefined,
safeStockAmount: undefined, safeStockAmount: undefined,
applyFlag: undefined, applyFlag: undefined,
materialClassfication: undefined, materialClassfication: undefined,
autoOutstockFlag: undefined, autoOutstockFlag: undefined,
@ -375,6 +380,7 @@ const initFormData: BaseMaterialInfoForm = {
isHighValue: undefined, isHighValue: undefined,
inspectionRequest: undefined, inspectionRequest: undefined,
} }
const data = reactive<PageData<BaseMaterialInfoForm, BaseMaterialInfoQuery>>({ const data = reactive<PageData<BaseMaterialInfoForm, BaseMaterialInfoQuery>>({
form: {...initFormData}, form: {...initFormData},

@ -142,7 +142,7 @@
</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 && partntTableSelectCell.instockType !== '6'">
打印 打印
</el-button> </el-button>
<el-button <el-button
@ -228,19 +228,6 @@
</el-row> </el-row>
<el-table :data="dialogtable" style="width: 100%"> <el-table :data="dialogtable" style="width: 100%">
<el-table-column label="字段1" prop="date" v-if="false"> <el-table-column label="字段1" prop="date" v-if="false">
<template #default="scope">
<el-select
v-model="scope.row.date"
placeholder="Select"
>
<el-option
v-for="i in material_mategoryId"
:label="i.materialName"
:value="i.materialId"
:key="i.materialId"
/>
</el-select>
</template>
</el-table-column> </el-table-column>
<el-table-column label="物料编码" prop="materialCode"> <el-table-column label="物料编码" prop="materialCode">
@ -306,10 +293,10 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物料规格" prop="materialSpec"> <el-table-column label="物料规格" prop="materialSpe">
<template #default="scope"> <template #default="scope">
<el-select <el-select
v-model="scope.row.materialSpec" v-model="scope.row.materialSpe"
placeholder="选择物料" placeholder="选择物料"
style="width: 240px" style="width: 240px"
:disabled="true" :disabled="true"
@ -357,22 +344,22 @@
<span v-else>{{ scope.row.instockQty }}</span> <span v-else>{{ scope.row.instockQty }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="有无条码" prop="codeYesNo"> <!-- <el-table-column label="有无条码" prop="codeYesNo">-->
<template #default="scope"> <!-- <template #default="scope">-->
<el-select <!-- <el-select-->
v-model="scope.row.codeYesNo" <!-- v-model="scope.row.codeYesNo"-->
placeholder="选择有无条码" <!-- placeholder="选择有无条码"-->
style="width: 240px" <!-- style="width: 240px"-->
> <!-- >-->
<el-option <!-- <el-option-->
v-for="i in wms_barcode_if" <!-- v-for="i in wms_barcode_if"-->
:label="i.label" <!-- :label="i.label"-->
:value="i.value" <!-- :value="i.value"-->
:key="i.value" <!-- :key="i.value"-->
/> <!-- />-->
</el-select> <!-- </el-select>-->
</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
@ -558,8 +545,51 @@
<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="splitPackageCount"> <el-form-item label="分包数量" prop="splitPackageCount">
<el-input-number v-model="childrenTableInfoForm.splitPackageCount" :min="1" :max="remainingQty" placeholder="请输入分包数量" /> <el-input-number v-model="childrenTableInfoForm.splitPackageCount" :min="1" :max="remainingQty" placeholder="请输入分包数量" @change="onSplitPackageCountChange" />
</el-form-item> </el-form-item>
<!-- 当分包数量大于1时显示分包模式选择和每包数量配置 -->
<el-form-item v-if="childrenTableInfoForm.splitPackageCount > 1" label="分包模式">
<el-radio-group v-model="packageMode" @change="onPackageModeChange">
<el-radio value="average">平均分包</el-radio>
<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">
<div class="package-preview-item" v-for="(qty, index) in averagePackageList" :key="index">
<span class="package-label">{{index + 1}}</span>
<span class="package-qty">{{qty}}</span>
</div>
<div class="total-qty-info">
<span>总计{{averageTotal}} / {{remainingQty}}</span>
</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="请输入数量"
@change="validateTotalQty"
size="small"
style="width: 120px;"
/>
</div>
<div class="total-qty-info">
<span :class="{'error-text': totalPackageQty > remainingQty}">总计{{totalPackageQty}} / {{remainingQty}}</span>
</div>
</div>
</el-form-item>
<el-form-item label="打印数量" prop="printCopies" v-if="childrenTableInfoForm.splitPackageCount === 1 || !childrenTableInfoForm.splitPackageCount"> <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-input-number v-model="childrenTableInfoForm.printCopies" :min="1" :max="20" placeholder="请输入打印条码数量" />
</el-form-item> </el-form-item>
@ -657,9 +687,27 @@ const childrenTableInfoVisible = ref(false)
const updateDialog = ref(false) const updateDialog = ref(false)
const dialogTitle = ref('添加') const dialogTitle = ref('添加')
const dialogForm = ref<InstockOrderForm>({ instockType: '', orderNo: '', materialCategoryId: '', warehouseId: '' }); const dialogForm = ref<InstockOrderForm>({ instockType: '', orderNo: '', materialCategoryId: '', warehouseId: '' });
const parentTableInfoForm = ref({}) const parentTableInfoForm = ref<any>({
const parentTableApproveForm = ref({}) materialCategoryId: '',
const childrenTableInfoForm = ref({}) instockType: '',
auditBy: '',
warehouseCode: ''
})
const parentTableApproveForm = ref<any>({
auditStatus: '',
auditComments: ''
})
const childrenTableInfoForm = ref<any>({
materialCode: '',
instockQty: 0,
codeYesNo: '',
printedNum: 0,
splitPackageCount: 1,
printCopies: 1,
packageQtyList: [] as number[],
packageMode: 'average',
batchCode: ''
})
const queryForm = ref({ const queryForm = ref({
@ -669,6 +717,7 @@ const queryForm = ref({
warehouseId: '', warehouseId: '',
instockType: '', instockType: '',
instockMethond: '', instockMethond: '',
auditStatus: '',
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
}) })
@ -697,7 +746,7 @@ const materialList = ref([]);
const parentTableLoad = ref(false) const parentTableLoad = ref(false)
const childrenTableLoad = ref(false) const childrenTableLoad = ref(false)
const isView = ref(false) const isView = ref(false)
const partntTableSelectCell = ref({}) const partntTableSelectCell = ref({ instockId: null })
const showSearch = ref(true) const showSearch = ref(true)
const columns = ref([]) const columns = ref([])
@ -729,19 +778,49 @@ const submitForm = async() => {
const copies = Number(childrenTableInfoForm.value.printCopies) || 1 const copies = Number(childrenTableInfoForm.value.printCopies) || 1
const remaining = remainingQty.value const remaining = remainingQty.value
if (split > remaining) {
ElMessage.error('分包数量不能超过剩余物料量')
return
}
if (split > 1) { if (split > 1) {
if (remaining % split !== 0) { //
ElMessage.error('剩余物料量无法平均分包,请调整分包数量') let finalPackageList = []
if (packageMode.value === 'average') {
// 使
finalPackageList = averagePackageList.value
const total = averageTotal.value
if (total > remaining) {
ElMessage.error('平均分包总计不能超过剩余物料量')
return
}
if (total <= 0) {
ElMessage.error('平均分包数量必须大于0')
return
}
} else {
// 使
finalPackageList = packageQtyList.value
const total = totalPackageQty.value
if (total > remaining) {
ElMessage.error('每包数量总计不能超过剩余物料量')
return
}
if (total <= 0) {
ElMessage.error('每包数量必须大于0')
return
}
//
if (packageQtyList.value.some(qty => !qty || qty <= 0)) {
ElMessage.error('每包数量必须大于0')
return
}
}
//
childrenTableInfoForm.value.packageQtyList = finalPackageList
childrenTableInfoForm.value.packageMode = packageMode.value //
} else {
//
if (split > remaining) {
ElMessage.error('分包数量不能超过剩余物料量')
return return
} }
// >1barcodeNum=11
childrenTableInfoForm.value.printCopies = 1
} else {
if (copies < 1) { if (copies < 1) {
ElMessage.error('重复打印数量至少为1') ElMessage.error('重复打印数量至少为1')
return return
@ -777,7 +856,7 @@ const generateBatchCode = (form) => {
}).join('') }).join('')
} }
//
let mategoryOptions = ref([]); let mategoryOptions = ref([]);
const getMaterialCategorySelect = async () => { const getMaterialCategorySelect = async () => {
const res = await getBaseMaterialCategoryListInWMS(null); const res = await getBaseMaterialCategoryListInWMS(null);
@ -844,9 +923,9 @@ const reset = () => {
instockCode: '', instockCode: '',
materialCategoryId: '', materialCategoryId: '',
materialCategoryName: '', materialCategoryName: '',
warehouseId: '',
instockType: '', instockType: '',
instockMethond: routeInstockMethondValue,// 使 instockMethond: routeInstockMethondValue,// 使
auditStatus: '',
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
} }
@ -875,8 +954,14 @@ const viewDetails = (e) => {
// //
const parentTableAdd = () => { const parentTableAdd = () => {
dialogVisible.value = true; dialogVisible.value = true;
dialogForm.value = { instockType: '', orderNo: '', materialCategoryId: '', warehouseId: '' }; // Add more if needed dialogForm.value = { instockType: '', orderNo: '', materialCategoryId: '', warehouseId: '' };
dialogtable.value = []; dialogtable.value = [];
//
setTimeout(() => {
if (dialogFormRef.value) {
dialogFormRef.value.clearValidate();
}
}, 100);
}; };
// //
@ -886,7 +971,7 @@ const parentTableApprove = async (e) => {
updateDialog.value = true updateDialog.value = true
} }
// //
const parentTableUpdate = async (e) => { const parentTableUpdate = async (e?: any) => {
let id = ref(null) let id = ref(null)
if (e) { if (e) {
id.value = e.instockId id.value = e.instockId
@ -899,7 +984,7 @@ const parentTableUpdate = async (e) => {
updateDialog.value = true updateDialog.value = true
} }
// //
const parentTableDelete = async (e) => { const parentTableDelete = async (e?: any) => {
const delList = ref([]) const delList = ref([])
if (e) { if (e) {
delList.value = [e.instockId] delList.value = [e.instockId]
@ -953,7 +1038,20 @@ const addDialogTableCell = () => {
} }
// //
const dialogSubmit = () => { const dialogSubmit = async () => {
//
if (!dialogFormRef.value) {
ElMessage.error('表单引用未找到');
return;
}
try {
await dialogFormRef.value.validate();
} catch (error) {
ElMessage.error('请填写完整的表单信息');
return;
}
console.log(dialogtable.value) console.log(dialogtable.value)
// //
const detailList = (dialogtable.value || []) const detailList = (dialogtable.value || [])
@ -1027,7 +1125,7 @@ const parentTableInfoSubmit = () =>{
const childrenTableUpdate = async (e) => { const childrenTableUpdate = async (e) => {
const detail = (await getInstockDetail(e.instockDetailId)).data const detail = (await getInstockDetail(e.instockDetailId)).data
const remaining = Number(detail.instockQty) - Number(detail.printedNum || 0) const remaining = Number(detail.instockQty) - Number(detail.printedNum || 0)
if(remaining <= 0){ if(remaining < 1){
ElMessage.error('无剩余数量可打印') ElMessage.error('无剩余数量可打印')
return return
} }
@ -1166,10 +1264,12 @@ const handleAssociatePurchaseOrder = async () => {
try { try {
// 使API // 使API
const res = await getWmsPurchaseOrderDetailWithStatistics({ poNo: order.poNo }); const res = await getWmsPurchaseOrderDetailWithStatistics({
poNo: order.poNo
});
dialogtable.value = res.data.map(item => ({ dialogtable.value = res.data.map(item => ({
poDId: item.poDId, // poDId: item.poDId, //
materialId: item.materialId, materialId: item.materialCode, //
materialCode: item.materialCode, materialCode: item.materialCode,
materialName: item.materialName, materialName: item.materialName,
materialSpe: item.materialSpe, materialSpe: item.materialSpe,
@ -1181,7 +1281,7 @@ const handleAssociatePurchaseOrder = async () => {
deliveryQty: item.deliveryQty, // deliveryQty: item.deliveryQty, //
_showQtyInput: true // _showQtyInput: true //
})); }));
ElMessage.success('关联采购订单成功,已加载物料列表及库存信息'); ElMessage.success('关联采购订单成功,已加载物料列表及库存信息');
} catch (error) { } catch (error) {
console.error('获取采购订单物料列表失败:', error); console.error('获取采购订单物料列表失败:', error);
@ -1222,7 +1322,7 @@ const validateQty = (row, val) => {
return; return;
} }
} }
// //
if (row.deliveryQty !== undefined && intVal > row.deliveryQty) { if (row.deliveryQty !== undefined && intVal > row.deliveryQty) {
row.instockQty = row.deliveryQty; row.instockQty = row.deliveryQty;
@ -1232,13 +1332,79 @@ const validateQty = (row, val) => {
} }
}; };
// computed
const remainingQty = computed(() => { const remainingQty = computed(() => {
const instock = Number(childrenTableInfoForm.value.instockQty) || 0 const instock = Number(childrenTableInfoForm.value.instockQty) || 0
const printed = Number(childrenTableInfoForm.value.printedNum) || 0 const printed = Number(childrenTableInfoForm.value.printedNum) || 0
return Math.max(0, instock - printed) // Math.max return Math.max(0, instock - printed) // Math.max
}) })
//
const packageQtyList = ref([])
const packageMode = ref('average') // 'average' 'custom'
const totalPackageQty = computed(() => {
return packageQtyList.value.reduce((sum, qty) => sum + (Number(qty) || 0), 0)
})
//
const averagePackageList = ref([])
const averageTotal = computed(() => {
return averagePackageList.value.reduce((sum, qty) => sum + (Number(qty) || 0), 0)
})
//
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 {
packageQtyList.value = []
averagePackageList.value = []
packageMode.value = 'average'
}
}
//
const calculateAveragePackage = (count) => {
const remaining = remainingQty.value
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)
}
}
}
//
const onPackageModeChange = (mode) => {
if (mode === 'custom') {
// 使
packageQtyList.value = [...averagePackageList.value]
}
//
}
//
const validateTotalQty = () => {
const total = totalPackageQty.value
const remaining = remainingQty.value
if (total > remaining) {
ElMessage.warning(`每包数量总计不能超过剩余数量 ${remaining}`)
}
}
const dialogFormRef = ref(); const dialogFormRef = ref();
const dialogFormRules = ref({ const dialogFormRules = ref({
warehouseId: [{ required: true, message: '请选择仓库', trigger: 'change' }], warehouseId: [{ required: true, message: '请选择仓库', trigger: 'change' }],
@ -1250,7 +1416,7 @@ const isAddDisabled = computed(() => {
}); });
</script> </script>
<style> <style scoped>
.demo-form-inline .el-input { .demo-form-inline .el-input {
--el-input-width: 220px; --el-input-width: 220px;
} }
@ -1258,4 +1424,69 @@ const isAddDisabled = computed(() => {
.demo-form-inline .el-select { .demo-form-inline .el-select {
--el-select-width: 220px; --el-select-width: 220px;
} }
.package-qty-container {
display: flex;
flex-direction: column;
gap: 8px;
max-height: 200px;
overflow-y: auto;
border: 1px solid #dcdfe6;
border-radius: 4px;
padding: 12px;
background-color: #fafafa;
}
.package-qty-item {
display: flex;
align-items: center;
gap: 10px;
}
.package-qty-item label {
min-width: 60px;
font-size: 14px;
color: #606266;
}
.package-preview-container {
display: flex;
flex-direction: column;
gap: 6px;
border: 1px solid #e4e7ed;
border-radius: 4px;
padding: 12px;
background-color: #f9f9f9;
}
.package-preview-item {
display: flex;
align-items: center;
gap: 8px;
padding: 4px 0;
}
.package-label {
min-width: 60px;
font-size: 14px;
color: #606266;
font-weight: 500;
}
.package-qty {
font-size: 14px;
color: #409EFF;
font-weight: bold;
}
.total-qty-info {
padding-top: 8px;
border-top: 1px solid #e4e7ed;
font-weight: bold;
text-align: right;
}
.error-text {
color: #f56c6c;
}
</style> </style>

@ -100,12 +100,12 @@
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="特殊标识" align="center" prop="specialType" v-if="columns[15].visible"> <el-table-column label="入库类型" align="center" prop="specialType" v-if="columns[15].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="wms_special_type" :value="scope.row.specialType"/> <dict-tag :options="wms_special_type" :value="scope.row.specialType"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['wms:instockRecord:edit']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['wms:instockRecord:edit']"></el-button>
@ -114,11 +114,12 @@
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:instockRecord:remove']"></el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:instockRecord:remove']"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column> -->
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改入库记录对话框 --> <!-- 添加或修改入库记录对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="instockRecordFormRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="instockRecordFormRef" :model="form" :rules="rules" label-width="80px">

@ -287,10 +287,10 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物料规格" prop="materialSpec"> <el-table-column label="物料规格" prop="materialSpe">
<template #default="scope"> <template #default="scope">
<el-select <el-select
v-model="scope.row.materialSpec" v-model="scope.row.materialSpe"
placeholder="选择物料" placeholder="选择物料"
style="width: 240px" style="width: 240px"
:disabled="true" :disabled="true"

@ -61,7 +61,7 @@
@current-change="parentTableCellClick" @current-change="parentTableCellClick"
@selection-change="selectionChange" ref="parentTableRef"> @selection-change="selectionChange" ref="parentTableRef">
<el-table-column type="selection" width="55"/> <el-table-column type="selection" width="55"/>
<el-table-column type="selection" width="55" align="center"/>
<el-table-column label="订单编号" align="center" prop="poNo"/> <el-table-column label="订单编号" align="center" prop="poNo"/>
<!-- <el-table-column label="订单状态" align="center" prop="poStatus">--> <!-- <el-table-column label="订单状态" align="center" prop="poStatus">-->
<!-- <template #default="scope">--> <!-- <template #default="scope">-->
@ -342,11 +342,11 @@
<el-input v-model="scope.row.purchaseQty" placeholder="请输入采购数量" style="width: 240px"/> <el-input v-model="scope.row.purchaseQty" placeholder="请输入采购数量" style="width: 240px"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="送货数量" prop="deliveryQty"> <!-- <el-table-column label="送货数量" prop="deliveryQty">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.deliveryQty" placeholder="请输入送货数量" style="width: 240px"/> <el-input v-model="scope.row.deliveryQty" placeholder="请输入送货数量" style="width: 240px"/>
</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

Loading…
Cancel
Save