gaoluyang
2026-05-25 9e7ed81d5fcfdc1489fc8a08edf5fe826dfe5fdc
src/views/salesManagement/salesLedger/index.vue
@@ -158,6 +158,8 @@
              </el-table-column>
              <el-table-column label="数量"
                               prop="quantity" />
              <el-table-column label="每件数量"
                               prop="singleQuantity" />
              <el-table-column label="待发货数量"
                               prop="noQuantity" />
              <el-table-column label="税率(%)"
@@ -243,7 +245,7 @@
            <el-button link
                       type="primary"
                       @click="openForm('edit', scope.row)"
                       :disabled="!scope.row.isEdit || scope.row.hasProductionRecord || !canEditLedger(scope.row)">编辑
                       :disabled="!canEditLedger(scope.row)">编辑
            </el-button>
            <el-button link
                       type="primary"
@@ -287,10 +289,15 @@
          <el-col :span="12">
            <el-form-item label="销售合同号:"
                          prop="salesContractNo">
              <el-input v-model="form.salesContractNo"
                        placeholder="自动生成"
                        clearable
                        disabled />
              <div style="display: flex; align-items: center; gap: 12px;width: 100%;">
                <el-checkbox v-model="form.autoGenerateContractNo" v-if="operationType === 'add'">自动生成
                </el-checkbox>
                <el-input v-model="form.salesContractNo"
                          :placeholder="form.autoGenerateContractNo ? '自动生成' : '请输入'"
                          clearable
                          :disabled="form.autoGenerateContractNo" />
              </div>
            </el-form-item>
          </el-col>
          <el-col :span="12">
@@ -443,6 +450,8 @@
                           prop="unit" />
          <el-table-column label="数量"
                           prop="quantity" />
          <el-table-column label="每件数量"
                           prop="singleQuantity" />
          <el-table-column label="税率(%)"
                           prop="taxRate" />
          <el-table-column label="含税单价(元)"
@@ -674,6 +683,30 @@
                               :precision="2"
                               @change="calculateFromQuantity"
                               style="width: 100%" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="每件数量:"
                          prop="singleQuantity">
              <el-input-number :step="1"
                               :min="1"
                               v-model="productForm.singleQuantity"
                               placeholder="请输入"
                               clearable
                               :precision="0"
                               @change="calculateFromSingleQuantity"
                               style="width: 100%" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="总数:"
                          prop="totalQuantity">
              <el-input v-model="productForm.totalQuantity"
                        placeholder="自动计算"
                        disabled
                        style="width: 100%" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -954,7 +987,7 @@
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="批号:"
            <el-form-item label="库存:"
                          prop="batchNo">
              <el-table :data="deliveryForm.batchNoList"
                        border
@@ -964,6 +997,15 @@
                <el-table-column label="批号"
                                 prop="batchNo"
                                 min-width="180" />
                <el-table-column label="产品大类"
                                 prop="productName"
                                 min-width="100" />
                <el-table-column label="规格型号"
                                 prop="model"
                                 min-width="100" />
                <el-table-column label="单位"
                                 prop="unit"
                                 min-width="100" />
                <el-table-column label="库存数量"
                                 min-width="120"
                                 align="center">
@@ -1072,6 +1114,7 @@
    },
    form: {
      salesContractNo: "",
      autoGenerateContractNo: true,
      salesman: "",
      customerId: "",
      entryPerson: "",
@@ -1080,7 +1123,6 @@
      maintenanceTime: "",
      productData: [],
      executionDate: "",
      hasProductionRecord: false,
    },
    rules: {
      salesman: [{ required: true, message: "请选择", trigger: "change" }],
@@ -1103,6 +1145,8 @@
      specificationModel: "",
      unit: "",
      quantity: "",
      singleQuantity: 1,
      totalQuantity: "",
      taxInclusiveUnitPrice: "",
      taxRate: "",
      taxInclusiveTotalPrice: "",
@@ -1590,6 +1634,8 @@
      form.value.entryDate = getCurrentDate();
      // 签订日期默认为当天
      form.value.executionDate = getCurrentDate();
      // 默认自动生成销售合同号
      form.value.autoGenerateContractNo = true;
    } else {
      currentId.value = row.id;
      getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => {
@@ -1597,6 +1643,8 @@
        form.value.entryPerson = Number(res.entryPerson);
        productData.value = form.value.productData;
        fileList.value = form.value.storageBlobVOs;
        // 编辑时设置自动生成为false,允许手动修改
        form.value.autoGenerateContractNo = false;
      });
    }
    // let userAll = await userStore.getInfo()
@@ -1708,6 +1756,8 @@
        taxExclusiveTotalPrice: taxExclusiveTotalPrice,
        invoiceType: "增普票",
        isProduction: true,
        productId: p.productId,
        productModelId: p.productModelId
      };
    });
@@ -1731,6 +1781,9 @@
        }
        form.value.storageBlobDTOs = fileList;
        form.value.type = 1;
        if (form.value.autoGenerateContractNo) {
          form.value.salesContractNo = '';
        }
        addOrUpdateSalesLedger(form.value).then(res => {
          proxy.$modal.msgSuccess("提交成功");
          closeDia();
@@ -1764,6 +1817,12 @@
    if (type === "edit") {
      productForm.value = { ...row };
      productIndex.value = index;
      // 如果没有 totalQuantity,自动计算:总数 = 每件数量 * 数量
      if (!productForm.value.totalQuantity && productForm.value.quantity) {
        const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
        const quantity = parseFloat(productForm.value.quantity);
        productForm.value.totalQuantity = (quantity * singleQuantity).toFixed(0);
      }
      // 编辑时根据产品大类名称反查 tree 节点 id,并加载规格型号列表
      try {
        const options =
@@ -2445,6 +2504,10 @@
        );
    }
    // 计算总数 = 每件数量 * 数量
    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
    productForm.value.totalQuantity = (quantity * singleQuantity).toFixed(0);
    isCalculating.value = false;
  };
@@ -2478,6 +2541,10 @@
      inclusiveTotalPrice / quantity
    ).toFixed(2);
    // 计算总数 = 每件数量 * 数量
    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
    productForm.value.totalQuantity = (quantity * singleQuantity).toFixed(0);
    isCalculating.value = false;
  };
@@ -2498,7 +2565,7 @@
    isCalculating.value = true;
    // 计算含税总价
    // 计算含税总价 = 单价 * 数量
    productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
    // 如果有税率,计算不含税总价
@@ -2509,6 +2576,10 @@
          productForm.value.taxRate
        );
    }
    // 计算总数 = 每件数量 * 数量
    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
    productForm.value.totalQuantity = (quantity * singleQuantity).toFixed(0);
    isCalculating.value = false;
  };
@@ -2530,7 +2601,7 @@
    isCalculating.value = true;
    // 计算含税总价
    // 计算含税总价 = 单价 * 数量
    productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2);
    // 如果有税率,计算不含税总价
@@ -2541,6 +2612,25 @@
          productForm.value.taxRate
        );
    }
    isCalculating.value = false;
  };
  // 根据每件数量变化计算总数
  const calculateFromSingleQuantity = () => {
    if (isCalculating.value) return;
    const quantity = parseFloat(productForm.value.quantity);
    if (!quantity || quantity <= 0) {
      return;
    }
    isCalculating.value = true;
    // 计算总数 = 每件数量 * 数量
    const singleQuantity = parseInt(productForm.value.singleQuantity) || 1;
    productForm.value.totalQuantity = (quantity * singleQuantity).toFixed(0);
    isCalculating.value = false;
  };
@@ -3041,4 +3131,4 @@
      page-break-after: avoid;
    }
  }
</style>
</style>