张诺
11 小时以前 388e286dc8a5b3b8c4717cc74bf128c807eba6b7
fix: 阳光彩印-修复总价计算中的数值处理并调整税率验证逻辑

- 在销售报价单中,将折扣率、小计等字段转换为数值类型,避免字符串运算错误
- 在采购和销售台账中,移除税率和发票类型的必填验证及相关提示
- 将销售台账的默认税率从13%改为0%,简化提交流程
- 调整计算函数,在税率为空或0时仍能正确计算不含税总价
已修改3个文件
78 ■■■■■ 文件已修改
src/views/procurementManagement/procurementLedger/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesLedger/index.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesQuotation/index.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementLedger/index.vue
@@ -970,7 +970,7 @@
      taxInclusiveUnitPrice: [
        { required: true, message: "请输入", trigger: "blur" },
      ],
      taxRate: [{ required: true, message: "请选择", trigger: "change" }],
      // taxRate: [{ required: true, message: "请选择", trigger: "change" }],
      warnNum: [{ required: true, message: "请选择", trigger: "change" }],
      taxInclusiveTotalPrice: [
        { required: true, message: "请输入", trigger: "blur" },
@@ -978,7 +978,7 @@
      taxExclusiveTotalPrice: [
        { required: true, message: "请输入", trigger: "blur" },
      ],
      invoiceType: [{ required: true, message: "请选择", trigger: "change" }],
      // invoiceType: [{ required: true, message: "请选择", trigger: "change" }],
      isChecked: [{ required: true, message: "请选择", trigger: "change" }],
    },
  });
@@ -1721,10 +1721,10 @@
    return `${year}-${month}-${day}`;
  }
  const mathNum = () => {
    if (!productForm.value.taxRate) {
      proxy.$modal.msgWarning("请先选择税率");
      return;
    }
    // if (!productForm.value.taxRate) {
    //   proxy.$modal.msgWarning("请先选择税率");
    //   return;
    // }
    if (!productForm.value.taxInclusiveUnitPrice) {
      return;
    }
@@ -1746,13 +1746,20 @@
          productForm.value.taxRate,
          3
        );
    }else{
      productForm.value.taxExclusiveTotalPrice =
      proxy.calculateTaxIncludeTotalPrice(
          productForm.value.taxInclusiveUnitPrice,
          productForm.value.quantity,
          3
      );
    }
  };
  const reverseMathNum = field => {
    if (!productForm.value.taxRate) {
      proxy.$modal.msgWarning("请先选择税率");
      return;
    }
    // if (!productForm.value.taxRate) {
    //   proxy.$modal.msgWarning("请先选择税率");
    //   return;
    // }
    const taxRate = Number(productForm.value.taxRate);
    if (!taxRate) return;
src/views/salesManagement/salesLedger/index.vue
@@ -767,14 +767,14 @@
        taxInclusiveUnitPrice: [
            { required: true, message: "请输入", trigger: "blur" },
        ],
        taxRate: [{ required: true, message: "请选择", trigger: "change" }],
        // taxRate: [{ required: true, message: "请选择", trigger: "change" }],
        taxInclusiveTotalPrice: [
            { required: true, message: "请输入", trigger: "blur" },
        ],
        taxExclusiveTotalPrice: [
            { required: true, message: "请输入", trigger: "blur" },
        ],
        invoiceType: [{ required: true, message: "请选择", trigger: "change" }],
        // invoiceType: [{ required: true, message: "请选择", trigger: "change" }],
    },
});
const { productForm, productRules } = toRefs(productFormData);
@@ -1200,7 +1200,7 @@
    productData.value = products.map((p) => {
        const quantity = Number(p.quantity ?? 0) || 0;
        const unitPrice = Number(p.unitPrice ?? 0) || 0;
        const taxRate = "13"; // 默认 13%,便于直接提交(如需可在产品中自行修改)
        const taxRate = "0"; // 默认 13%,便于直接提交(如需可在产品中自行修改)
        const taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(3);
        const taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(taxInclusiveTotalPrice, taxRate, 3);
        return {
@@ -1936,10 +1936,10 @@
// 根据不含税总价计算含税单价和数量
const calculateFromExclusiveTotalPrice = () => {
    if (!productForm.value.taxRate) {
        proxy.$modal.msgWarning("请先选择税率");
        return;
    }
    // if (!productForm.value.taxRate) {
    //     proxy.$modal.msgWarning("请先选择税率");
    //     return;
    // }
    if (isCalculating.value) return;
    
    const exclusiveTotalPrice = parseFloat(productForm.value.taxExclusiveTotalPrice);
@@ -1965,10 +1965,10 @@
// 根据数量变化计算总价
const calculateFromQuantity = () => {
    if (!productForm.value.taxRate) {
        proxy.$modal.msgWarning("请先选择税率");
        return;
    }
    // if (!productForm.value.taxRate) {
    //     proxy.$modal.msgWarning("请先选择税率");
    //     return;
    // }
    if (isCalculating.value) return;
    
    const quantity = parseFloat(productForm.value.quantity);
@@ -1991,17 +1991,19 @@
                productForm.value.taxRate,
                3
            );
    }
    }else{
    productForm.value.taxExclusiveTotalPrice = (unitPrice * quantity).toFixed(3);
  }
    
    isCalculating.value = false;
};
// 根据含税单价变化计算总价
const calculateFromUnitPrice = () => {
    if (!productForm.value.taxRate) {
        proxy.$modal.msgWarning("请先选择税率");
        return;
    }
    // if (!productForm.value.taxRate) {
    //     proxy.$modal.msgWarning("请先选择税率");
    //     return;
    // }
    if (isCalculating.value) return;
    
    const quantity = parseFloat(productForm.value.quantity);
@@ -2031,10 +2033,10 @@
// 根据税率变化计算不含税总价
const calculateFromTaxRate = () => {
    if (!productForm.value.taxRate) {
        proxy.$modal.msgWarning("请先选择税率");
        return;
    }
    // if (!productForm.value.taxRate) {
    //     proxy.$modal.msgWarning("请先选择税率");
    //     return;
    // }
    if (isCalculating.value) return;
    
    const inclusiveTotalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice);
src/views/salesManagement/salesQuotation/index.vue
@@ -854,8 +854,13 @@
}
const calculateTotal = () => {
  form.discountAmount = form.subtotal * (form.discountRate / 100)
  form.totalAmount = form.subtotal + form.freight + form.otherFee - form.discountAmount
  const rate = Number(form.discountRate)
  const hasRate = Number.isFinite(rate) && rate > 0
  const subtotal = Number(form.subtotal) || 0
  const freight = Number(form.freight) || 0
  const otherFee = Number(form.otherFee) || 0
  form.discountAmount = hasRate ? subtotal * (rate / 100) : 0
  form.totalAmount = subtotal + freight + otherFee - form.discountAmount
}
const handleCustomerChange = () => {