buhuazhen
6 天以前 f3f9531d797c3331ca366e0b7a5d9c6e93c10a8c
fix(产品结构): 修复单位产出数量精度并优化显示逻辑

将单位产出数量精度从2位改为3位,并在非编辑模式下使用格式化显示
新增数值格式化函数和列表标准化函数,确保数据一致性
已修改2个文件
62 ■■■■ 文件已修改
src/views/productionManagement/productStructure/Detail/index.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productStructure/StructureEdit.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
</script>
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>
</script>