maven
2 天以前 5fbfc19daae6017e0522b281b39ab102a685c06d
Merge remote-tracking branch 'origin/dev' into dev
已修改4个文件
已添加3个文件
463 ■■■■■ 文件已修改
src/api/procurementManagement/procurementInvoiceLedger.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/Modal.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/components/Modal.vue 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Form/EditForm.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Modal/UploadModal.vue 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/index.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/procurementManagement/procurementInvoiceLedger.js
@@ -66,3 +66,27 @@
    params: query,
  });
}
export function productUploadFile(data) {
  return request({
    url: "/file/uploadFile",
    method: "post",
    data: data,
  });
}
export function getProductRecordById(params) {
  return request({
    url: "/purchase/registration/getProductRecordById",
    method: "get",
    params: params,
  });
}
export function updateRegistration(data) {
  return request({
    url: "/purchase/registration/updateRegistration",
    method: "post",
    data: data,
  });
}
src/views/equipmentManagement/ledger/Modal.vue
@@ -48,8 +48,8 @@
};
const close = () => {
  closeModal();
  formRef.value.resetForm();
  closeModal();
};
const loadForm = async (id) => {
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/Form/EditForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
<template>
  <el-form :model="form">
    <el-row :gutter="20">
      <el-col :span="12">
        <el-form-item label="采购合同号:">
          <el-tag size="large">{{ form.purchaseContractNumber }}</el-tag>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="销售合同号:">
          <el-text>{{ form.salesContractNo }}</el-text>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="来票金额:">
          <el-text type="primary">{{ form.taxInclusiveTotalPrice }}</el-text>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="创建时间:">
          <el-text>{{ form.createdAt }}</el-text>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="发票号:">
          <el-input v-model="form.invoiceNumber" />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="来票数:">
          <el-input v-model="form.ticketsNum" @input="inputTicketsNum" />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="来票金额:">
          <el-text type="success">{{ form.ticketsAmount }}</el-text>
        </el-form-item>
      </el-col>
    </el-row>
  </el-form>
</template>
<script setup>
import useFormData from "@/hooks/useFormData";
import { getProductRecordById } from "@/api/procurementManagement/procurementInvoiceLedger";
defineOptions({
  name: "来票台账表单",
});
const { form, resetForm } = useFormData({
  id: undefined,
  purchaseContractNumber: undefined, // é‡‡è´­åˆåŒå·
  salesContractNo: undefined, // é”€å”®åˆåŒå·
  createdAt: undefined, // åˆ›å»ºæ—¶é—´
  invoiceNumber: undefined, // å‘票号
  ticketsNum: undefined, // æ¥ç¥¨æ•°
  ticketsAmount: undefined, // æ¥ç¥¨é‡‘额
  taxInclusiveTotalPrice: undefined, // å«ç¨Žæ€»ä»·
});
const load = async (id) => {
  const { code, data } = await getProductRecordById({ id });
  if (code === 200) {
    form.id = data.id;
    form.purchaseContractNumber = data.purchaseContractNumber;
    form.salesContractNo = data.salesContractNo;
    form.createdAt = data.createdAt;
    form.invoiceNumber = data.invoiceNumber;
    form.ticketsNum = data.ticketsNum;
    form.ticketsAmount = data.ticketsAmount.toFixed(2);
    form.taxInclusiveTotalPrice = data.taxInclusiveTotalPrice;
  }
};
const inputTicketsNum = (val) => {
  form.ticketsAmount = (val * form.taxInclusiveTotalPrice).toFixed(2);
};
defineExpose({
  load,
  form,
  resetForm,
});
</script>
<style lang="scss" scoped></style>
src/views/procurementManagement/procurementInvoiceLedger/Modal/EditModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
<template>
  <el-dialog :title="modalOptions.title" v-model="visible" @close="close">
    <EditForm ref="editFormRef" />
    <template #footer>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
      <el-button type="primary" :loading="loading" @click="sendForm">
        {{ modalOptions.confirmText }}
      </el-button>
    </template>
  </el-dialog>
</template>
<script setup>
import { useModal } from "@/hooks/useModal";
import EditForm from "../Form/EditForm.vue";
import { updateRegistration } from "@/api/procurementManagement/procurementInvoiceLedger";
import { ElMessage } from "element-plus";
defineOptions({
  name: "来票台账编辑",
});
const emits = defineEmits(["success"]);
const editFormRef = ref();
const {
  id,
  visible,
  loading,
  openModal,
  modalOptions,
  handleConfirm,
  closeModal,
} = useModal({ title: "来票台账" });
const open = async (id) => {
  openModal(id);
  await nextTick();
  editFormRef.value.load(id);
};
const close = () => {
  editFormRef.value.resetForm();
  closeModal();
};
const sendForm = async () => {
  const form = editFormRef.value.form;
  const { code } = await updateRegistration(form);
  if (code === 200) {
    emits("success");
    ElMessage({ message: "操作成功", type: "success" });
    close();
  }
};
defineExpose({
  open,
});
</script>
src/views/procurementManagement/procurementInvoiceLedger/Modal/UploadModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
<template>
  <el-dialog v-model="upload.open" :title="upload.title" :width="500">
    <FileUpload
      ref="fileUploadRef"
      accept=".xlsx, .xls, .pdf"
      :headers="upload.headers"
      :autoUpload="true"
      :action="upload.url"
      :disabled="upload.isUploading"
      :showTip="false"
      :limit="10"
      @success="handleFileSuccess"
      @remove="removeFile"
    />
    <template #footer>
      <div class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">ç¡® å®š</el-button>
        <el-button @click="upload.open = false">取 æ¶ˆ</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<script setup>
import { reactive } from "vue";
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({
  // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚(供应商导入)
  open: false,
  // å¼¹å‡ºå±‚标题(供应商导入)
  title: "",
  // æ˜¯å¦ç¦ç”¨ä¸Šä¼ 
  isUploading: false,
  // è®¾ç½®ä¸Šä¼ çš„请求头部
  headers: { Authorization: "Bearer " + getToken() },
  // ä¸Šä¼ çš„地址
  url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
});
// ç‚¹å‡»å¯¼å…¥
const handleImport = (id) => {
  form.id = id;
  upload.open = true;
  upload.title = "来票台账附件补充";
};
const submitFileForm = () => {
  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" });
  } else {
    ElMessage({ message: msg, type: "error" });
  }
};
const removeFile = (file) => {
  const { tempId } = file.response.data;
  form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId);
};
defineExpose({
  handleImport,
});
</script>
src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -59,33 +59,66 @@
        @pagination="changePage"
      >
        <template #commonFilesRef="{ 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
                  v-if="row.commonFiles.length !== 0"
                  :icon="Download"
                  command="download"
                >
                  ä¸‹è½½
                </el-dropdown-item>
                <el-dropdown-item :icon="Upload" command="upload">
                  ä¸Šä¼ 
                </el-dropdown-item>
              </el-dropdown-menu>
            </template>
          </el-dropdown>
        </template>
        <template #operation="{ row }">
          <el-button
            v-if="row.commonFiles.length !== 0"
            type="primary"
            text
            icon="Files"
            type="danger"
            @click="handleFiles(row.commonFiles)"
            :icon="EditPen"
            @click="openEdit(row.id)"
          >
            é™„件下载
            ç¼–辑
          </el-button>
          <el-text v-else type="danger">暂无附件</el-text>
        </template>
      </PIMTable>
    </div>
    <UploadModal ref="modalRef" @uploadSuccess="uploadSuccess"></UploadModal>
    <EditModal ref="editmodalRef" @success="getTableData"></EditModal>
  </div>
</template>
<script setup>
import { ref, getCurrentInstance } from "vue";
import { usePaginationApi } from "@/hooks/usePaginationApi";
import { Search } from "@element-plus/icons-vue";
import { productRecordPage } from "@/api/procurementManagement/procurementInvoiceLedger.js";
import {
  Files,
  Download,
  Search,
  Upload,
  EditPen,
} from "@element-plus/icons-vue";
import {
  productRecordPage,
  productUploadFile,
} from "@/api/procurementManagement/procurementInvoiceLedger.js";
import { onMounted } from "vue";
import { ElMessageBox } from "element-plus";
import UploadModal from "./Modal/UploadModal.vue";
import EditModal from "./Modal/EditModal.vue";
defineOptions({
  name: "来票台账",
});
const modalRef = ref();
const editmodalRef = ref();
const { proxy } = getCurrentInstance();
const multipleVal = ref([]);
@@ -178,14 +211,14 @@
      slot: "commonFilesRef",
      width: 150,
    },
    // {
    //   fixed: "right",
    //   width: 120,
    //   label: "操作",
    //   dataType: "slot",
    //   slot: "operation",
    //   align: "center",
    // },
    {
      fixed: "right",
      width: 120,
      label: "操作",
      dataType: "slot",
      slot: "operation",
      align: "center",
    },
  ],
  {},
  {
@@ -243,6 +276,38 @@
  onCurrentChange(page);
};
const handleCommand = (command, row) => {
  switch (command) {
    case "download":
      handleFiles(row.commonFiles);
      break;
    case "upload":
      console.log(row.commonFiles);
      openUoload(row.ticketRegistrationId);
      break;
  }
};
const openUoload = (id) => {
  modalRef.value.handleImport(id);
};
const openEdit = (id) => {
  editmodalRef.value.open(id);
};
// ä¸Šä¼ æˆåŠŸåŽåšä»€ä¹ˆ
const uploadSuccess = async (data) => {
  const { code } = await productUploadFile({
    ticketRegistrationId: data.id,
    tempFileIds: data.tempFileIds,
  });
  if (code === 200) {
    proxy.$modal.msgSuccess("提交成功");
    getTableData();
  }
};
onMounted(() => {
  getTableData();
});