zhangwencui
22 小时以前 1156fbe1fa77e4a6b7d890604d25e98edf8a7059
src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue
@@ -34,10 +34,14 @@
          <el-form-item label="来票数:">
            <el-input-number :step="0.1"
                             :min="0"
                             :max="maxTicketsNum"
                             style="width: 100%"
                             v-model="form.ticketsNum"
                             @change="inputTicketsNum"
                             :precision="2" />
            <div style="font-size: 12px; color: #909399; margin-top: 4px;">
              可填写数量:{{ maxTicketsNum }}
            </div>
          </el-form-item>
        </el-col>
        <el-col :span="12">
@@ -73,7 +77,7 @@
import useFormData from "@/hooks/useFormData";
import { updateRegistration, getProductRecordById } from "@/api/procurementManagement/procurementInvoiceLedger";
import { ElMessage } from "element-plus";
import { getCurrentInstance, ref, nextTick } from "vue";
import { getCurrentInstance, ref, nextTick, computed } from "vue";
defineOptions({
  name: "来票台账编辑",
@@ -82,7 +86,13 @@
const saleLedgerProjectId = ref("");
const temFutureTickets = ref(0);
const originalTicketsNum = ref(0); // 原始已来票数
const { proxy } = getCurrentInstance();
// 计算最大可填写数量 = 原始已来票数 + 未来票数
const maxTicketsNum = computed(() => {
  return Number(originalTicketsNum.value) + Number(temFutureTickets.value);
});
const {
  id,
@@ -123,6 +133,8 @@
    form.taxInclusiveUnitPrice = data.taxInclusiveUnitPrice;
    form.futureTickets = data.futureTickets;
    temFutureTickets.value = data.futureTickets;
    // 保存原始已来票数
    originalTicketsNum.value = data.ticketsNum || 0;
  }
};
@@ -132,16 +144,30 @@
    proxy.$modal.msgWarning("含税单价不能为零或未定义");
    return;
  }
  if (Number(form.ticketsNum) > Number(temFutureTickets.value)) {
    proxy.$modal.msgWarning("开票数不得大于未开票数");
    form.ticketsNum = temFutureTickets.value;
  // 检查来票数不能大于(原始已来票数 + 未来票数)
  const maxNum = maxTicketsNum.value;
  if (Number(form.ticketsNum) > maxNum) {
    proxy.$modal.msgWarning(`来票数不能大于${maxNum}(已来票数${originalTicketsNum.value} + 未来票数${temFutureTickets.value})`);
    form.ticketsNum = maxNum;
    return;
  }
  // 计算本次新增的来票数(当前来票数 - 原始已来票数)
  const newTicketsNum = Number(form.ticketsNum) - Number(originalTicketsNum.value);
  // 如果新增的来票数大于未来票数,则限制
  if (newTicketsNum > Number(temFutureTickets.value)) {
    proxy.$modal.msgWarning("本次新增来票数不得大于未来票数");
    form.ticketsNum = Number(originalTicketsNum.value) + Number(temFutureTickets.value);
    return;
  }
  // 确保所有数值都转换为数字类型进行计算
  const ticketsAmount =
    Number(form.ticketsNum) * Number(form.taxInclusiveUnitPrice);
  const futureTickets =
    Number(temFutureTickets.value) - Number(form.ticketsNum);
    Number(temFutureTickets.value) - newTicketsNum;
  form.futureTickets = Number(futureTickets.toFixed(2));
  form.ticketsAmount = Number(ticketsAmount.toFixed(2));
};
@@ -153,20 +179,33 @@
    return;
  }
  if (Number(val) > Number(form.futureTickets * form.taxInclusiveUnitPrice)) {
    proxy.$modal.msgWarning("本次来票金额不得大于总金额");
    form.ticketsAmount = (
      form.futureTickets * form.taxInclusiveUnitPrice
    ).toFixed(2);
    const ticketsNum =
      Number(form.ticketsAmount) / Number(form.taxInclusiveUnitPrice);
    form.ticketsNum = Number(ticketsNum.toFixed(2));
  // 计算最大可填写金额 = (原始已来票数 + 未来票数)* 含税单价
  const maxAmount = maxTicketsNum.value * Number(form.taxInclusiveUnitPrice);
  if (Number(val) > maxAmount) {
    proxy.$modal.msgWarning(`本次来票金额不得大于${maxAmount.toFixed(2)}元`);
    form.ticketsAmount = maxAmount.toFixed(2);
    form.ticketsNum = maxTicketsNum.value;
    return;
  }
  // 确保所有数值都转换为数字类型进行计算
  const ticketsNum = Number(val) / Number(form.taxInclusiveUnitPrice);
  // 检查来票数不能大于最大值
  if (ticketsNum > maxTicketsNum.value) {
    proxy.$modal.msgWarning(`来票数不能大于${maxTicketsNum.value}`);
    form.ticketsNum = maxTicketsNum.value;
    form.ticketsAmount = maxAmount.toFixed(2);
    return;
  }
  form.ticketsNum = Number(ticketsNum.toFixed(2));
  // 计算未来票数
  const newTicketsNum = form.ticketsNum - originalTicketsNum.value;
  const futureTickets = Number(temFutureTickets.value) - newTicketsNum;
  form.futureTickets = Number(futureTickets.toFixed(2));
};
const open = async row => {