zhangwencui
13 小时以前 58f83d2e89ffbd51f2fcac506843a9e5121b0c4c
开票台账数量限制
已修改1个文件
300 ■■■■ 文件已修改
src/views/salesManagement/invoiceLedger/index.vue 300 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceLedger/index.vue
@@ -1,47 +1,107 @@
<template>
  <div class="app-container">
    <div class="search_form">
      <el-form :inline="true" :model="searchForm">
      <el-form :inline="true"
               :model="searchForm">
        <el-form-item label="客户名称/合同号">
          <el-input v-model="searchForm.searchText" style="width: 240px" placeholder="输入客户名称/销售合同号搜索"
            @change="handleQuery" clearable :prefix-icon="Search" />
          <el-input v-model="searchForm.searchText"
                    style="width: 240px"
                    placeholder="输入客户名称/销售合同号搜索"
                    @change="handleQuery"
                    clearable
                    :prefix-icon="Search" />
        </el-form-item>
        <el-form-item label="开票日期">
          <el-date-picker style="width: 240px" v-model="searchForm.invoiceDate" value-format="YYYY-MM-DD"
            format="YYYY-MM-DD" type="daterange" start-placeholder="开始时间" end-placeholder="结束时间" clearable
            @change="changeDateRange" @clear="clearRange" />
          <el-date-picker style="width: 240px"
                          v-model="searchForm.invoiceDate"
                          value-format="YYYY-MM-DD"
                          format="YYYY-MM-DD"
                          type="daterange"
                          start-placeholder="开始时间"
                          end-placeholder="结束时间"
                          clearable
                          @change="changeDateRange"
                          @clear="clearRange" />
        </el-form-item>
        <el-form-item label="录入日期">
          <el-date-picker style="width: 100%" v-model="searchForm.createTimeStart" value-format="YYYY-MM-DD HH:mm:ss"
            format="YYYY-MM-DD" type="date" placeholder="请选择" clearable @change="handleQuery" />
          <el-date-picker style="width: 100%"
                          v-model="searchForm.createTimeStart"
                          value-format="YYYY-MM-DD HH:mm:ss"
                          format="YYYY-MM-DD"
                          type="date"
                          placeholder="请选择"
                          clearable
                          @change="handleQuery" />
        </el-form-item>
        <el-form-item label="不显示有发票行">
          <el-checkbox v-model="searchForm.status" @change="handleQuery" />
          <el-checkbox v-model="searchForm.status"
                       @change="handleQuery" />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleQuery"> 搜索 </el-button>
          <el-button type="primary"
                     @click="handleQuery"> 搜索 </el-button>
          <el-button @click="resetForm"> 重置 </el-button>
          <el-button @click="handleOut" type="primary">导出</el-button>
          <el-button @click="handleOut"
                     type="primary">导出</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div class="table_list">
      <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
        :row-key="(row) => row.id" show-summary :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">
        <el-table-column align="center" type="selection" width="55" />
        <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column label="销售合同号" prop="salesContractNo" show-overflow-tooltip width="180" />
        <el-table-column label="客户名称" prop="customerName" show-overflow-tooltip width="240" />
      <el-table :data="tableData"
                border
                v-loading="tableLoading"
                @selection-change="handleSelectionChange"
                :row-key="(row) => row.id"
                show-summary
                :summary-method="summarizeMainTable"
                height="calc(100vh - 18.5em)">
        <el-table-column align="center"
                         type="selection"
                         width="55" />
        <el-table-column align="center"
                         label="序号"
                         type="index"
                         width="60" />
        <el-table-column label="销售合同号"
                         prop="salesContractNo"
                         show-overflow-tooltip
                         width="180" />
        <el-table-column label="客户名称"
                         prop="customerName"
                         show-overflow-tooltip
                         width="240" />
<!--        <el-table-column label="项目" prop="projectName" width="320" />-->
        <el-table-column label="产品大类" prop="productCategory" width="200" />
        <el-table-column label="规格型号" prop="specificationModel" width="160" show-overflow-tooltip />
        <el-table-column label="发票号" prop="invoiceNo" width="200" show-overflow-tooltip />
        <el-table-column label="发票金额(元)" prop="invoiceTotal" show-overflow-tooltip :formatter="formattedNumber"
        <el-table-column label="产品大类"
                         prop="productCategory"
          width="200" />
        <el-table-column label="税率(%)" prop="taxRate" show-overflow-tooltip />
        <el-table-column label="录入人" prop="invoicePerson" show-overflow-tooltip />
        <el-table-column label="录入日期" prop="createTime" show-overflow-tooltip :formatter="formatDate" width="180" />
        <el-table-column label="开票日期" prop="invoiceDate" show-overflow-tooltip width="120" />
        <el-table-column label="规格型号"
                         prop="specificationModel"
                         width="160"
                         show-overflow-tooltip />
        <el-table-column label="发票号"
                         prop="invoiceNo"
                         width="200"
                         show-overflow-tooltip />
        <el-table-column label="发票金额(元)"
                         prop="invoiceTotal"
                         show-overflow-tooltip
                         :formatter="formattedNumber"
                         width="200" />
        <el-table-column label="税率(%)"
                         prop="taxRate"
                         show-overflow-tooltip />
        <el-table-column label="录入人"
                         prop="invoicePerson"
                         show-overflow-tooltip />
        <el-table-column label="录入日期"
                         prop="createTime"
                         show-overflow-tooltip
                         :formatter="formatDate"
                         width="180" />
        <el-table-column label="开票日期"
                         prop="invoiceDate"
                         show-overflow-tooltip
                         width="120" />
        <!-- <el-table-column label="发票" prop="invoiceFileName" width="120" align="center" show-overflow-tooltip fixed="right">
          <template #default="scope">
            <el-button v-if="scope.row.invoiceFileName" text bg type="primary"
@@ -53,62 +113,121 @@
            </el-button>
          </template>
        </el-table-column> -->
        <el-table-column fixed="right" label="操作" width="150" align="center">
        <el-table-column fixed="right"
                         label="操作"
                         width="150"
                         align="center">
          <template #default="scope">
            <el-button link type="primary" size="small" @click="openForm(scope.row)">编辑</el-button>
            <el-button link type="primary" size="small" @click="downLoadFile(scope.row)">附件</el-button>
            <el-button link type="primary" size="small" @click="delInvoiceLedger(scope.row)">删除</el-button>
            <el-button link
                       type="primary"
                       size="small"
                       @click="openForm(scope.row)">编辑</el-button>
            <el-button link
                       type="primary"
                       size="small"
                       @click="downLoadFile(scope.row)">附件</el-button>
            <el-button link
                       type="primary"
                       size="small"
                       @click="delInvoiceLedger(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
        :page="page.current" :limit="page.size" @pagination="paginationChange" />
      <pagination v-show="total > 0"
                  :total="total"
                  layout="total, sizes, prev, pager, next, jumper"
                  :page="page.current"
                  :limit="page.size"
                  @pagination="paginationChange" />
    </div>
    <el-dialog v-model="dialogFormVisible" title="开票台账页面" width="70%" @close="closeDia">
      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
    <el-dialog v-model="dialogFormVisible"
               title="开票台账页面"
               width="70%"
               @close="closeDia">
      <el-form :model="form"
               label-width="140px"
               label-position="top"
               :rules="rules"
               ref="formRef">
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="销售合同号:" prop="salesContractNo">
              <el-input v-model="form.salesContractNo" disabled></el-input>
            <el-form-item label="销售合同号:"
                          prop="salesContractNo">
              <el-input v-model="form.salesContractNo"
                        disabled></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="客户名称:" prop="customerName">
              <el-input v-model="form.customerName" placeholder="自动填充" clearable disabled />
            <el-form-item label="客户名称:"
                          prop="customerName">
              <el-input v-model="form.customerName"
                        placeholder="自动填充"
                        clearable
                        disabled />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="发票号:" prop="invoiceNo">
              <el-input v-model="form.invoiceNo" placeholder="请输入" clearable />
            <el-form-item label="发票号:"
                          prop="invoiceNo">
              <el-input v-model="form.invoiceNo"
                        placeholder="请输入"
                        clearable />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item :label="`发票金额(元): 合同总额(${form.taxInclusiveTotalPrice}元)`" prop="invoiceTotal">
              <el-input-number :step="0.01" :min="0" :max="form.taxInclusiveTotalPrice" style="width: 100%" v-model="form.invoiceTotal" placeholder="请输入" clearable :precision="2"/>
            <el-form-item :label="`发票金额(元): 合同总额(${form.taxInclusiveTotalPrice}元)`"
                          prop="invoiceTotal">
              <el-input-number :step="0.01"
                               :min="0"
                               :max="form.noInvoiceAmount"
                               style="width: 100%"
                               v-model="form.invoiceTotal"
                               placeholder="请输入"
                               clearable
                               :precision="2" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="开票人:" prop="invoicePerson">
              <el-input v-model="form.invoicePerson" placeholder="请输入" clearable disabled />
            <el-form-item label="开票人:"
                          prop="invoicePerson">
              <el-input v-model="form.invoicePerson"
                        placeholder="请输入"
                        clearable
                        disabled />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="开票日期:" prop="invoiceDate">
              <el-date-picker style="width: 100%" v-model="form.invoiceDate" value-format="YYYY-MM-DD"
                format="YYYY-MM-DD" type="date" placeholder="请选择" clearable />
            <el-form-item label="开票日期:"
                          prop="invoiceDate">
              <el-date-picker style="width: 100%"
                              v-model="form.invoiceDate"
                              value-format="YYYY-MM-DD"
                              format="YYYY-MM-DD"
                              type="date"
                              placeholder="请选择"
                              clearable />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="附件材料:" prop="remark">
              <el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload
                :headers="upload.headers" accept=".pdf" :limit="10" :before-upload="handleBeforeUpload"
                :on-error="handleUploadError" :on-success="handleUploadSuccess">
            <el-form-item label="附件材料:"
                          prop="remark">
              <el-upload v-model:file-list="fileList"
                         :action="upload.url"
                         multiple
                         ref="fileUpload"
                         auto-upload
                         :headers="upload.headers"
                         accept=".pdf"
                         :limit="10"
                         :before-upload="handleBeforeUpload"
                         :on-error="handleUploadError"
                         :on-success="handleUploadSuccess">
                <el-button type="primary">上传</el-button>
                <template #tip>
                  <!--                  文件格式支持 doc,docx,xls,xlsx,ppt,pptx,pdf,txt,xml,jpg,jpeg,png,gif,bmp,rar,zip,7z-->
@@ -121,18 +240,32 @@
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitForm">确认</el-button>
          <el-button type="primary"
                     @click="submitForm">确认</el-button>
          <el-button @click="closeDia">取消</el-button>
        </div>
      </template>
    </el-dialog>
    <el-dialog title="上传弹窗" width="50%" v-model="uploadModal">
    <el-dialog title="上传弹窗"
               width="50%"
               v-model="uploadModal">
      <el-row :gutter="30">
        <el-col :span="24">
          <el-form-item label="附件材料:" prop="remark">
            <el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload
              :headers="upload.headers" accept=".pdf" :limit="10" style="width: 100%" :on-exceed="handleExceed"
              :before-upload="handleBeforeUpload" :on-error="handleUploadError" :on-success="handleUploadSuccess"
          <el-form-item label="附件材料:"
                        prop="remark">
            <el-upload v-model:file-list="fileList"
                       :action="upload.url"
                       multiple
                       ref="fileUpload"
                       auto-upload
                       :headers="upload.headers"
                       accept=".pdf"
                       :limit="10"
                       style="width: 100%"
                       :on-exceed="handleExceed"
                       :before-upload="handleBeforeUpload"
                       :on-error="handleUploadError"
                       :on-success="handleUploadSuccess"
              :on-remove="handleRemove">
              <el-button type="primary">上传</el-button>
              <template #tip>
@@ -144,7 +277,8 @@
      </el-row>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="commiInvoicetFile" type="primary">确认</el-button>
          <el-button @click="commiInvoicetFile"
                     type="primary">确认</el-button>
          <el-button @click="uploadModal = false">取消</el-button>
        </div>
      </template>
@@ -239,7 +373,7 @@
  page.current = 1;
  getList();
};
const paginationChange = (obj) => {
  const paginationChange = obj => {
  page.current = obj.page;
  page.size = obj.limit;
  getList();
@@ -251,31 +385,31 @@
  const params = { ...rest, ...page };
  // 移除开票日期的默认值设置,只保留范围日期字段
  delete params.invoiceDate;
  registrationProductPage(params).then((res) => {
    registrationProductPage(params).then(res => {
    tableLoading.value = false;
    tableData.value = res.data.records;
    total.value = res.data.total;
  });
};
// 表格选择数据
const handleSelectionChange = (selection) => {
  const handleSelectionChange = selection => {
  selectedRows.value = selection;
};
// 主表合计方法
const summarizeMainTable = (param) => {
  const summarizeMainTable = param => {
  return proxy.summarizeTable(param, ["invoiceTotal"], {
    ticketsNum: { noDecimal: true }, // 不保留小数
    futureTickets: { noDecimal: true }, // 不保留小数
  });
};
// 打开弹框
const openForm = (row) => {
  const openForm = row => {
  form.value = {};
  productData.value = [];
  fileList.value = [];
  currentId.value = row.id;
  invoiceLedgerProductInfo({ id: row.id }).then((res) => {
    invoiceLedgerProductInfo({ id: row.id }).then(res => {
    form.value = { ...res.data };
    fileList.value = res.data.fileList;
    // 保存ticketRegistrationId到表单数据中
@@ -291,7 +425,7 @@
  dialogFormVisible.value = true;
};
// 上传多个文件就覆盖原来的
const handleExceed = (files) => {
  const handleExceed = files => {
  proxy.$refs["fileUpload"].clearFiles();
  const file = files[0];
  file.uid = genFileId();
@@ -310,7 +444,7 @@
    proxy.$modal.msgError("文件格式不匹配");
    return false;
  }
  console.log('handleBeforeUpload');
    console.log("handleBeforeUpload");
  proxy.$modal.loading("正在上传文件,请稍候...");
  return true;
}
@@ -322,17 +456,19 @@
// 上传成功回调
function handleUploadSuccess(res, file, uploadFiles) {
  proxy.$modal.closeLoading();
  console.log('handleUploadSuccess');
    console.log("handleUploadSuccess");
  if (res.code === 200) {
    proxy.$modal.msgSuccess("上传成功");
    // 将上传成功的文件信息添加到fileList中
    const fileInfo = {
      name: file.name,
      url: res.data.url || file.response?.data?.url || file.url,
      response: file.response
        response: file.response,
    };
    // 检查是否已存在相同文件,避免重复添加
    const existingFileIndex = fileList.value.findIndex(f => f.name === fileInfo.name);
      const existingFileIndex = fileList.value.findIndex(
        f => f.name === fileInfo.name
      );
    if (existingFileIndex === -1) {
      fileList.value.push(fileInfo);
    } else {
@@ -347,10 +483,10 @@
}
// 提交表单
const submitForm = () => {
  proxy.$refs["formRef"].validate((valid) => {
    proxy.$refs["formRef"].validate(valid => {
    if (valid) {
      form.value.fileList = fileList.value;
      invoiceLedgerSaveOrUpdate(form.value).then((res) => {
        invoiceLedgerSaveOrUpdate(form.value).then(res => {
        proxy.$modal.msgSuccess("提交成功");
        closeDia();
        getList();
@@ -384,7 +520,7 @@
    fileList: fileList.value,
    id: currentId.value,
  };
  commitFile(object).then((res) => {
    commitFile(object).then(res => {
    if (res.code === 200) {
      proxy.$modal.msgSuccess("提交成功");
      uploadModal.value = false;
@@ -395,14 +531,14 @@
  });
};
// 删除开票台账
const delInvoiceLedger = (row) => {
  const delInvoiceLedger = row => {
  ElMessageBox.confirm("该发票台账将被删除,是否确认删除", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      delInvoiceLedgerByRegProductId(row.id).then((res) => {
        delInvoiceLedgerByRegProductId(row.id).then(res => {
                proxy.$modal.msgSuccess("删除成功");
        getList();
      });
@@ -420,7 +556,7 @@
  const day = String(today.getDate()).padStart(2, "0");
  return `${year}-${month}-${day}`;
}
const changeDateRange = (date) => {
  const changeDateRange = date => {
  if (date) {
    searchForm.invoiceDateStart = date[0];
    searchForm.invoiceDateEnd = date[1];
@@ -428,8 +564,8 @@
  }
};
const handleFile = (commonFiles) => {
  commonFiles.forEach((e) => {
  const handleFile = commonFiles => {
    commonFiles.forEach(e => {
    proxy.$download.name(e.url);
  });
};
@@ -442,17 +578,17 @@
};
//附件相关
const fileListRef = ref(null)
  const fileListRef = ref(null);
//查看附件
const downLoadFile = (row) => {
    invoiceLedgerProductInfo({ id: row.id }).then((res) => {
        fileListRef.value.open(res.data.fileList)
  const downLoadFile = row => {
    invoiceLedgerProductInfo({ id: row.id }).then(res => {
      fileListRef.value.open(res.data.fileList);
    });
}
  };
onMounted(() => {
  // 设置开票日期范围默认值为当天
  const today = dayjs().format('YYYY-MM-DD');
    const today = dayjs().format("YYYY-MM-DD");
  searchForm.invoiceDate = [today, today];
  // 设置范围日期字段的起始和结束时间
  searchForm.invoiceDateStart = today;