张诺
12 小时以前 41a639a4a4b6fbf35db7903b5ee3c068c8644430
feat: 统一数值精度为三位小数并添加保养项目字段

- 将多个模块中的数值显示精度从两位小数改为三位小数,包括金额、百分比、数量等
- 在设备保养模块中新增保养项目字段,包括表单输入和表格展示
- 修复采购台账税率默认值和路由跳转路径问题
- 调整发票录入和销售台账的税率选项,增加0%选项
已修改35个文件
299 ■■■■■ 文件已修改
src/views/equipmentManagement/upkeep/Form/PlanModal.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Form/formDia.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/index.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financialManagement/accounting/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/vehicleFuelManagement/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/components/ExpandTable.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/components/Modal.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/paymentEntry/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/paymentHistory/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/paymentLedger/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/priceManagement/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/index.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementLedger/index.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementReport/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/purchaseOrder/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/purchaseReturnOrder/New.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/purchaseReturnOrder/ProductList.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionReporting/components/formDia.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/safetyMonitoring/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/projectManagement/Management/components/formDia.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/PSIDataAnalysis/components/center-top.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/financialAnalysis/components/center-top.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/productionAnalysis/components/center-top.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/qualityAnalysis/components/center-top.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/qualityAnalysis/components/right-top.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/safeProduction/safetyTrainingAssessment/detail.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceLedger/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceRegistration/index.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPayment/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPaymentLedger/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesLedger/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesQuotation/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/upkeep/Form/PlanModal.vue
@@ -67,6 +67,14 @@
          clearable
        />
      </el-form-item>
      <el-form-item label="保养项目">
        <el-input
          style="width: 100%"
          v-model="form.maintenanceItem"
          placeholder="请输入保养项目"
          clearable
        />
      </el-form-item>
    </el-form>
  </FormDialog>
</template>
src/views/equipmentManagement/upkeep/Form/formDia.vue
@@ -82,6 +82,11 @@
                                                        value-format="HH:mm" />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="保养项目" prop="maintenanceItem">
                        <el-input v-model="form.maintenanceItem" placeholder="请输入保养项目" />
                    </el-form-item>
                </el-col>
                <el-col :span="12" v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
                    <el-form-item label="日期" prop="frequencyDetail">
                        <el-select v-model="form.week" placeholder="请选择" clearable style="width: 50%">
src/views/equipmentManagement/upkeep/index.vue
@@ -316,6 +316,11 @@
            QUARTERLY: "季度"
        }[cell] || "")
    },
  {
    prop: "maintenanceItem",
    label: "保养项目",
    minWidth: 150,
  },
    {
        prop: "frequencyDetail",
        label: "开始日期与时间",
@@ -372,6 +377,11 @@
        align: "center",
        prop: "createUserName",
    },
    {
        label: "保养项目",
        align: "center",
        prop: "maintenanceItem",
    },
    // {
    //   label: "录入日期",
    //   align: "center",
src/views/financialManagement/accounting/index.vue
@@ -479,8 +479,8 @@
// 格式化货币
const formatCurrency = (value) => {
  if (!value) return '0.00';
  return Number(value).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  if (!value) return '0.000';
  return Number(value).toFixed(3).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
};
// 获取状态标签类型
src/views/inventoryManagement/vehicleFuelManagement/index.vue
@@ -79,7 +79,7 @@
          align="right"
        >
          <template #default="scope">
            <span>{{ scope.row.amount?.toFixed(2) }}</span>
            <span>{{ scope.row.amount?.toFixed(3) }}</span>
          </template>
        </el-table-column>
        <el-table-column
@@ -89,7 +89,7 @@
          align="right"
        >
          <template #default="scope">
            <span>{{ scope.row.liters?.toFixed(2) }}</span>
            <span>{{ scope.row.liters?.toFixed(3) }}</span>
          </template>
        </el-table-column>
        <el-table-column
@@ -120,7 +120,7 @@
            <span
              :style="scope.row.isAbnormal ? 'color:#F56C6C;font-weight:600;' : ''"
            >
              {{ scope.row.fuelConsumption != null ? scope.row.fuelConsumption.toFixed(2) : '-' }}
              {{ scope.row.fuelConsumption != null ? scope.row.fuelConsumption.toFixed(3) : '-' }}
            </span>
          </template>
        </el-table-column>
@@ -132,7 +132,7 @@
        >
          <template #default="scope">
            <span>
              {{ scope.row.avgConsumption != null ? scope.row.avgConsumption.toFixed(2) : '-' }}
              {{ scope.row.avgConsumption != null ? scope.row.avgConsumption.toFixed(3) : '-' }}
            </span>
          </template>
        </el-table-column>
src/views/procurementManagement/invoiceEntry/components/ExpandTable.vue
@@ -62,7 +62,7 @@
      prop: "taxInclusiveUnitPrice",
            width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : "-";
        return val ? parseFloat(val).toFixed(3) : "-";
      },
    },
    {
@@ -70,7 +70,7 @@
      prop: "taxInclusiveTotalPrice",
            width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : "-";
        return val ? parseFloat(val).toFixed(3) : "-";
      },
    },
    {
@@ -78,7 +78,7 @@
      prop: "taxExclusiveTotalPrice",
            width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : "-";
        return val ? parseFloat(val).toFixed(3) : "-";
      },
    },
    {
@@ -86,7 +86,7 @@
      prop: "ticketsAmount",
            width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : "-";
        return val ? parseFloat(val).toFixed(3) : "-";
      },
    },
    {
@@ -98,7 +98,7 @@
      prop: "futureTicketsAmount",
            width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : "-";
        return val ? parseFloat(val).toFixed(3) : "-";
      },
    },
  ],
src/views/procurementManagement/invoiceEntry/components/Modal.vue
@@ -293,7 +293,7 @@
        prop: "taxInclusiveUnitPrice",
        width: 150,
        formatData: (val) => {
            return val ? parseFloat(val).toFixed(2) : 0;
            return val ? parseFloat(val).toFixed(3) : 0;
        },
    },
    {
@@ -301,7 +301,7 @@
        prop: "taxInclusiveTotalPrice",
        width: 150,
        formatData: (val) => {
            return parseFloat(val).toFixed(2) ?? 0;
            return parseFloat(val).toFixed(3) ?? 0;
        },
    },
    {
@@ -309,7 +309,7 @@
        prop: "taxExclusiveTotalPrice",
        width: 150,
        formatData: (val) => {
            return parseFloat(val).toFixed(2) ?? 0;
            return parseFloat(val).toFixed(3) ?? 0;
        },
    },
    {
@@ -341,10 +341,10 @@
];
const formattedNumber = (row, column, cellValue) => {
    if (cellValue == 0) {
        return parseFloat(cellValue).toFixed(2);
        return parseFloat(cellValue).toFixed(3);
    }
    if (cellValue) {
        return parseFloat(cellValue).toFixed(2);
        return parseFloat(cellValue).toFixed(3);
    } else {
        return cellValue;
    }
@@ -431,10 +431,10 @@
                    item.ticketsNum = Number(item.tempFutureTickets || 0);
                    // 联动计算本次开票金额、未来票数、未来票金额
                    const unitPrice = Number(item.taxInclusiveUnitPrice || 0);
                    item.ticketsAmount = Number((item.ticketsNum * unitPrice).toFixed(2));
                    item.futureTickets = Number((item.tempFutureTickets - item.ticketsNum).toFixed(2));
                    item.ticketsAmount = Number((item.ticketsNum * unitPrice).toFixed(3));
                    item.futureTickets = Number((item.tempFutureTickets - item.ticketsNum).toFixed(3));
                    item.futureTicketsAmount = Number(
                        (item.tempFutureTicketsAmount - item.ticketsAmount).toFixed(2)
                        (item.tempFutureTicketsAmount - item.ticketsAmount).toFixed(3)
                    );
                }
            });
@@ -445,7 +445,7 @@
            const totalAmount = allProductData.reduce((sum, item) => {
                return sum + (Number(item.ticketsAmount) || 0);
            }, 0);
            form.invoiceAmount = Number(totalAmount.toFixed(2));
            form.invoiceAmount = Number(totalAmount.toFixed(3));
            
            // 存储选中的合同数据
            selectedContracts.value = selectedRows;
@@ -516,11 +516,11 @@
        row.ticketsNum = Number(row.tempFutureTickets || 0);
    }
    // 计算本次来票金额
    row.ticketsAmount = Number((Number(row.ticketsNum) * Number(row.taxInclusiveUnitPrice || 0)).toFixed(2));
    row.ticketsAmount = Number((Number(row.ticketsNum) * Number(row.taxInclusiveUnitPrice || 0)).toFixed(3));
    // 计算未来票数
    row.futureTickets = Number((Number(row.tempFutureTickets || 0) - Number(row.ticketsNum || 0)).toFixed(2));
    row.futureTickets = Number((Number(row.tempFutureTickets || 0) - Number(row.ticketsNum || 0)).toFixed(3));
    // 计算未来票金额
    row.futureTicketsAmount = Number((Number(row.tempFutureTicketsAmount || 0) - Number(row.ticketsAmount || 0)).toFixed(2));
    row.futureTicketsAmount = Number((Number(row.tempFutureTicketsAmount || 0) - Number(row.ticketsAmount || 0)).toFixed(3));
    calculateinvoiceAmount();
};
@@ -536,19 +536,19 @@
    }
    // 计算本次来票数
    row.ticketsNum = Number(
        (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2)
        (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(3)
    );
    // 检查本次开票数是否大于未来票数
    if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) {
        proxy.$modal.msgWarning("本次开票数不能大于未来票数");
        row.ticketsNum = Number(row.tempFutureTickets || 0);
        // 重新计算本次来票金额
        row.ticketsAmount = Number((Number(row.ticketsNum) * Number(row.taxInclusiveUnitPrice || 0)).toFixed(2));
        row.ticketsAmount = Number((Number(row.ticketsNum) * Number(row.taxInclusiveUnitPrice || 0)).toFixed(3));
    }
    // 计算未来票数
    row.futureTickets = Number((Number(row.tempFutureTickets || 0) - Number(row.ticketsNum || 0)).toFixed(2));
    row.futureTickets = Number((Number(row.tempFutureTickets || 0) - Number(row.ticketsNum || 0)).toFixed(3));
    // 计算未来票金额
    row.futureTicketsAmount = Number((Number(row.tempFutureTicketsAmount || 0) - Number(row.ticketsAmount || 0)).toFixed(2));
    row.futureTicketsAmount = Number((Number(row.tempFutureTicketsAmount || 0) - Number(row.ticketsAmount || 0)).toFixed(3));
    calculateinvoiceAmount();
};
@@ -559,7 +559,7 @@
            invoiceAmountTotal += Number(item.ticketsAmount);
        }
    });
    form.invoiceAmount = Number(invoiceAmountTotal.toFixed(2));
    form.invoiceAmount = Number(invoiceAmountTotal.toFixed(3));
};
// 判断产品是否可以继续来票操作:如果未来票数和未来票金额都为0或小于等于0,则禁用
src/views/procurementManagement/invoiceEntry/index.vue
@@ -150,7 +150,7 @@
      prop: "contractAmount",
      width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : 0;
        return val ? parseFloat(val).toFixed(3) : 0;
      },
    },
    {
@@ -158,7 +158,7 @@
      prop: "receiptPaymentAmount",
      width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : 0;
        return val ? parseFloat(val).toFixed(3) : 0;
      },
    },
    {
@@ -166,7 +166,7 @@
      prop: "unReceiptPaymentAmount",
      width:200,
      formatData: (val) => {
        return val ? parseFloat(val).toFixed(2) : 0;
        return val ? parseFloat(val).toFixed(3) : 0;
      },
    },
    {
src/views/procurementManagement/paymentEntry/index.vue
@@ -292,14 +292,14 @@
    label: "已付款金额(元)",
    prop: "ticketsTotal",
    formatData: (params) => {
      return params ? parseFloat(params).toFixed(2) : 0;
      return params ? parseFloat(params).toFixed(3) : 0;
    },
  },
  {
    label: "待付款金额(元)",
    prop: "pendingTicketsTotal",
    formatData: (params) => {
      return params ? parseFloat(params).toFixed(2) : 0;
      return params ? parseFloat(params).toFixed(3) : 0;
    },
  },
]);
@@ -362,7 +362,7 @@
const formattedNumber = (row, column, cellValue) => {
  const val = Number(cellValue ?? 0);
  return Number.isFinite(val) ? val.toFixed(2) : "0.00";
  return Number.isFinite(val) ? val.toFixed(3) : "0.00";
};
// 子表合计方法
const summarizeMainTable1 = (param) => {
@@ -370,6 +370,8 @@
    param,
    ["ticketsTotal", "pendingTicketsTotal"],
    {
      ticketsTotal: { decimalPlaces: 3 },
      pendingTicketsTotal: { decimalPlaces: 3 },
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
    }
@@ -378,6 +380,7 @@
// 子表合计方法
const summarizeMainTable2 = (param) => {
    return proxy.summarizeTable(param, ["currentPaymentAmount"], {
    currentPaymentAmount: { decimalPlaces: 3 },
        ticketsNum: { noDecimal: true }, // 不保留小数
        futureTickets: { noDecimal: true }, // 不保留小数
    });
src/views/procurementManagement/paymentHistory/index.vue
@@ -110,7 +110,7 @@
    label: "付款金额",
    prop: "currentPaymentAmount",
    formatData: (params) => {
      return params ? parseFloat(params).toFixed(2) : 0;
      return params ? parseFloat(params).toFixed(3) : 0;
    },
  },
  {
src/views/procurementManagement/paymentLedger/index.vue
@@ -91,7 +91,7 @@
          >
            <template #payableAmountSlot="{ row }">
              <el-text type="danger">
                {{ parseFloat(row.payableAmount).toFixed(2) }}
                {{ parseFloat(row.payableAmount).toFixed(3) }}
              </el-text>
            </template>
          </PIMTable>
@@ -151,7 +151,7 @@
    prop: "invoiceAmount",
        width: 200,
    formatData: (params) => {
      return params ? parseFloat(params).toFixed(2) : 0;
      return params ? parseFloat(params).toFixed(3) : 0;
    },
  },
  {
@@ -159,7 +159,7 @@
    prop: "paymentAmount",
        width: 200,
    formatData: (params) => {
      return params ? parseFloat(params).toFixed(2) : 0;
      return params ? parseFloat(params).toFixed(3) : 0;
    },
  },
  {
@@ -184,6 +184,9 @@
    param,
    ["invoiceAmount", "paymentAmount", "payableAmount"],
    {
      invoiceAmount: { decimalPlaces: 3 },
      paymentAmount: { decimalPlaces: 3 },
      payableAmount: { decimalPlaces: 3 },
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
    }
@@ -195,6 +198,8 @@
    param,
    ["invoiceAmount", "paymentAmount"],
    {
      invoiceAmount: { decimalPlaces: 3 },
      paymentAmount: { decimalPlaces: 3 },
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
    }
@@ -203,9 +208,9 @@
    summarizeTable[summarizeTable.length - 1] =
      originalTableDataSon.value[
        originalTableDataSon.value.length - 1
      ].payableAmount.toFixed(2);
      ].payableAmount.toFixed(3);
  } else {
    summarizeTable[summarizeTable.length - 1] = 0.0;
    summarizeTable[summarizeTable.length - 1] = "0.000";
  }
  return summarizeTable;
};
@@ -265,7 +270,7 @@
};
const formattedNumber = (row, column, cellValue) => {
  if (column.property !== "supplierName") {
    return parseFloat(cellValue).toFixed(2);
    return parseFloat(cellValue).toFixed(3);
  } else {
    return cellValue;
  }
src/views/procurementManagement/priceManagement/index.vue
@@ -34,15 +34,15 @@
        <el-table-column label="规格型号" prop="specification" />
        <el-table-column label="供应商名称" prop="supplierName" />
        <el-table-column label="原价格" prop="oldPrice" width="120">
          <template #default="{ row }">¥{{ row.oldPrice.toFixed(2) }}</template>
          <template #default="{ row }">¥{{ row.oldPrice.toFixed(3) }}</template>
        </el-table-column>
        <el-table-column label="新价格" prop="newPrice" width="120">
          <template #default="{ row }">¥{{ row.newPrice.toFixed(2) }}</template>
          <template #default="{ row }">¥{{ row.newPrice.toFixed(3) }}</template>
        </el-table-column>
        <el-table-column label="调价幅度" prop="priceChange" width="120">
          <template #default="{ row }">
            <span :style="{ color: row.priceChange >= 0 ? '#f56c6c' : '#67c23a' }">
              {{ row.priceChange >= 0 ? '+' : '' }}{{ row.priceChange.toFixed(2) }}%
              {{ row.priceChange >= 0 ? '+' : '' }}{{ row.priceChange.toFixed(3) }}%
            </span>
          </template>
        </el-table-column>
src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue
@@ -129,7 +129,7 @@
    form.createdAt = data.createdAt;
    form.invoiceNumber = data.invoiceNumber;
    form.ticketsNum = data.ticketsNum;
    form.ticketsAmount = data.ticketsAmount.toFixed(2);
    form.ticketsAmount = data.ticketsAmount.toFixed(3);
    form.taxInclusiveUnitPrice = data.taxInclusiveUnitPrice;
    form.futureTickets = data.futureTickets;
    temFutureTickets.value = data.futureTickets;
@@ -168,8 +168,8 @@
    Number(form.ticketsNum) * Number(form.taxInclusiveUnitPrice);
  const futureTickets =
    Number(temFutureTickets.value) - newTicketsNum;
  form.futureTickets = Number(futureTickets.toFixed(2));
  form.ticketsAmount = Number(ticketsAmount.toFixed(2));
  form.futureTickets = Number(futureTickets.toFixed(3));
  form.ticketsAmount = Number(ticketsAmount.toFixed(3));
};
const inputTicketsAmount = val => {
@@ -183,8 +183,8 @@
  const maxAmount = maxTicketsNum.value * Number(form.taxInclusiveUnitPrice);
  
  if (Number(val) > maxAmount) {
    proxy.$modal.msgWarning(`本次来票金额不得大于${maxAmount.toFixed(2)}元`);
    form.ticketsAmount = maxAmount.toFixed(2);
    proxy.$modal.msgWarning(`本次来票金额不得大于${maxAmount.toFixed(3)}元`);
    form.ticketsAmount = maxAmount.toFixed(3);
    form.ticketsNum = maxTicketsNum.value;
    return;
  }
@@ -196,16 +196,16 @@
  if (ticketsNum > maxTicketsNum.value) {
    proxy.$modal.msgWarning(`来票数不能大于${maxTicketsNum.value}`);
    form.ticketsNum = maxTicketsNum.value;
    form.ticketsAmount = maxAmount.toFixed(2);
    form.ticketsAmount = maxAmount.toFixed(3);
    return;
  }
  
  form.ticketsNum = Number(ticketsNum.toFixed(2));
  form.ticketsNum = Number(ticketsNum.toFixed(3));
  
  // 计算未来票数
  const newTicketsNum = form.ticketsNum - originalTicketsNum.value;
  const futureTickets = Number(temFutureTickets.value) - newTicketsNum;
  form.futureTickets = Number(futureTickets.toFixed(2));
  form.futureTickets = Number(futureTickets.toFixed(3));
};
const open = async row => {
src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -185,7 +185,7 @@
      prop: "taxInclusiveTotalPrice",
      width: 200,
      formatData: (cell) => {
        return cell ? parseFloat(cell).toFixed(2) : 0;
        return cell ? parseFloat(cell).toFixed(3) : 0;
      },
    },
    {
@@ -198,7 +198,7 @@
      prop: "ticketsAmount",
      width: 200,
      formatData: (cell) => {
        return cell ? parseFloat(cell).toFixed(2) : 0;
        return cell ? parseFloat(cell).toFixed(3) : 0;
      },
    },
    {
@@ -206,7 +206,7 @@
      prop: "unTicketsPrice",
      width: 200,
      formatData: (cell) => {
        return cell ? parseFloat(cell).toFixed(2) : 0;
        return cell ? parseFloat(cell).toFixed(3) : 0;
      },
    },
    {
@@ -242,6 +242,9 @@
    param,
    ["ticketsAmount", "unTicketsPrice", "invoiceAmount"],
    {
      ticketsAmount: { decimalPlaces: 3 },
      unTicketsPrice: { decimalPlaces: 3 },
      invoiceAmount: { decimalPlaces: 3 },
      ticketsNum: { noDecimal: true },
      futureTickets: { noDecimal: true },
    }
@@ -260,7 +263,7 @@
    (c) => c.property === "taxInclusiveTotalPrice"
  );
  if (taxInclusiveIndex !== -1) {
    sums[taxInclusiveIndex] = taxInclusiveSum.toFixed(2);
    sums[taxInclusiveIndex] = taxInclusiveSum.toFixed(3);
  }
  return sums;
};
src/views/procurementManagement/procurementLedger/index.vue
@@ -584,12 +584,14 @@
                         placeholder="请选择"
                         clearable
                         @change="mathNum">
                <el-option label="0"
                           :value="0" />
                <el-option label="1"
                           value="1" />
                           :value="1" />
                <el-option label="6"
                           value="6" />
                           :value="6" />
                <el-option label="13"
                           value="13" />
                           :value="13" />
              </el-select>
            </el-form-item>
          </el-col>
@@ -955,7 +957,7 @@
      unit: "",
      quantity: "",
      taxInclusiveUnitPrice: "",
      taxRate: "",
      taxRate: 0,
      taxInclusiveTotalPrice: "",
      taxExclusiveTotalPrice: "",
      invoiceType: "",
@@ -1470,7 +1472,10 @@
  const openProductForm = async (type, row, index) => {
    productOperationType.value = type;
    productOperationIndex.value = index;
    productForm.value = {};
    productForm.value = {
      taxRate: 0,
      invoiceType: "增普票"
    };
    proxy.resetForm("productFormRef");
    productFormVisible.value = true;
    
src/views/procurementManagement/procurementReport/index.vue
@@ -122,7 +122,7 @@
    label: '采购金额',
    prop: 'purchaseAmount',
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '¥0.00'
      return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 3, maximumFractionDigits: 3 })}` : '¥0.000'
    }
  },
  {
@@ -135,7 +135,7 @@
    prop: 'averagePrice',
    width: 120,
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toFixed(2)}` : '¥0.00'
      return val ? `¥${parseFloat(val).toFixed(3)}` : '¥0.000'
    }
  },
  {
src/views/procurementManagement/purchaseOrder/index.vue
@@ -35,7 +35,7 @@
          </template>
        </el-table-column>
        <el-table-column label="总金额" prop="totalAmount" width="120">
          <template #default="{ row }">¥{{ row.totalAmount.toFixed(2) }}</template>
          <template #default="{ row }">¥{{ row.totalAmount.toFixed(3) }}</template>
        </el-table-column>
        <el-table-column label="创建时间" prop="createTime" width="180" />
        <el-table-column label="操作" width="200" align="center">
src/views/procurementManagement/purchaseReturnOrder/New.vue
@@ -462,7 +462,7 @@
});
const formattedNumber = (row, column, cellValue) => {
  return parseFloat(cellValue).toFixed(2);
  return parseFloat(cellValue).toFixed(3);
};
const closeModal = () => {
src/views/procurementManagement/purchaseReturnOrder/ProductList.vue
@@ -107,7 +107,7 @@
})
const total = ref(0)
const formattedNumber = (row, column, cellValue) => {
  return parseFloat(cellValue).toFixed(2);
  return parseFloat(cellValue).toFixed(3);
};
const paginationChange = (obj) => {
src/views/productionManagement/productionReporting/components/formDia.vue
@@ -144,7 +144,7 @@
    const unitPrice = Number(form.value.unitPrice ?? 0);
    
    if (quantity > 0 && unitPrice > 0) {
        form.value.totalPrice = (quantity * unitPrice).toFixed(2);
        form.value.totalPrice = (quantity * unitPrice).toFixed(3);
    } else {
        form.value.totalPrice = '0.00';
    }
src/views/productionManagement/safetyMonitoring/index.vue
@@ -24,7 +24,7 @@
                                </div>
                                <div class="sensor-data">
                                    <div class="data-item">
                                        <span>甲烷: {{ sensor.methane.toFixed(2) }}%</span>
                                        <span>甲烷: {{ sensor.methane.toFixed(3) }}%</span>
                                        <el-progress
                                            :percentage="Math.min(Math.round(sensor.methane * 40 * 100) / 100, 100)"
                                            :color="getProgressColor(Math.min(Math.round(sensor.methane * 40 * 100) / 100, 100), 80)"
@@ -33,7 +33,7 @@
                                        />
                                    </div>
                                    <div class="data-item">
                                        <span>硫化氢: {{ sensor.h2s.toFixed(2) }}ppm</span>
                                        <span>硫化氢: {{ sensor.h2s.toFixed(3) }}ppm</span>
                                        <el-progress
                                            :percentage="Math.min(Math.round((sensor.h2s / 20) * 100 * 100) / 100, 100)"
                                            :color="getProgressColor(Math.min(Math.round((sensor.h2s / 20) * 100 * 100) / 100, 100), 80)"
@@ -59,7 +59,7 @@
                                </div>
                                <div class="sensor-data">
                                    <div class="data-item">
                                        <span>甲烷: {{ sensor.methane.toFixed(2) }}%</span>
                                        <span>甲烷: {{ sensor.methane.toFixed(3) }}%</span>
                                        <el-progress
                                            :percentage="Math.min(Math.round(sensor.methane * 40 * 100) / 100, 100)"
                                            :color="getProgressColor(sensor.methane, 2.5)"
@@ -68,7 +68,7 @@
                                        />
                                    </div>
                                    <div class="data-item">
                                        <span>硫化氢: {{ sensor.h2s.toFixed(2) }}ppm</span>
                                        <span>硫化氢: {{ sensor.h2s.toFixed(3) }}ppm</span>
                                        <el-progress
                                            :percentage="Math.min(Math.round((sensor.h2s / 20) * 100 * 100) / 100, 100)"
                                            :color="getProgressColor(sensor.h2s, 10)"
@@ -339,7 +339,7 @@
        formatProgress(percentage) {
            if (percentage == null || isNaN(percentage)) return '0.00%'
            const val = Math.round(Number(percentage) * 100) / 100
            return `${val.toFixed(2)}%`
            return `${val.toFixed(3)}%`
        },
        // 初始化图表
        initChart() {
src/views/projectManagement/Management/components/formDia.vue
@@ -571,9 +571,10 @@
        <el-col :span="12">
          <el-form-item label="税率(%):" prop="taxRate">
            <el-select v-model="productForm.taxRate" placeholder="请选择" clearable @change="calculateFromTaxRate">
              <el-option label="1" value="1" />
              <el-option label="6" value="6" />
              <el-option label="13" value="13" />
              <el-option label="0" :value="0" />
              <el-option label="1" :value="1" />
              <el-option label="6" :value="6" />
              <el-option label="13" :value="13" />
            </el-select>
          </el-form-item>
        </el-col>
@@ -684,10 +685,10 @@
    unit: '',
    quantity: '',
    taxInclusiveUnitPrice: '',
    taxRate: '',
    taxRate: 0,
    taxInclusiveTotalPrice: '',
    taxExclusiveTotalPrice: '',
    invoiceType: ''
    invoiceType: '增普票'
  },
  productRules: {
    productCategoryId: [{ required: true, message: '请选择', trigger: 'change' }],
@@ -974,10 +975,10 @@
      unit: '',
      quantity: '',
      taxInclusiveUnitPrice: '',
      taxRate: '',
      taxRate: 0,
      taxInclusiveTotalPrice: '',
      taxExclusiveTotalPrice: '',
      invoiceType: ''
      invoiceType: '增普票'
    }
  }
src/views/reportAnalysis/PSIDataAnalysis/components/center-top.vue
@@ -31,7 +31,7 @@
const formatPercent = (val) => {
  const num = Number(val) || 0
  return `${num.toFixed(2)}%`
  return `${num.toFixed(3)}%`
}
const compareClass = (val) => (val >= 0 ? 'compare-up' : 'compare-down')
src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue
@@ -136,7 +136,7 @@
const formatPercent = (val) => {
  const num = Number(val) || 0
  return `${Math.abs(num).toFixed(2)}%`
  return `${Math.abs(num).toFixed(3)}%`
}
const compareClass = (val) => (val >= 0 ? 'compare-up' : 'compare-down')
src/views/reportAnalysis/financialAnalysis/components/center-top.vue
@@ -157,15 +157,15 @@
const formatAmountWanNumber = (val) => {
  const num = Number(val) || 0
  if (Math.abs(num) >= 10000) {
    return (num / 10000).toFixed(2)
    return (num / 10000).toFixed(3)
  }
  return num.toFixed(2)
  return num.toFixed(3)
}
const formatPercent = (val) => {
  const num = Number(val) || 0
  // 百分比展示始终用绝对值,小数保留两位
  return `${Math.abs(num).toFixed(2)}%`
  return `${Math.abs(num).toFixed(3)}%`
}
const metricClass = (metric) => {
src/views/reportAnalysis/productionAnalysis/components/center-top.vue
@@ -60,7 +60,7 @@
  // 点击跳转页面
  console.log('点击了', item)
  router.push({
    path: '/productionManagement/productionOrder',
    path: '/productionManagement/productionManagement/workOrder/index',
    query: {
      name: item.name,
    }
src/views/reportAnalysis/qualityAnalysis/components/center-top.vue
@@ -27,7 +27,7 @@
const formatPercent = (val) => {
  const num = Number(val) || 0
  return `${num.toFixed(2)}%`
  return `${num.toFixed(3)}%`
}
const compareClass = (val) => (val >= 0 ? 'compare-up' : 'compare-down')
src/views/reportAnalysis/qualityAnalysis/components/right-top.vue
@@ -47,9 +47,9 @@
          return {
            rank: `Top${index + 1}`,
            productName: item.productName || `产品${index + 1}`,
            total: total.toFixed(2),
            finished: finished.toFixed(2),
            qualifiedRate: passRate.toFixed(2),
            total: total.toFixed(3),
            finished: finished.toFixed(3),
            qualifiedRate: passRate.toFixed(3),
            percentage: Math.min(100, Math.max(0, passRate)), // 确保百分比在0-100之间
          }
        })
src/views/safeProduction/safetyTrainingAssessment/detail.vue
@@ -200,7 +200,7 @@
      });
  };
  const formattedNumber = (row, column, cellValue) => {
    return parseFloat(cellValue).toFixed(2);
    return parseFloat(cellValue).toFixed(3);
  };
  // 主表合计方法
  const summarizeMainTable = param => {
@@ -229,7 +229,7 @@
        item => item.id == customerId.value
      );
      summarizeTable[summarizeTable.length - 1] =
        tableData.value[index].unReceiptPaymentAmount.toFixed(2);
        tableData.value[index].unReceiptPaymentAmount.toFixed(3);
    } else {
      summarizeTable[summarizeTable.length - 1] = 0.0;
    }
src/views/salesManagement/invoiceLedger/index.vue
@@ -76,7 +76,7 @@
            <el-form-item :label="`发票金额(元): `" prop="invoiceTotal">
              <el-input-number :step="0.01" :min="0" :max="maxInvoiceAmount || form.taxInclusiveTotalPrice" style="width: 100%" v-model="form.invoiceTotal" placeholder="请输入" clearable :precision="2"/>
              <div v-if="maxInvoiceAmount > 0" style="color: #909399; font-size: 12px; margin-top: 5px;">
                可填最大金额为:¥{{ maxInvoiceAmount.toFixed(2) }}元
                可填最大金额为:¥{{ maxInvoiceAmount.toFixed(3) }}元
              </div>
            </el-form-item>
          </el-col>
src/views/salesManagement/invoiceRegistration/index.vue
@@ -452,17 +452,17 @@
const formattedNumber = (row, column, cellValue) => {
    if (cellValue == 0) {
        return parseFloat(cellValue).toFixed(2);
        return parseFloat(cellValue).toFixed(3);
    }
    if (cellValue) {
        return parseFloat(cellValue).toFixed(2);
        return parseFloat(cellValue).toFixed(3);
    } else {
        return cellValue;
    }
};
const formattedInputNumber = (value) => {
    return value ? parseFloat(value).toFixed(2) : 0;
    return value ? parseFloat(value).toFixed(3) : 0;
};
// 判断是否可以开票(基于选中的台账数据)
@@ -539,7 +539,11 @@
        "contractAmount",
        "invoiceTotal",
        "noInvoiceAmountTotal",
    ]);
    ], {
        contractAmount: { decimalPlaces: 3 },
        invoiceTotal: { decimalPlaces: 3 },
        noInvoiceAmountTotal: { decimalPlaces: 3 },
    });
};
// 子表合计方法
const summarizeChildrenTable = (param) => {
@@ -553,7 +557,17 @@
        "noInvoiceNum",
        "noInvoiceAmount",
        "currentInvoiceNum",
    ]);
    ], {
        taxInclusiveUnitPrice: { decimalPlaces: 3 },
        taxInclusiveTotalPrice: { decimalPlaces: 3 },
        taxExclusiveTotalPrice: { decimalPlaces: 3 },
        invoiceNum: { decimalPlaces: 3 },
        invoiceAmount: { decimalPlaces: 3 },
        currentInvoiceAmount: { decimalPlaces: 3 },
        noInvoiceNum: { decimalPlaces: 3 },
        noInvoiceAmount: { decimalPlaces: 3 },
        currentInvoiceNum: { decimalPlaces: 3 },
    });
};
// 打开弹框
const openForm = () => {
@@ -752,7 +766,7 @@
    // 计算本次开票金额
    row.currentInvoiceAmount = (
        row.currentInvoiceNum * row.taxInclusiveUnitPrice
    ).toFixed(2);
    ).toFixed(3);
    // 计算未开票数
    row.noInvoiceNum = (row.originalNoInvoiceNum - row.currentInvoiceNum).toFixed(
        2
@@ -760,7 +774,7 @@
    // 计算未开票金额
    row.noInvoiceAmount = (
        row.tempnoInvoiceAmount - row.currentInvoiceAmount
    ).toFixed(2);
    ).toFixed(3);
};
// 本次开票金额失焦操作
const invoiceAmountBlur = (row) => {
@@ -775,7 +789,7 @@
    // 计算本次开票数
    row.currentInvoiceNum = (
        row.currentInvoiceAmount / row.taxInclusiveUnitPrice
    ).toFixed(2);
    ).toFixed(3);
    console.log("row.currentInvoiceNum ", row.currentInvoiceNum);
    console.log(" row.originalNoInvoiceNum  ", row.originalNoInvoiceNum);
    // 计算未开票数
@@ -785,7 +799,7 @@
    // 计算未开票金额
    row.noInvoiceAmount = (
        row.tempnoInvoiceAmount - row.currentInvoiceAmount
    ).toFixed(2);
    ).toFixed(3);
};
onMounted(() => {
src/views/salesManagement/receiptPayment/index.vue
@@ -408,6 +408,8 @@
    param,
    ["receiptPaymentAmountTotal", "noReceiptAmount"],
    {
      receiptPaymentAmountTotal: { decimalPlaces: 3 },
      noReceiptAmount: { decimalPlaces: 3 },
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
    }
@@ -415,7 +417,9 @@
};
// 子表合计方法
const summarizeChildrenTable = (param) => {
  return proxy.summarizeTable(param, ["receiptPaymentAmount"]);
  return proxy.summarizeTable(param, ["receiptPaymentAmount"], {
    receiptPaymentAmount: { decimalPlaces: 3 },
  });
};
// 打开弹框
const openForm = () => {
src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -188,7 +188,7 @@
  });
};
const formattedNumber = (row, column, cellValue) => {
  return parseFloat(cellValue).toFixed(2);
  return parseFloat(cellValue).toFixed(3);
};
// 主表合计方法
const summarizeMainTable = (param) => {
@@ -196,6 +196,9 @@
    param,
    ["invoiceTotal", "receiptPaymentAmount", "unReceiptPaymentAmount"],
    {
      invoiceTotal: { decimalPlaces: 3 },
      receiptPaymentAmount: { decimalPlaces: 3 },
      unReceiptPaymentAmount: { decimalPlaces: 3 },
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
    }
@@ -207,6 +210,9 @@
    param,
    ["invoiceAmount", "receiptAmount", "unReceiptAmount"],
    {
      invoiceAmount: { decimalPlaces: 3 },
      receiptAmount: { decimalPlaces: 3 },
      unReceiptAmount: { decimalPlaces: 3 },
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
    }
@@ -217,9 +223,9 @@
      (item) => item.id == customerId.value
    );
    summarizeTable[summarizeTable.length - 1] =
      tableData.value[index].unReceiptPaymentAmount.toFixed(2);
      tableData.value[index].unReceiptPaymentAmount.toFixed(3);
  } else {
    summarizeTable[summarizeTable.length - 1] = 0.0;
    summarizeTable[summarizeTable.length - 1] = "0.000";
  }
  return summarizeTable;
};
src/views/salesManagement/salesLedger/index.vue
@@ -375,9 +375,10 @@
                    <el-col :span="12">
                        <el-form-item label="税率(%):" prop="taxRate">
                            <el-select v-model="productForm.taxRate" placeholder="请选择" clearable @change="calculateFromTaxRate">
                                <el-option label="1" value="1" />
                                <el-option label="6" value="6" />
                                <el-option label="13" value="13" />
                                <el-option label="0" :value="0" />
                                <el-option label="1" :value="1" />
                                <el-option label="6" :value="6" />
                                <el-option label="13" :value="13" />
                            </el-select>
                        </el-form-item>
                    </el-col>
@@ -751,7 +752,7 @@
        unit: "",
        quantity: "",
        taxInclusiveUnitPrice: "",
        taxRate: "",
        taxRate: 0,
        taxInclusiveTotalPrice: "",
        taxExclusiveTotalPrice: "",
        invoiceType: "",
@@ -1200,7 +1201,7 @@
    productData.value = products.map((p) => {
        const quantity = Number(p.quantity ?? 0) || 0;
        const unitPrice = Number(p.unitPrice ?? 0) || 0;
        const taxRate = "0"; // 默认 13%,便于直接提交(如需可在产品中自行修改)
        const taxRate = Number(p.taxRate ?? 0) || 0; // 默认 13%,便于直接提交(如需可在产品中自行修改)
        const taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(3);
        const taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(taxInclusiveTotalPrice, taxRate, 3);
        return {
@@ -1300,7 +1301,10 @@
    }
    
    productOperationType.value = type;
    productForm.value = {};
    productForm.value = {
        taxRate: 0,
        invoiceType: "增普票"
    };
    proxy.resetForm("productFormRef");
    if (type === "edit") {
        productForm.value = { ...row };
@@ -1335,6 +1339,7 @@
const submitProduct = () => {
    proxy.$refs["productFormRef"].validate((valid) => {
        if (valid) {
            productForm.value.taxRate = productForm.value.taxRate?productForm.value.taxRate:0;
            if (operationType.value === "edit") {
                submitProductEdit();
            } else {
src/views/salesManagement/salesQuotation/index.vue
@@ -65,7 +65,7 @@
        </el-table-column>
        <el-table-column prop="totalAmount" label="报价金额" width="120">
          <template #default="scope">
            ¥{{ scope.row.totalAmount.toFixed(2) }}
            ¥{{ scope.row.totalAmount.toFixed(3) }}
          </template>
        </el-table-column>
        <el-table-column label="操作" width="200" fixed="right" align="center">
@@ -272,7 +272,7 @@
            <el-table-column prop="unitPrice" label="单价">
              <template #default="scope">
                <el-form-item :prop="`products.${scope.$index}.unitPrice`" class="product-table-form-item">
                  <el-input-number v-model="scope.row.unitPrice" :min="0" :precision="2" style="width: 100%" />
                  <el-input-number v-model="scope.row.unitPrice" :min="0" :precision="3" style="width: 100%" />
                </el-form-item>
              </template>
            </el-table-column>
@@ -370,7 +370,7 @@
<!--          <el-tag :type="getStatusType(currentQuotation.status)">{{ currentQuotation.status }}</el-tag>-->
<!--        </el-descriptions-item>-->
        <el-descriptions-item label="报价总额" :span="2">
          <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">¥{{ currentQuotation.totalAmount?.toFixed(2) }}</span>
          <span style="font-size: 18px; color: #e6a23c; font-weight: bold;">¥{{ currentQuotation.totalAmount?.toFixed(3) }}</span>
        </el-descriptions-item>
      </el-descriptions>
      
@@ -382,7 +382,7 @@
          <el-table-column prop="unit" label="单位" />
          <el-table-column prop="unitPrice" label="单价">
            <template #default="scope">
              ¥{{ scope.row.unitPrice.toFixed(2) }}
              ¥{{ scope.row.unitPrice.toFixed(3) }}
            </template>
          </el-table-column>
        </el-table>