曹睿
3 天以前 3ef6a3a2bac778e2a224d6e437305b9f71d3799c
feat: 【来票台账】添加附件上传
已修改4个文件
184 ■■■■ 文件已修改
src/api/procurementManagement/procurementInvoiceLedger.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/components/Modal.vue 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Modal/UploadModal.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/index.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/procurementInvoiceLedger.js
@@ -66,3 +66,11 @@
    params: query,
  });
}
export function productUploadFile(data) {
  return request({
    url: "/file/uploadFile",
    method: "post",
    data: data,
  });
}
src/views/procurementManagement/invoiceEntry/components/Modal.vue
@@ -1,6 +1,12 @@
<template>
  <el-dialog :title="modalOptions.title" v-model="visible" width="70%">
    <el-form ref="formRef" :model="form" :rules="rules" label-width="120px" label-position="top">
    <el-form
      ref="formRef"
      :model="form"
      :rules="rules"
      label-width="120px"
      label-position="top"
    >
      <el-row :gutter="30">
        <el-col :span="12">
          <el-form-item label="采购合同号:" prop="purchaseLedgerNo">
@@ -9,61 +15,130 @@
        </el-col>
        <el-col :span="12">
          <el-form-item label="销售合同号:" prop="salesContractNo">
            <el-input v-model="form.salesContractNo" placeholder="自动填充" clearable disabled />
            <el-input
              v-model="form.salesContractNo"
              placeholder="自动填充"
              clearable
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="供应商名称:" prop="supplierName">
            <el-input v-model="form.supplierName" placeholder="自动填充" clearable disabled />
            <el-input
              v-model="form.supplierName"
              placeholder="自动填充"
              clearable
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="项目名称:" prop="projectName">
            <el-input v-model="form.projectName" placeholder="自动填充" clearable disabled />
            <el-input
              v-model="form.projectName"
              placeholder="自动填充"
              clearable
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="发票号:" prop="invoiceNumber">
            <el-input v-model="form.invoiceNumber" placeholder="请输入" clearable />
            <el-input
              v-model="form.invoiceNumber"
              placeholder="请输入"
              clearable
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="发票金额(元):" prop="invoiceAmount">
            <el-input type="number" :step="0.01" :min="0" v-model="form.invoiceAmount" placeholder="自动填充" clearable />
            <el-input
              type="number"
              :step="0.01"
              :min="0"
              v-model="form.invoiceAmount"
              placeholder="自动填充"
              clearable
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="录入人:" prop="issUer">
            <el-input v-model="form.issUer" placeholder="请输入" clearable disabled />
            <el-input
              v-model="form.issUer"
              placeholder="请输入"
              clearable
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="开票日期:" prop="entryDate">
            <el-date-picker style="width: 100%" v-model="form.entryDate" type="date" clearable />
            <el-date-picker
              style="width: 100%"
              v-model="form.entryDate"
              type="date"
              clearable
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="上传附件">
            <FileUpload :showTip="false" accept="*" :autoUpload="true" :action="action" :headers="{
              Authorization: 'Bearer ' + getToken(),
            }" :limit="10" @success="uploadSuccess" @remove="removeFile" />
            <FileUpload
              :showTip="false"
              accept="*"
              :autoUpload="true"
              :action="action"
              :headers="{
                Authorization: 'Bearer ' + getToken(),
              }"
              :limit="10"
              @success="uploadSuccess"
              @remove="removeFile"
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="录入日期:" prop="enterDate">
            <el-date-picker style="width: 100%" v-model="form.enterDate" type="date" clearable />
            <el-date-picker
              style="width: 100%"
              v-model="form.enterDate"
              type="date"
              clearable
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-form-item label="产品信息:"> </el-form-item>
      <PIMTable rowKey="id" :column="columns" :tableData="form.productData" height="auto">
      <PIMTable
        rowKey="id"
        :column="columns"
        :tableData="form.productData"
        height="auto"
      >
        <template #ticketsNumRef="{ row }">
          <el-input-number v-model="row.ticketsNum" placeholder="请选择" :min="0" :step="0.1" clearable style="width: 100%"
            @change="invoiceNumBlur(row)" />
          <el-input-number
            v-model="row.ticketsNum"
            placeholder="请选择"
            :min="0"
            :step="0.1"
            clearable
            style="width: 100%"
            @change="invoiceNumBlur(row)"
          />
        </template>
        <template #ticketsAmountRef="{ row }">
          <el-input-number v-model="row.ticketsAmount" placeholder="请选择" :min="0" :step="0.1" clearable
            style="width: 100%" @change="invoiceAmountBlur(row)" />
          <el-input-number
            v-model="row.ticketsAmount"
            placeholder="请选择"
            :min="0"
            :step="0.1"
            clearable
            style="width: 100%"
            @change="invoiceAmountBlur(row)"
          />
        </template>
      </PIMTable>
    </el-form>
src/views/procurementManagement/procurementInvoiceLedger/Modal/UploadModal.vue
@@ -2,12 +2,15 @@
  <el-dialog v-model="upload.open" :title="upload.title" :width="500">
    <FileUpload
      ref="fileUploadRef"
      accept=".xlsx, .xls"
      accept=".xlsx, .xls, .pdf"
      :headers="upload.headers"
      :action="upload.url + '?updateSupport=' + upload.updateSupport"
      :autoUpload="true"
      :action="upload.url"
      :disabled="upload.isUploading"
      :showTip="false"
      :limit="10"
      @success="handleFileSuccess"
      @remove="removeFile"
    />
    <template #footer>
      <div class="dialog-footer">
@@ -23,11 +26,17 @@
import { getToken } from "@/utils/auth.js";
import { FileUpload } from "@/components/Upload";
import { ElMessage } from "element-plus";
import { ref } from "vue";
import useFormData from "@/hooks/useFormData";
defineOptions({
  name: "来票台账附件补充",
});
const { form, resetForm } = useFormData({
  id: undefined,
  tempFileIds: [],
});
const emits = defineEmits(["uploadSuccess"]);
const fileUploadRef = ref();
const upload = reactive({
@@ -40,29 +49,36 @@
  // 设置上传的请求头部
  headers: { Authorization: "Bearer " + getToken() },
  // 上传的地址
  url: import.meta.env.VITE_APP_BASE_API + "/system/supplier/import",
  url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
});
// 点击导入
const handleImport = () => {
const handleImport = (id) => {
  form.id = id;
  upload.open = true;
  upload.title = "来票台账附件补充";
};
const submitFileForm = () => {
  fileUploadRef.value.uploadApi();
  upload.open = false;
  resetForm();
  emits("uploadSuccess", form);
};
const handleFileSuccess = (response) => {
  const { code, msg } = response;
  form.tempFileIds.push(response.data.tempId);
  if (code == 200) {
    ElMessage({ message: "导入成功", type: "success" });
    upload.open = false;
    emits("uploadSuccess");
  } else {
    ElMessage({ message: msg, type: "error" });
  }
};
const removeFile = (file) => {
  const { tempId } = file.response.data;
  form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId);
};
defineExpose({
  handleImport,
});
src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -59,14 +59,15 @@
        @pagination="changePage"
      >
        <template #commonFilesRef="{ row }">
          <el-dropdown
            v-if="row.commonFiles.length !== 0"
            @command="(command) => handleCommand(command, row)"
          >
          <el-dropdown @command="(command) => handleCommand(command, row)">
            <el-button link :icon="Files" type="danger"> 附件 </el-button>
            <template #dropdown>
              <el-dropdown-menu>
                <el-dropdown-item :icon="Download" command="download">
                <el-dropdown-item
                  v-if="row.commonFiles.length !== 0"
                  :icon="Download"
                  command="download"
                >
                  下载
                </el-dropdown-item>
                <el-dropdown-item :icon="Upload" command="upload">
@@ -75,11 +76,10 @@
              </el-dropdown-menu>
            </template>
          </el-dropdown>
          <el-text v-else type="danger">暂无附件</el-text>
        </template>
      </PIMTable>
    </div>
    <Modal ref="modalRef"></Modal>
    <Modal ref="modalRef" @uploadSuccess="uploadSuccess"></Modal>
  </div>
</template>
@@ -87,7 +87,10 @@
import { ref, getCurrentInstance } from "vue";
import { usePaginationApi } from "@/hooks/usePaginationApi";
import { Files, Download, Search, Upload } from "@element-plus/icons-vue";
import { productRecordPage } from "@/api/procurementManagement/procurementInvoiceLedger.js";
import {
  productRecordPage,
  productUploadFile,
} from "@/api/procurementManagement/procurementInvoiceLedger.js";
import { onMounted } from "vue";
import { ElMessageBox } from "element-plus";
import Modal from "./Modal/UploadModal.vue";
@@ -260,13 +263,25 @@
      break;
    case "upload":
      console.log(row.commonFiles);
      openModal();
      openModal(row.ticketRegistrationId);
      break;
  }
};
const openModal = () => {
  modalRef.value.handleImport();
const openModal = (id) => {
  modalRef.value.handleImport(id);
};
// 上传成功后做什么
const uploadSuccess = async (data) => {
  const { code } = await productUploadFile({
    ticketRegistrationId: data.id,
    tempFileIds: data.tempFileIds,
  });
  if (code === 200) {
    proxy.$modal.msgSuccess("提交成功");
    getTableData();
  }
};
onMounted(() => {