From f3f9531d797c3331ca366e0b7a5d9c6e93c10a8c Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期五, 27 三月 2026 11:17:06 +0800
Subject: [PATCH] fix(产品结构): 修复单位产出数量精度并优化显示逻辑
---
src/views/productionManagement/productStructure/Detail/index.vue | 32 ++++++++++++---
src/views/productionManagement/productStructure/StructureEdit.vue | 30 ++++++++++++---
2 files changed, 49 insertions(+), 13 deletions(-)
diff --git a/src/views/productionManagement/productStructure/Detail/index.vue b/src/views/productionManagement/productStructure/Detail/index.vue
index 1452d1e..a3e6175 100644
--- a/src/views/productionManagement/productStructure/Detail/index.vue
+++ b/src/views/productionManagement/productStructure/Detail/index.vue
@@ -101,13 +101,15 @@
<el-form-item :prop="`dataList.${$index}.unitQuantity`"
:rules="[{ required: true, message: '璇疯緭鍏ュ崟浣嶄骇鍑烘墍闇�鏁伴噺', trigger: ['blur','change'] }]"
style="margin: 0">
- <el-input-number v-model="row.unitQuantity"
+ <el-input-number v-if="dataValue.isEdit"
+ v-model="row.unitQuantity"
:min="0"
- :precision="2"
+ :precision="3"
:step="1"
controls-position="right"
style="width: 100%"
:disabled="!dataValue.isEdit" />
+ <span v-else>{{ formatDecimalValue(row.unitQuantity) }}</span>
</el-form-item>
</template>
</el-table-column>
@@ -232,15 +234,31 @@
dataValue.showProductDialog = true;
};
+const formatDecimalValue = (
+ value: number | string | null | undefined
+) => {
+ const numericValue = Number(value);
+ if (Number.isNaN(numericValue)) {
+ return value;
+ }
+ return Number(numericValue.toFixed(3));
+};
+
+const normalizeProductStructureList = (list: any[] = []) =>
+ list.map((item: any) => ({
+ ...item,
+ unitQuantity: formatDecimalValue(item.unitQuantity ?? 0),
+ }));
+
const fetchData = async () => {
if (isOrderPage.value) {
// 璁㈠崟鎯呭喌锛氫娇鐢ㄨ鍗曠殑浜у搧缁撴瀯鎺ュ彛
const { data } = await listProcessBom({ orderId: routeOrderId.value });
- dataValue.dataList = data || [];
+ dataValue.dataList = normalizeProductStructureList(data) as typeof dataValue.dataList;
} else {
// 闈炶鍗曟儏鍐碉細浣跨敤鍘熸潵鐨勬帴鍙�
const { data } = await queryList(routeId.value);
- dataValue.dataList = data || [];
+ dataValue.dataList = normalizeProductStructureList(data) as typeof dataValue.dataList;
}
};
@@ -268,8 +286,8 @@
if (valid) {
add({
bomId: routeId.value,
- productStructureList: dataValue.dataList || [],
- }).then(res => {
+ productStructureList: normalizeProductStructureList(dataValue.dataList as any[]),
+ }).then(() => {
router.push({
path: '/productionManagement/productionManagement/productStructure/index',
})
@@ -316,4 +334,4 @@
fetchData();
fetchProcessOptions();
});
-</script>
\ No newline at end of file
+</script>
diff --git a/src/views/productionManagement/productStructure/StructureEdit.vue b/src/views/productionManagement/productStructure/StructureEdit.vue
index 4d07f5d..68d49fc 100644
--- a/src/views/productionManagement/productStructure/StructureEdit.vue
+++ b/src/views/productionManagement/productStructure/StructureEdit.vue
@@ -84,13 +84,15 @@
<el-form-item :prop="`dataList.${$index}.unitQuantity`"
:rules="[{ required: true, message: '璇疯緭鍏ュ崟浣嶄骇鍑烘墍闇�鏁伴噺', trigger: ['blur','change'] }]"
style="margin: 0">
- <el-input-number v-model="row.unitQuantity"
+ <el-input-number v-if="dataValue.isEdit"
+ v-model="row.unitQuantity"
:min="0"
- :precision="2"
+ :precision="3"
:step="1"
controls-position="right"
style="width: 100%"
:disabled="!dataValue.isEdit" />
+ <span v-else>{{ formatDecimalValue(row.unitQuantity) }}</span>
</el-form-item>
</template>
</el-table-column>
@@ -244,9 +246,25 @@
dataValue.showProductDialog = true;
};
+ const formatDecimalValue = (
+ value: number | string | null | undefined
+ ) => {
+ const numericValue = Number(value);
+ if (Number.isNaN(numericValue)) {
+ return value;
+ }
+ return Number(numericValue.toFixed(3));
+ };
+
+ const normalizeProductStructureList = (list: any[] = []) =>
+ list.map((item: any) => ({
+ ...item,
+ unitQuantity: formatDecimalValue(item.unitQuantity ?? 0),
+ }));
+
const fetchData = async () => {
const { data } = await queryList(props.record.id);
- dataValue.dataList = data;
+ dataValue.dataList = normalizeProductStructureList(data) as typeof dataValue.dataList;
};
const fetchProcessOptions = async () => {
@@ -272,8 +290,8 @@
if (valid) {
add({
parentId: props.record.id,
- productStructureList: dataValue.dataList || [],
- }).then(res => {
+ productStructureList: normalizeProductStructureList(dataValue.dataList as any[]),
+ }).then(() => {
ElMessage.success("淇濆瓨鎴愬姛");
visible.value = false;
dataValue.loading = false;
@@ -308,4 +326,4 @@
fetchData();
fetchProcessOptions();
});
-</script>
\ No newline at end of file
+</script>
--
Gitblit v1.9.3