chenrui
2025-06-06 ece2dfeb926d728b10db38038e4d12e9e9851c24
src/views/procurementManagement/invoiceEntry/index.vue
@@ -107,26 +107,26 @@
          <el-form-item label="产品信息:" prop="entryDate">
          </el-form-item>
        </el-row>
        <el-table :data="productData" border @selection-change="productSelected" show-summary
          :summary-method="summarizeChildrenTable">
        <el-table :data="productData" border @selection-change="productSelected" show-summary style="width: 100%" :summary-method="summarizeChildrenTable">
          <el-table-column align="center" label="序号" type="index" width="60" />
          <el-table-column label="产品大类" prop="productCategory" />
          <el-table-column label="规格型号" prop="specificationModel" />
          <el-table-column label="单位" prop="unit" />
          <el-table-column label="数量" prop="quantity" />
          <el-table-column label="税率(%)" prop="taxRate" />
          <el-table-column label="含税单价(元)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
          <el-table-column label="含税总价(元)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
          <el-table-column label="不含税总价(元)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
          <el-table-column label="单位" prop="unit" width="70" />
          <el-table-column label="数量" prop="quantity" width="70"/>
          <el-table-column label="税率(%)" prop="taxRate" width="80" />
          <el-table-column label="含税单价(元)" width="150" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
          <el-table-column label="含税总价(元)" width="150" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
          <el-table-column label="不含税总价(元)" width="150" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
          <el-table-column label="本次来票数" prop="ticketsNum" width="170">
            <template #default="scope">
              <el-input-number v-model="scope.row.ticketsNum" placeholder="请选择" min="0" :step="0.1" clearable style="width: 100%"
              <el-input-number v-model="scope.row.ticketsNum" placeholder="请选择" :min="0" :step="0.1" clearable style="width: 100%"
                @change="invoiceNumBlur(scope.row)" />
            </template>
          </el-table-column>
          <el-table-column label="本次来票金额(元)" prop="ticketsAmount" :formatter="formattedNumber">
          <el-table-column label="本次来票金额(元)" prop="ticketsAmount" :min="0" :step="0.1" :formatter="formattedNumber" @change="invoiceAmountBlur"  width="170">
            <template #default="scope">
              {{ scope.row.ticketsAmount || 0 }}
              <el-input-number v-model="scope.row.ticketsAmount" placeholder="请选择" :min="0" :step="0.1" clearable style="width: 100%"
                               @change="invoiceAmountBlur(scope.row)" />
            </template>
          </el-table-column>
          <el-table-column label="未来票数" prop="futureTickets"
@@ -172,7 +172,7 @@
import {
  addOrUpdateRegistration,
  delRegistration,
  gePurchaseList,
  gePurchaseListPage,
  getInfo,
  getProduct,
  getPurchaseNoById,
@@ -213,16 +213,16 @@
  page.current = 1
  getList()
}
const paginationChange = ({ current, limit }) => {
  page.current = current;
  page.size = limit;
const paginationChange = (obj) => {
  page.current = obj.page;
  page.size = obj.limit;
  getList()
}
const getList = () => {
  tableLoading.value = true
  gePurchaseList({ ...searchForm.value, ...page }).then(res => {
  gePurchaseListPage({ ...searchForm.value, ...page }).then(res => {
    tableLoading.value = false
    tableData.value = res.rows
    tableData.value = res.records;
    tableData.value.map(item => {
      item.children = []
    })
@@ -356,13 +356,6 @@
  proxy.resetForm("formRef")
  dialogFormVisible.value = false
}
// 填写数据
const openProductEdit = (row) => {
  const index = productData.value.findIndex(item => item.id === row.id);
  if (index > -1) {
    productData.value[index].editFlag = !productData.value[index].editFlag
  }
}
// 导出
const handleOut = () => {
  ElMessageBox.confirm(
@@ -403,7 +396,7 @@
    proxy.$modal.msg("已取消")
  })
}
//本次开票失焦操作
//本次来票数失焦操作
const invoiceNumBlur = (row) => {
  if (!row.ticketsNum || row.ticketsNum === '') {
      row.ticketsNum = 0
@@ -413,12 +406,31 @@
    row.ticketsNum = 0
    return
  }
  // 计算本次开票金额
  // 计算本次来票金额
  row.ticketsAmount = row.ticketsNum * row.taxInclusiveUnitPrice
  // 计算未开票数
  // 计算未来票数
  row.futureTickets = row.tempFutureTickets - row.ticketsNum
  // 计算未开票金额
  // 计算未来票金额
  row.futureTicketsAmount = row.tempFutureTicketsAmount - row.ticketsAmount
  calculateinvoiceAmount()
}
// 本次来票金额失焦操作
const invoiceAmountBlur = (row) => {
  if(!row.ticketsAmount){
    row.ticketsAmount = 0
  }
  // 计算是否超过来票总金额
  if(row.ticketsAmount > row.tempFutureTicketsAmount){
    proxy.$modal.msgWarning('本次来票金额不得大于未来票金额')
    row.ticketsAmount = 0
  }
  // 计算本次来票数
  row.ticketsNum = (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2)
  // 计算未来票数
  row.futureTickets = row.tempFutureTickets - row.ticketsNum
  // 计算未来票金额
  row.futureTicketsAmount = row.tempFutureTicketsAmount - row.ticketsAmount
  calculateinvoiceAmount()
}
// 获取当前日期函数
@@ -431,6 +443,20 @@
  if (strDate < 10) strDate = `0${strDate}` // 如果日是个位数,在前面补0
  return `${year}-${month}-${strDate}`
}
function calculateinvoiceAmount() {
  console.log('productData',productData.value)
  var invoiceAmountTotal = 0
  productData.value.forEach(item => {
    if(item.ticketsAmount){
      invoiceAmountTotal += item.ticketsAmount
    }
  })
  form.value.invoiceAmount = invoiceAmountTotal.toFixed(2)
}
getList()
</script>