spring
4 天以前 8a3bfdab689684fe5ee19b2f69842e450fc7c60a
src/views/salesManagement/receiptPayment/index.vue
@@ -421,7 +421,11 @@
    proxy.$modal.msgError("请选择至少一条数据");
    return;
  }
  const validRows = selectedRows.value.filter((item) => item.noReceiptAmount !== 0);
  // 仅允许“待回款金额 > 0”的记录进入新增回款弹窗,并过滤掉可能混入的空对象
  const validRows = selectedRows.value.filter((item) => {
    if (!item || !item.id) return false;
    return Number(item.pendingInvoiceTotal ?? 0) > 0;
  });
  if (validRows.length === 0) {
    proxy.$modal.msgWarning("所选记录均无需回款");
    return;
@@ -433,7 +437,8 @@
    specificationModel: row.specificationModel || "",
    pendingInvoiceTotal: Number(row.pendingInvoiceTotal || 0),
    taxRate: row.taxRate ?? "",
    receiptPaymentAmount: "",
    // 默认本次回款金额 = 待回款金额
    receiptPaymentAmount: Number(row.pendingInvoiceTotal || 0),
    receiptPaymentType: "",
    registrant: userStore.nickName,
    receiptPaymentDate: "",
@@ -484,6 +489,8 @@
const closeDia = () => {
  forms.value = [];
  dialogFormVisible.value = false;
  // 避免二次打开弹窗时仍携带上一次的选择导致“多出一行/脏数据”
  selectedRows.value = [];
};
// 删除回款记录
@@ -518,6 +525,29 @@
// 保存回款记录
const saveReceiptPayment = (row) => {
  // 子表回款金额合计校验:所有回款记录金额之和不能大于父数据合同金额
  // 这里父数据“合同金额”按:已回款金额( invoiceTotal ) + 待回款金额( pendingInvoiceTotal ) 计算
  const findParentRowByChildId = (childId) => {
    return tableData.value.find((p) =>
      Array.isArray(p.children) && p.children.some((c) => c.id === childId)
    );
  };
  const parentRow = findParentRowByChildId(row.id);
  if (parentRow) {
    const contractAmount =
      Number(parentRow.invoiceTotal || 0) + Number(parentRow.pendingInvoiceTotal || 0);
    const sumReceipt = (parentRow.children || []).reduce((sum, item) => {
      const val = Number(item?.receiptPaymentAmount ?? 0);
      return sum + (Number.isFinite(val) ? val : 0);
    }, 0);
    if (sumReceipt > contractAmount) {
      proxy.$modal.msgError(
        `回款金额合计(${sumReceipt.toFixed(2)})不能大于合同金额(${contractAmount.toFixed(2)})`
      );
      return;
    }
  }
  let updateData = {
    id: row.id,
    receiptPaymentType: row.receiptPaymentType,