From 5e18ecc3723502b0071ae2c96d7fadee93405356 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期三, 10 六月 2026 20:55:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro_河南鹤壁' into dev_pro_河南鹤壁
---
src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue | 36 +++++++++---
src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue | 75 ++++++++++++++++---------
src/views/productionManagement/productionOrder/components/MaterialSupplementDialog.vue | 32 ++++++++--
3 files changed, 100 insertions(+), 43 deletions(-)
diff --git a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue b/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
index 370815e..3373374 100644
--- a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
+++ b/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 },
diff --git a/src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue b/src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue
index 09e7421..6c175f9 100644
--- a/src/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue
+++ b/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,26 +189,36 @@
const currentMaterialSelectRowIndex = ref(-1);
let materialTempId = 0;
- const createMaterialRow = (row = {}) => ({
- tempId: row.id || `temp_${++materialTempId}`,
- id: row.id,
- processId: row.processId || row.technologyOperationId,
- technologyOperationId: row.technologyOperationId || row.processId,
- operationName: row.operationName || "",
- bom: row.bom === true,
- materialModelId: row.materialModelId || row.productModelId,
- materialName: row.materialName || row.productName || "",
- 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
+ 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
- : [],
- batchNoList: row.batchNoList || [],
- });
+ : getDefaultBatchNo(batchNoList);
+
+ return {
+ tempId: row.id || `temp_${++materialTempId}`,
+ id: row.id,
+ processId: row.processId || row.technologyOperationId,
+ technologyOperationId: row.technologyOperationId || row.processId,
+ operationName: row.operationName || "",
+ bom: row.bom === true,
+ materialModelId: row.materialModelId || row.productModelId,
+ materialName: row.materialName || row.productName || "",
+ materialModel: row.materialModel || row.model || "",
+ demandedQuantity: Number(row.requiredQty ?? row.demandedQuantity ?? 0),
+ unit: row.unit || "",
+ 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;
};
diff --git a/src/views/productionManagement/productionOrder/components/MaterialSupplementDialog.vue b/src/views/productionManagement/productionOrder/components/MaterialSupplementDialog.vue
index 4f052ed..7ff1eb1 100644
--- a/src/views/productionManagement/productionOrder/components/MaterialSupplementDialog.vue
+++ b/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 },
--
Gitblit v1.9.3