gaoluyang
2025-12-09 b02cd77eb78d973c1eb11ebf03d7d5d71b02aa65
src/views/procurementManagement/invoiceEntry/components/Modal.vue
@@ -54,13 +54,11 @@
        </el-col>
        <el-col :span="12">
          <el-form-item label="发票金额(元):" prop="invoiceAmount">
            <el-input
              type="number"
              :step="0.01"
              :min="0"
            <el-input-number :step="0.01" :min="0" style="width: 100%"
              v-model="form.invoiceAmount"
              placeholder="自动填充"
              clearable
              :disabled="true"
            />
          </el-form-item>
        </el-col>
@@ -80,6 +78,8 @@
              style="width: 100%"
              v-model="form.entryDate"
              type="date"
              value-format="YYYY-MM-DD"
              format="YYYY-MM-DD"
              clearable
            />
          </el-form-item>
@@ -106,6 +106,8 @@
              style="width: 100%"
              v-model="form.enterDate"
              type="date"
              value-format="YYYY-MM-DD"
              format="YYYY-MM-DD"
              clearable
            />
          </el-form-item>
@@ -116,12 +118,14 @@
        rowKey="id"
        :column="columns"
        :tableData="form.productData"
            :summaryMethod="summarizeChildrenTable"
            :isShowSummary="true"
        height="auto"
      >
        <template #ticketsNumRef="{ row }">
          <el-input-number
            v-model="row.ticketsNum"
            placeholder="请选择"
            placeholder="请输入"
            :min="0"
            :step="0.1"
            clearable
@@ -132,7 +136,7 @@
        <template #ticketsAmountRef="{ row }">
          <el-input-number
            v-model="row.ticketsAmount"
            placeholder="请选择"
            placeholder="请输入"
            :min="0"
            :step="0.1"
            clearable
@@ -143,16 +147,17 @@
      </PIMTable>
    </el-form>
    <template #footer>
         <el-button type="primary" :loading="modalLoading" @click="submitForm">
            {{ modalOptions.confirmText }}
         </el-button>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
      <el-button type="primary" :loading="modalLoading" @click="submitForm">
        {{ modalOptions.confirmText }}
      </el-button>
    </template>
  </el-dialog>
</template>
<script setup>
import { ref, getCurrentInstance } from "vue";
import { defineEmits } from 'vue';
import { useModal } from "@/hooks/useModal";
import useFormData from "@/hooks/useFormData";
import FileUpload from "@/components/Upload/FileUpload.vue";
@@ -192,8 +197,7 @@
const rules = ref({
  invoiceNumber: [
    { required: true, message: "请输入发票号", trigger: "blur" },
    { type: "string" },
    { required: false, message: "请输入发票号", trigger: "blur" },
  ],
  invoiceAmount: [
    { required: true, message: "请输入发票金额", trigger: "blur" },
@@ -214,14 +218,18 @@
  title: "来票登记",
});
const emit = defineEmits(['refreshList']);
const columns = [
  {
    label: "产品大类",
    prop: "productCategory",
      width: 120,
  },
  {
    label: "规格型号",
    prop: "specificationModel",
      width: 120,
  },
  {
    label: "单位",
@@ -248,7 +256,7 @@
    prop: "taxInclusiveUnitPrice",
    width: 150,
    formatData: (val) => {
      return val ? parseFloat(val).toFixed(2) : 0;
      return val ? parseFloat(val).toFixed(5) : 0;
    },
  },
  {
@@ -256,7 +264,7 @@
    prop: "taxInclusiveTotalPrice",
    width: 150,
    formatData: (val) => {
      return parseFloat(val).toFixed(2) ?? 0;
      return parseFloat(val).toFixed(5) ?? 0;
    },
  },
  {
@@ -264,7 +272,7 @@
    prop: "taxExclusiveTotalPrice",
    width: 150,
    formatData: (val) => {
      return parseFloat(val).toFixed(2) ?? 0;
      return parseFloat(val).toFixed(5) ?? 0;
    },
  },
  {
@@ -286,10 +294,12 @@
  {
    label: "未来票数",
    prop: "futureTickets",
      width: 100,
  },
  {
    label: "未来票金额(元)",
    prop: "futureTicketsAmount",
      width: 200,
  },
];
@@ -319,23 +329,36 @@
    form.productData = data.productData;
  }
};
// 子表合计方法
const summarizeChildrenTable = (param) => {
   return proxy.summarizeTable(param, [
      "taxInclusiveUnitPrice",
      "taxInclusiveTotalPrice",
      "taxExclusiveTotalPrice",
      "ticketsNum",
      "ticketsAmount",
      "ticketsAmountRef",
      "futureTickets",
      "futureTicketsAmount",
   ]);
};
//本次来票数失焦操作
const invoiceNumBlur = (row) => {
  if (!row.ticketsNum || row.ticketsNum === "") {
    row.ticketsNum = 0;
  }
   row.ticketsNum = row.ticketsNum.toFixed(5);
  if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) {
    proxy.$modal.msgWarning("本次开票数不得大于未开票数");
    row.ticketsNum = 0;
    return;
  }
  // 计算本次来票金额
  row.ticketsAmount = row.ticketsNum * row.taxInclusiveUnitPrice;
  row.ticketsAmount = (row.ticketsNum * row.taxInclusiveUnitPrice).toFixed(5)
  // 计算未来票数
  row.futureTickets = row.tempFutureTickets - row.ticketsNum;
  row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(5)
  // 计算未来票金额
  row.futureTicketsAmount = row.tempFutureTicketsAmount - row.ticketsAmount;
  row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(5)
  calculateinvoiceAmount();
};
@@ -344,6 +367,7 @@
  if (!row.ticketsAmount) {
    row.ticketsAmount = 0;
  }
   row.ticketsAmount = row.ticketsAmount.toFixed(5);
  // 计算是否超过来票总金额
  if (row.ticketsAmount > row.tempFutureTicketsAmount) {
    proxy.$modal.msgWarning("本次来票金额不得大于未来票金额");
@@ -351,12 +375,12 @@
  }
  // 计算本次来票数
  row.ticketsNum = Number(
    (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2)
    (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(5)
  );
  // 计算未来票数
  row.futureTickets = row.tempFutureTickets - row.ticketsNum;
  row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(5)
  // 计算未来票金额
  row.futureTicketsAmount = row.tempFutureTicketsAmount - row.ticketsAmount;
  row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(5)
  calculateinvoiceAmount();
};
@@ -364,10 +388,10 @@
  let invoiceAmountTotal = 0;
  form.productData.forEach((item) => {
    if (item.ticketsAmount) {
      invoiceAmountTotal += item.ticketsAmount;
      invoiceAmountTotal += Number(item.ticketsAmount);
    }
  });
  form.invoiceAmount = invoiceAmountTotal.toFixed(2);
  form.invoiceAmount = invoiceAmountTotal.toFixed(5);
};
const open = (type, eid) => {
@@ -386,10 +410,15 @@
  form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId);
};
const closeAndRefresh = () => {
  closeModal();
  emit('refreshList');
};
const submitForm = () => {
  formRef.value.validate(async (valid, fields) => {
    if (valid) {
      modalLoading.value = true;
      // modalLoading.value = true;
      const { code } = await addOrUpdateRegistration({
        purchaseLedgerId: id.value,
        purchaseContractNumber: form.purchaseLedgerNo,
@@ -409,7 +438,7 @@
      });
      modalLoading.value = false;
      if (code == 200) {
        closeModal();
        closeAndRefresh();
      }
    } else {
      modalLoading.value = false;
@@ -419,6 +448,7 @@
defineExpose({
  open,
  closeAndRefresh,
});
</script>