zhangwencui
8 小时以前 a4203d1c0e24a69b3de3a4cf9f3cb1d727602224
来票登记,开票登记一些计算问题(后端接口未完善)
已修改6个文件
154 ■■■■■ 文件已修改
src/api/procurementManagement/procurementInvoiceLedger.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/index.vue 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/paymentEntry/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Form/EditForm.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceLedger/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/procurementInvoiceLedger.js
@@ -83,11 +83,11 @@
  });
}
export function getProductRecordById(params) {
export function getProductRecordById(data) {
  return request({
    url: "/purchase/registration/getProductRecordById",
    method: "get",
    params: params,
     method: "post",
    data: data,
  });
}
src/views/procurementManagement/invoiceEntry/index.vue
@@ -1,35 +1,30 @@
<template>
  <div class="app-container">
    <div class="search_form">
      <el-form :model="filters" :inline="true">
      <el-form :model="filters"
               :inline="true">
        <el-form-item label="供应商名称">
          <el-input
              v-model="filters.supplierName"
          <el-input v-model="filters.supplierName"
              placeholder="请输入名称搜索"
              clearable
              prefix-icon="Search"
              @change="getTableData"
          />
                    @change="getTableData" />
        </el-form-item>
        <el-form-item label="采购订单号:">
          <el-input
            v-model="filters.purchaseContractNumber"
          <el-input v-model="filters.purchaseContractNumber"
            placeholder="请输入"
            clearable
            prefix-icon="Search"
            @change="getTableData"
          />
                    @change="getTableData" />
        </el-form-item>
        <el-form-item label="销售合同号">
          <el-input
              v-model="filters.salesContractNo"
          <el-input v-model="filters.salesContractNo"
              placeholder="请输入销售合同号"
              clearable
          />
                    clearable />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="getTableData"> 搜索 </el-button>
          <el-button type="primary"
                     @click="getTableData"> 搜索 </el-button>
          <el-button @click="resetFilters"> 重置 </el-button>
        </el-form-item>
      </el-form>
@@ -38,17 +33,18 @@
      <div class="actions">
        <div></div>
        <div>
          <el-button @click="handleExport" style="margin-right: 10px">导出</el-button>
          <el-button type="primary" @click="handleAdd('add')">
          <el-button @click="handleExport"
                     style="margin-right: 10px">导出</el-button>
          <el-button type="primary"
                     @click="handleAdd('add')">
            新增登记
          </el-button>
<!--          <el-button type="danger" plain @click="handleDelete">删除</el-button>-->
        </div>
      </div>
      <PIMTable
        rowKey="id"
      <PIMTable rowKey="id"
        :column="columns"
        :tableData="filteredDataList"
                :tableData="dataList"
        :tableLoading="loading"
        :isSelection="true"
        :page="{
@@ -61,30 +57,31 @@
        :isShowSummary="true"
        @expand-change="expandChange"
        @selection-change="handleSelectionChange"
        @pagination="changePage"
      >
                @pagination="changePage">
        <template #expand="{ row }">
          <ExpandTable ref="expandTableRef" />
        </template>
        <template #operation="{ row }">
          <el-button
            text
          <el-button text
            type="primary"
            size="small"
            @click="handleEdit('edit', row.id)"
          >
                     @click="handleEdit('edit', row.id)">
            编辑
          </el-button>
        </template>
      </PIMTable>
    </div>
    <Modal ref="modalRef" @refreshList="getTableData"></Modal>
    <Modal ref="modalRef"
           @refreshList="getTableData"></Modal>
  </div>
</template>
<script setup>
import { usePaginationApi } from "@/hooks/usePaginationApi";
import {delRegistration, gePurchaseListPage} from "@/api/procurementManagement/invoiceEntry.js";
  import {
    delRegistration,
    gePurchaseListPage,
  } from "@/api/procurementManagement/invoiceEntry.js";
import { nextTick, onMounted, getCurrentInstance, ref } from "vue";
import ExpandTable from "./components/ExpandTable.vue";
import Modal from "./components/Modal.vue";
@@ -123,17 +120,17 @@
    {
      label: "采购订单号",
      prop: "purchaseContractNumber",
      width:150
        width: 150,
    },
    {
      label: "销售合同号",
      prop: "salesContractNo",
      width:150
        width: 150,
    },
    {
      label: "供应商名称",
      prop: "supplierName",
      width:300
        width: 300,
    },
    {
      label: "录入人",
@@ -142,13 +139,13 @@
    {
      label: "录入日期",
      prop: "entryDate",
      width:110
        width: 110,
    },
    {
      label: "合同金额(元)",
      prop: "contractAmount",
      width:200,
      formatData: (val) => {
        formatData: val => {
        return val ? parseFloat(val).toFixed(2) : 0;
      },
    },
@@ -156,7 +153,7 @@
      label: "已来票金额(元)",
      prop: "receiptPaymentAmount",
      width:200,
      formatData: (val) => {
        formatData: val => {
        return val ? parseFloat(val).toFixed(2) : 0;
      },
    },
@@ -164,7 +161,7 @@
      label: "待来票金额(元)",
      prop: "unReceiptPaymentAmount",
      width:200,
      formatData: (val) => {
        formatData: val => {
        return val ? parseFloat(val).toFixed(2) : 0;
      },
    },
@@ -179,16 +176,17 @@
  ]
);
// 计算属性过滤 审批通过approvalStatus=1 的数据
const filteredDataList = computed(() => {
  return dataList.value.filter(item => item.approvalStatus == 1);
});
const handleSelectionChange = (selection) => {
  // const filteredDataList = computed(() => {
  //   // return dataList.value.filter(item => item.approvalStatus == 1);
  //   return dataList;
  // });
  const handleSelectionChange = selection => {
  selectedRows.value = selection.filter(
    (item) => item.purchaseContractNumber !== undefined
      item => item.purchaseContractNumber !== undefined
  );
};
const handleAdd = (type) => {
  const handleAdd = type => {
    if (selectedRows.value.length < 1) {
        proxy.$modal.msgWarning("请至少选中一条数据");
        return;
@@ -235,12 +233,14 @@
    let ids = [];
    if (selectedRows.value.length > 0) {
    // 新增判断:如果有选中的数据没有ticketRegistrationId,提示并终止
    const noTicket = selectedRows.value.some(item => !item.ticketRegistrationId);
      const noTicket = selectedRows.value.some(
        item => !item.ticketRegistrationId
      );
    if (noTicket) {
      proxy.$modal.msgWarning("采购台账还未进行来票登记,无法进行删除操作");
      return;
    }
        ids = selectedRows.value.map((item) => item.ticketRegistrationId);
      ids = selectedRows.value.map(item => item.ticketRegistrationId);
    } else {
        proxy.$modal.msgWarning("请选择数据");
        return;
@@ -251,7 +251,7 @@
        type: "warning",
    })
        .then(() => {
            delRegistration(ids).then((res) => {
        delRegistration(ids).then(res => {
                proxy.$modal.msgSuccess("删除成功");
                getList();
            });
@@ -274,7 +274,7 @@
  onCurrentChange(page);
};
// 主表合计方法
const summarizeMainTable = (param) => {
  const summarizeMainTable = param => {
    return proxy.summarizeTable(
        param,
        ["contractAmount", "receiptPaymentAmount", "unReceiptPaymentAmount"],
src/views/procurementManagement/paymentEntry/index.vue
@@ -75,6 +75,7 @@
                                 v-model="scope.row.currentPaymentAmount"
                                 :disabled="!scope.row.editType"
                                 :precision="2"
                                 :max="scope.row.maxAmountTTotal + maxAmount"
                                 placeholder="请输入"
                                 clearable />
              </template>
@@ -447,6 +448,8 @@
      }
    });
  };
  const maxAmount = ref(0);
  const maxAmountTTotal = ref(0);
  // 展开行
  const expandChange = (row, expandedRows) => {
    if (expandedRows.length > 0) {
@@ -454,12 +457,17 @@
        expandedRowKeys.value = [];
        try {
          childrenLoading.value = true;
          maxAmount.value = row.unPaymentAmountTotal;
          registrationListPageGetById({ id: row.id }).then(res => {
            childrenLoading.value = false;
            const index = tableData.value.findIndex(item => item.id === row.id);
            if (index > -1) {
              expandData.value = res;
            }
            expandData.value = res.map(item => ({
              ...item,
              maxAmountTTotal: item.currentPaymentAmount,
            }));
            expandedRowKeys.value.push(row.id);
          });
        } catch (error) {
src/views/procurementManagement/procurementInvoiceLedger/Form/EditForm.vue
@@ -75,10 +75,16 @@
    taxInclusiveUnitPrice: undefined, // 含税单价
    ticketRegistrationId: undefined, // 含税单价
  });
  const load = async id => {
    const { code, data } = await getProductRecordById({ id });
  const cuticketsAmount = ref(0);
  const cufutureTickets = ref(0);
  const load = async (id, purchaseLedgerId, productModelId) => {
    const { code, data } = await getProductRecordById({
      id: id,
      purchaseLedgerId: purchaseLedgerId,
      productModelId: productModelId,
    });
    if (code === 200) {
      console.log(data, "来票台账详情");
      form.id = data.id;
      form.purchaseContractNumber = data.purchaseContractNumber;
      form.salesContractNo = data.salesContractNo;
@@ -88,8 +94,11 @@
      form.ticketsAmount = data.ticketsAmount.toFixed(2);
      form.taxInclusiveUnitPrice = data.taxInclusiveUnitPrice;
      form.futureTickets = data.futureTickets;
      form.futureTicketsAmount = data.futureTicketsAmount.toFixed(2);
      // temFutureTickets.value = data.futureTickets;
      temFutureTickets.value = data.quantity;
      cuticketsAmount.value = data.futureTicketsAmount + data.ticketsAmount;
      cufutureTickets.value = data.futureTickets + data.ticketsNum;
      form.ticketRegistrationId = data.ticketRegistrationId;
    }
@@ -101,16 +110,15 @@
      proxy.$modal.msgWarning("含税单价不能为零或未定义");
      return;
    }
    if (Number(form.ticketsNum) > Number(temFutureTickets.value)) {
    if (Number(form.ticketsNum) > Number(cufutureTickets.value)) {
      proxy.$modal.msgWarning("开票数不得大于未开票数");
      form.ticketsNum = temFutureTickets.value;
      form.ticketsNum = cufutureTickets.value;
    }
    // 确保所有数值都转换为数字类型进行计算
    const ticketsAmount =
      Number(form.ticketsNum) * Number(form.taxInclusiveUnitPrice);
    const futureTickets =
      Number(temFutureTickets.value) - Number(form.ticketsNum);
    const futureTickets = Number(cufutureTickets.value) - Number(form.ticketsNum);
    form.futureTickets = Number(futureTickets.toFixed(2));
    form.ticketsAmount = Number(ticketsAmount.toFixed(2));
  };
@@ -121,14 +129,18 @@
      return;
    }
    if (Number(val) > Number(form.futureTickets * form.taxInclusiveUnitPrice)) {
    if (
      Number(val) >
      Number((form.futureTickets + form.ticketsNum) * form.taxInclusiveUnitPrice)
    ) {
      proxy.$modal.msgWarning("本次来票金额不得大于总金额");
      form.ticketsAmount = (
        form.futureTickets * form.taxInclusiveUnitPrice
      ).toFixed(2);
      form.ticketsAmount = cuticketsAmount.value.toFixed(2);
      const ticketsNum =
        Number(form.ticketsAmount) / Number(form.taxInclusiveUnitPrice);
      form.ticketsNum = Number(ticketsNum.toFixed(2));
      form.futureTickets = Number(
        (cufutureTickets.value - form.ticketsNum).toFixed(2)
      );
      return;
    }
src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue
@@ -1,8 +1,12 @@
<template>
  <el-dialog :title="modalOptions.title" v-model="visible" @close="close">
  <el-dialog :title="modalOptions.title"
             v-model="visible"
             @close="close">
    <EditForm ref="editFormRef" />
    <template #footer>
            <el-button type="primary" :loading="loading" @click="sendForm">
      <el-button type="primary"
                 :loading="loading"
                 @click="sendForm">
                {{ modalOptions.confirmText }}
            </el-button>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
@@ -21,7 +25,7 @@
});
const emits = defineEmits(["success"]);
const saleLedgerProjectId = ref('')
  const saleLedgerProjectId = ref("");
const editFormRef = ref();
const {
  id,
@@ -33,11 +37,11 @@
  closeModal,
} = useModal({ title: "来票台账" });
const open = async (row) => {
  const open = async row => {
  openModal(row.id);
    saleLedgerProjectId.value = row.saleLedgerProjectId;
  await nextTick();
  editFormRef.value.load(row.id);
    editFormRef.value.load(row.id, row.purchaseLedgerId, row.productModelId);
};
const close = () => {
src/views/salesManagement/invoiceLedger/index.vue
@@ -181,7 +181,7 @@
                          prop="invoiceTotal">
              <el-input-number :step="0.01"
                               :min="0"
                               :max="form.noInvoiceAmount"
                               :max="form.noInvoiceAmount + form.invoiceAmount"
                               style="width: 100%"
                               v-model="form.invoiceTotal"
                               placeholder="请输入"