gaoluyang
6 小时以前 07f9f8657d057a38792c3822acc9b08d83478967
src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -47,45 +47,75 @@
        :tableLoading="loading"
        :tableData="dataList"
        :isSelection="true"
        height="calc(100vh - 15em)"
        height="calc(100vh - 19.5em)"
        :isShowSummary="true"
        :summaryMethod="summarizeMainTable"
        :page="{
          current: pagination.currentPage,
          size: pagination.pageSize,
          total: 0,
          total: pagination.total,
        }"
        @selection-change="handleSelectionChange"
        @pagination="onCurrentChange"
        @pagination="changePage"
      >
        <template #commonFilesRef="{ row }">
        <template #operation="{ row }">
          <el-button
            v-if="row.commonFiles.length !== 0"
            text
            icon="Files"
            type="danger"
            @click="handleFiles(row.commonFiles)"
            type="primary"
            link
            @click="openEdit(row)"
          >
            附件下载
            编辑
          </el-button>
          <el-text v-else type="danger">暂无附件</el-text>
          <el-button
            type="primary"
            link
            @click="openFileDialog(row)"
          >
            附件
          </el-button>
          <el-button
            type="primary"
            link
            @click="handleDelete(row)"
          >
            删除
          </el-button>
        </template>
      </PIMTable>
    </div>
    <FileList v-if="fileDialogVisible"  v-model:visible="fileDialogVisible" record-type="ticket_registration" :record-id="recordId"  />
    <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 {
   Search,
} from "@element-plus/icons-vue";
import {
   delRegistration,
   productRecordPage,
   delCommonFile,
} from "@/api/procurementManagement/procurementInvoiceLedger.js";
import request from "@/utils/request";
import { getToken } from "@/utils/auth";
import { onMounted } from "vue";
import { ElMessageBox } from "element-plus";
import EditModal from "./Modal/EditModal.vue";
import useUserStore from "@/store/modules/user.js";
const userStore = useUserStore();
const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
defineOptions({
  name: "来票台账",
});
const editmodalRef = ref();
const fileListRef = ref(null);
const fileListDialogVisible = ref(false);
const currentRowId = ref(null); // 当前查看附件的行ID
const { proxy } = getCurrentInstance();
const multipleVal = ref([]);
@@ -109,37 +139,42 @@
    {
      label: "采购合同号",
      prop: "purchaseContractNumber",
      align: "center",
      width: 150,
    },
    {
      label: "销售合同号",
      prop: "salesContractNo",
      align: "center",
      width: 150,
    },
    {
      label: "客户名称",
      prop: "customerName",
      align: "center",
      label: "项目名称",
      prop: "projectName",
      width: 240,
    },
    {
      label: "供应商名称",
      prop: "supplierName",
      align: "center",
      width: 240,
    },
    {
      label: "产品大类",
      prop: "productCategory",
      width: 150,
    },
    {
      label: "规格型号",
      prop: "specificationModel",
      align: "center",
      width: 150,
    },
    {
      label: "发票号",
      prop: "invoiceNumber",
      align: "center",
      width: 200,
    },
    {
      label: "合同金额(元)",
      prop: "taxInclusiveTotalPrice",
      align: "center",
      width: 200,
      formatData: (cell) => {
        return cell ? parseFloat(cell).toFixed(2) : 0;
      },
@@ -147,12 +182,12 @@
    {
      label: "开票日期",
      prop: "createdAt",
      align: "center",
      width: 110,
    },
    {
      label: "开票金额",
      prop: "ticketsAmount",
      align: "center",
      width: 200,
      formatData: (cell) => {
        return cell ? parseFloat(cell).toFixed(2) : 0;
      },
@@ -160,7 +195,7 @@
    {
      label: "不含税金额",
      prop: "unTicketsPrice",
      align: "center",
      width: 200,
      formatData: (cell) => {
        return cell ? parseFloat(cell).toFixed(2) : 0;
      },
@@ -168,24 +203,21 @@
    {
      label: "增值税",
      prop: "invoiceAmount",
      align: "center",
      width: 200,
    },
    {
      label: "附件",
      align: "center",
      prop: "commonFiles",
      dataType: "slot",
      slot: "commonFilesRef",
      width: 150,
      label: "录入人",
      prop: "issUer",
      width: 200,
    },
    // {
    //   fixed: "right",
    //   width: 120,
    //   label: "操作",
    //   dataType: "slot",
    //   slot: "operation",
    //   align: "center",
    // },
    {
      fixed: "right",
      width: 200,
      label: "操作",
      dataType: "slot",
      slot: "operation",
      align: "center",
    },
  ],
  {},
  {
@@ -196,21 +228,32 @@
  }
);
// 主表合计方法
const summarizeMainTable = (param) => {
  return proxy.summarizeTable(
  const sums = proxy.summarizeTable(
    param,
    [
      "taxInclusiveTotalPrice",
      "ticketsAmount",
      "unTicketsPrice",
      "invoiceAmount",
    ],
    ["ticketsAmount", "unTicketsPrice", "invoiceAmount"],
    {
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
      ticketsNum: { noDecimal: true },
      futureTickets: { noDecimal: true },
    }
  );
  const keySet = new Set();
  let taxInclusiveSum = 0;
  (param.data || []).forEach((row) => {
    const key = `${row.purchaseContractNumber ?? ""}\n${row.salesContractNo ?? ""}\n${row.productCategory ?? ""}\n${row.specificationModel ?? ""}`;
    if (keySet.has(key)) return;
    keySet.add(key);
    const val = Number(row.taxInclusiveTotalPrice);
    if (!isNaN(val)) taxInclusiveSum += val;
  });
  const taxInclusiveIndex = (param.columns || []).findIndex(
    (c) => c.property === "taxInclusiveTotalPrice"
  );
  if (taxInclusiveIndex !== -1) {
    sums[taxInclusiveIndex] = taxInclusiveSum.toFixed(2);
  }
  return sums;
};
const handleSelectionChange = (val) => {
@@ -232,10 +275,44 @@
    });
};
const handleFiles = (fileList) => {
  fileList.forEach((e) => {
    proxy.$download.name(e.url);
  });
const changePage = ({ page, limit }) => {
  pagination.currentPage = page;
   pagination.pageSize = limit;
  onCurrentChange(page);
};
// 打开附件弹窗
const recordId =ref(0)
const fileDialogVisible = ref(false)
// 打开附件弹框
const openFileDialog = async (row) => {
  recordId.value = row.id
  fileDialogVisible.value = true
}
const openEdit = (row) => {
  editmodalRef.value.open(row);
};
// 删除
const handleDelete = (row) => {
   let ids = [];
   ids.push(row.id);
   ElMessageBox.confirm("该开票台账将被删除,是否确认删除", {
      confirmButtonText: "确认",
      cancelButtonText: "取消",
      type: "warning",
   })
      .then(() => {
         loading.value = true;
         delRegistration(ids).then((res) => {
            getTableData();
         });
         loading.value = false;
      })
      .catch(() => {
         proxy.$modal.msg("已取消");
      });
};
onMounted(() => {