zhangwencui
2026-06-08 9d2f568a86ab9ab212965de5c18681cc2bd21bb7
src/views/procurementManagement/procurementLedger/index.vue
@@ -125,6 +125,12 @@
                               prop="availableQuality" />
              <el-table-column label="退货数量"
                               prop="returnQuality" />
              <el-table-column label="运费单价(元)"
                               prop="freightUnitPrice"
                               :formatter="formattedNumber" />
              <el-table-column label="总运费(元)"
                               prop="totalFreight"
                               :formatter="formattedNumber" />
              <el-table-column label="税率(%)"
                               prop="taxRate" />
              <el-table-column label="含税单价(元)"
@@ -188,6 +194,14 @@
        <el-table-column label="付款方式"
                         width="100"
                         prop="paymentMethod"
                         show-overflow-tooltip />
        <el-table-column label="车牌号"
                         prop="carPlateNumber"
                         width="140"
                         show-overflow-tooltip />
        <el-table-column label="运输单位/个人"
                         prop="transportUnitOrPerson"
                         width="180"
                         show-overflow-tooltip />
        <el-table-column label="合同金额(元)"
                         prop="contractAmount"
@@ -319,6 +333,24 @@
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="车牌号:"
                          prop="carPlateNumber">
              <el-input v-model="form.carPlateNumber"
                        placeholder="请输入"
                        clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="运输单位/个人:"
                          prop="transportUnitOrPerson">
              <el-input v-model="form.transportUnitOrPerson"
                        placeholder="请输入"
                        clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="录入人:"
                          prop="recorderId">
              <el-select v-model="form.recorderId"
@@ -418,6 +450,14 @@
          <el-table-column label="数量"
                           prop="quantity"
                           width="70" />
          <el-table-column label="运费单价(元)"
                           prop="freightUnitPrice"
                           :formatter="formattedNumber"
                           width="150" />
          <el-table-column label="总运费(元)"
                           prop="totalFreight"
                           :formatter="formattedNumber"
                           width="150" />
          <el-table-column label="库存预警数量"
                           prop="warnNum"
                           width="120"
@@ -616,7 +656,32 @@
                               style="width: 100%"
                               v-model="productForm.quantity"
                               placeholder="请输入"
                               @change="mathNum" />
                               @change="handleQuantityChange" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="运费单价(元):"
                          prop="freightUnitPrice">
              <el-input-number v-model="productForm.freightUnitPrice"
                               :precision="2"
                               :step="0.1"
                               :min="0"
                               clearable
                               style="width: 100%"
                               @change="handleFreightUnitPriceChange" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="总运费(元):"
                          prop="totalFreight">
              <el-input-number v-model="productForm.totalFreight"
                               :precision="2"
                               :step="0.1"
                               :min="0"
                               clearable
                               style="width: 100%" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -1013,6 +1078,8 @@
      supplierName: "",
      supplierId: "",
      paymentMethod: "",
      carPlateNumber: "",
      transportUnitOrPerson: "",
      executionDate: "",
      isChecked: false,
    },
@@ -1053,6 +1120,8 @@
      specificationModel: "",
      unit: "",
      quantity: "",
      freightUnitPrice: "",
      totalFreight: "",
      taxInclusiveUnitPrice: "",
      taxRate: "",
      taxInclusiveTotalPrice: "",
@@ -1170,7 +1239,12 @@
  };
  const formattedNumber = (row, column, cellValue) => {
    return parseFloat(cellValue).toFixed(2);
    if (cellValue === undefined || cellValue === null || cellValue === "") {
      return "0.00";
    }
    const num = Number(cellValue);
    if (Number.isNaN(num)) return "0.00";
    return num.toFixed(2);
  };
  // 查询列表
  /** 搜索按钮操作 */
@@ -1281,6 +1355,8 @@
    return proxy.summarizeTable(
      param,
      [
        "freightUnitPrice",
        "totalFreight",
        "taxInclusiveUnitPrice",
        "taxInclusiveTotalPrice",
        "taxExclusiveTotalPrice",
@@ -1463,6 +1539,7 @@
      "taxInclusiveUnitPrice",
      "taxInclusiveTotalPrice",
      "taxExclusiveTotalPrice",
      "totalFreight",
    ]);
  };
  // 打开弹框
@@ -1669,6 +1746,12 @@
    if (type === "edit") {
      // 复制行数据
      productForm.value = { ...row };
      if (productForm.value.freightUnitPrice === undefined) {
        productForm.value.freightUnitPrice = "";
      }
      if (productForm.value.totalFreight === undefined) {
        productForm.value.totalFreight = "";
      }
      // 如果是从模板加载的数据,可能没有 productId 和 productModelId
      // 需要根据 productCategory 和 specificationModel 来查找对应的 ID
@@ -1733,6 +1816,34 @@
      // 最后再等待一次 DOM 更新,确保所有数据都已设置
      await nextTick();
    }
    computeTotalFreight();
  };
  const computeTotalFreight = () => {
    const hasQuantity =
      productForm.value.quantity !== "" &&
      productForm.value.quantity !== null &&
      productForm.value.quantity !== undefined;
    const hasFreightUnitPrice =
      productForm.value.freightUnitPrice !== "" &&
      productForm.value.freightUnitPrice !== null &&
      productForm.value.freightUnitPrice !== undefined;
    if (!hasQuantity || !hasFreightUnitPrice) return;
    const quantity = Number(productForm.value.quantity);
    const freightUnitPrice = Number(productForm.value.freightUnitPrice);
    if (!Number.isFinite(quantity) || !Number.isFinite(freightUnitPrice)) return;
    productForm.value.totalFreight = (quantity * freightUnitPrice).toFixed(2);
  };
  const handleQuantityChange = () => {
    mathNum();
    computeTotalFreight();
  };
  const handleFreightUnitPriceChange = () => {
    computeTotalFreight();
  };
  const getProductOptions = () => {
    return productTreeList().then(res => {