src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
@@ -21,28 +21,34 @@ prop="batchNo" min-width="150" /> <el-table-column label="需求数量" prop="demandedQuantity" min-width="110" /> min-width="110"> <template #default="{ row }"> {{ stripTrailingZeros(row.demandedQuantity) }} </template> </el-table-column> <el-table-column label="计量单位" prop="unit" width="100" /> <el-table-column label="领用数量" prop="pickQuantity" min-width="110" /> min-width="110"> <template #default="{ row }"> {{ stripTrailingZeros(row.pickQuantity) }} </template> </el-table-column> <el-table-column label="补料数量" min-width="120"> <template #default="{ row }"> <el-button type="primary" link @click="handleViewSupplementRecord(row)"> {{ row.feedingQty ?? 0 }} {{ stripTrailingZeros(row.feedingQty) ?? 0 }} </el-button> </template> </el-table-column> <el-table-column label="退料数量" min-width="110"> <template #default="{ row }"> {{ row.returnQty ?? 0 }} {{ stripTrailingZeros(row.returnQty) ?? 0 }} </template> </el-table-column> <el-table-column label="实际数量" @@ -50,10 +56,11 @@ <template #default="{ row }"> <el-input-number v-model="row.actualQty" :min="0" :precision="3" :step="1" controls-position="right" placeholder="输入实际数量" :formatter="value => stripTrailingZeros(value)" :parser="value => parseFloat(value) || 0" style="width: 100%;" :disabled="row.returned || orderRow?.end" @change="val => handleActualQtyChange(row, val)" /> @@ -115,8 +122,11 @@ prop="unit" min-width="100" /> <el-table-column label="退料汇总数量" prop="returnQtyTotal" min-width="140" /> min-width="140"> <template #default="{ row }"> {{ stripTrailingZeros(row.returnQtyTotal) }} </template> </el-table-column> </el-table> <template #footer> <span class="dialog-footer"> @@ -139,6 +149,14 @@ updateMaterialPickingLedger, } from "@/api/productionManagement/productionOrder.js"; const stripTrailingZeros = val => { const str = String(val ?? ""); if (str.includes(".")) { return parseFloat(str).toString(); } return str; }; const props = defineProps({ modelValue: { type: Boolean, default: false }, orderRow: { type: Object, default: null }, src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue
@@ -2,7 +2,7 @@ <div> <el-dialog v-model="dialogVisible" title="领料台账" width="1200px" width="1350px" @close="handleClose"> <div class="material-toolbar"> <el-button type="primary" @@ -13,7 +13,7 @@ border row-key="tempId"> <el-table-column label="工序名称" min-width="140"> min-width="80"> <template #default="{ row }"> <span v-if="row.bom === true">{{ row.operationName || "-" }}</span> <el-select v-else @@ -31,7 +31,7 @@ </template> </el-table-column> <el-table-column label="原料名称" min-width="140"> min-width="120"> <template #default="{ row }"> <span v-if="row.bom === true">{{ row.materialName || "-" }}</span> <el-button v-else @@ -43,7 +43,7 @@ </template> </el-table-column> <el-table-column label="原料型号" min-width="140"> min-width="120"> <template #default="{ row }"> {{ row.materialModel || "-" }} </template> @@ -66,21 +66,22 @@ </template> </el-table-column> <el-table-column label="需求数量" min-width="120"> min-width="100"> <template #default="{ row }"> <span v-if="row.bom === true">{{ row.demandedQuantity ?? "-" }}</span> <span v-if="row.bom === true">{{ stripTrailingZeros(row.demandedQuantity) ?? "-" }}</span> <el-input-number v-else v-model="row.demandedQuantity" :min="0" :precision="3" :step="1" controls-position="right" :formatter="value => stripTrailingZeros(value)" :parser="value => parseFloat(value) || 0" style="width: 100%;" @change="val => handleRequiredQtyChange(row, val)" /> </template> </el-table-column> <el-table-column label="计量单位" width="100"> width="80"> <template #default="{ row }"> {{ row.unit || "-" }} </template> @@ -90,9 +91,10 @@ <template #default="{ row }"> <el-input-number v-model="row.pickQty" :min="0" :precision="3" :step="1" controls-position="right" :formatter="value => stripTrailingZeros(value)" :parser="value => parseFloat(value) || 0" style="width: 100%;" /> </template> </el-table-column> @@ -187,7 +189,20 @@ const currentMaterialSelectRowIndex = ref(-1); let materialTempId = 0; const createMaterialRow = (row = {}) => ({ const getDefaultBatchNo = batchNoList => { if (!Array.isArray(batchNoList) || batchNoList.length === 0) return []; return [batchNoList[0]]; }; const createMaterialRow = (row = {}) => { const batchNoList = Array.isArray(row.batchNoList) ? row.batchNoList : []; const batchNo = row.batchNo ? typeof row.batchNo === "string" ? row.batchNo.split(",") : row.batchNo : getDefaultBatchNo(batchNoList); return { tempId: row.id || `temp_${++materialTempId}`, id: row.id, processId: row.processId || row.technologyOperationId, @@ -199,14 +214,11 @@ materialModel: row.materialModel || row.model || "", demandedQuantity: Number(row.requiredQty ?? row.demandedQuantity ?? 0), unit: row.unit || "", pickQty: Number(row.pickQty ?? row.pickQuantity ?? 0), batchNo: row.batchNo ? typeof row.batchNo === "string" ? row.batchNo.split(",") : row.batchNo : [], batchNoList: row.batchNoList || [], }); pickQty: Number(row.pickQty ?? row.pickQuantity ?? row.requiredQty ?? row.demandedQuantity ?? 0), batchNo, batchNoList, }; }; const getProcessOptions = async () => { if (!props.orderRow?.id) return; @@ -270,6 +282,14 @@ } ); const stripTrailingZeros = val => { const str = String(val); if (str.includes(".")) { return parseFloat(str).toString(); } return str; }; const handleClose = () => { materialTableData.value = []; currentMaterialSelectRowIndex.value = -1; @@ -319,7 +339,8 @@ product.materialName || product.productName || product.name || ""; row.materialModel = product.materialModel || product.model || ""; row.unit = product.unit || product.measureUnit || ""; row.batchNoList = product.batchNoList; row.batchNoList = Array.isArray(product.batchNoList) ? product.batchNoList : []; row.batchNo = getDefaultBatchNo(row.batchNoList); currentMaterialSelectRowIndex.value = -1; materialProductDialogVisible.value = false; }; src/views/productionManagement/productionOrder/components/MaterialSupplementDialog.vue
@@ -20,23 +20,33 @@ prop="unit" width="100" /> <el-table-column label="需求数量" prop="demandedQuantity" width="100" /> min-width="100"> <template #default="{ row }"> {{ stripTrailingZeros(row.demandedQuantity) }} </template> </el-table-column> <el-table-column label="领用数量" prop="pickQuantity" width="100" /> min-width="100"> <template #default="{ row }"> {{ stripTrailingZeros(row.pickQuantity) }} </template> </el-table-column> <el-table-column label="已补数量" prop="feedingQty" width="100" /> min-width="100"> <template #default="{ row }"> {{ stripTrailingZeros(row.feedingQty) }} </template> </el-table-column> <el-table-column label="补料数量" min-width="150"> <template #default="{ row }"> <el-input-number v-model="row.newSupplementQty" :min="0" :precision="3" :step="1" controls-position="right" placeholder="输入补料数量" :formatter="value => stripTrailingZeros(value)" :parser="value => parseFloat(value) || 0" style="width: 100%;" /> </template> </el-table-column> @@ -69,6 +79,14 @@ updateMaterialPickingLedger, } from "@/api/productionManagement/productionOrder.js"; const stripTrailingZeros = val => { const str = String(val ?? ""); if (str.includes(".")) { return parseFloat(str).toString(); } return str; }; const props = defineProps({ modelValue: { type: Boolean, default: false }, orderRow: { type: Object, default: null },