gaoluyang
6 小时以前 07f9f8657d057a38792c3822acc9b08d83478967
src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -42,39 +42,80 @@
    </el-form>
    <div class="table_list">
      <PIMTable
        rowKey="id"
        :column="columns"
        :tableLoading="loading"
        :tableData="dataList"
        :isSelection="true"
        height="calc(100vh - 19.5em)"
        :isShowSummary="true"
        :summaryMethod="summarizeMainTable"
        :page="{
          current: pagination.currentPage,
          size: pagination.pageSize,
          total: pagination.total,
        }"
        :handleSelectionChange="handleSelectionChange"
        @pagination="onCurrentChange"
        @selection-change="handleSelectionChange"
        @pagination="changePage"
      >
        <!-- <template #operation>
          <el-button type="primary" text @click="handleEdit" size="small">
        <template #operation="{ row }">
          <el-button
            type="primary"
            link
            @click="openEdit(row)"
          >
            编辑
          </el-button>
        </template> -->
          <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([]);
@@ -98,75 +139,85 @@
    {
      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 parseFloat(cell).toFixed(2);
        return cell ? parseFloat(cell).toFixed(2) : 0;
      },
    },
    {
      label: "开票日期",
      prop: "createdAt",
      align: "center",
      width: 110,
    },
    {
      label: "开票金额",
      prop: "ticketsAmount",
      align: "center",
      width: 200,
      formatData: (cell) => {
        return parseFloat(cell).toFixed(2);
        return cell ? parseFloat(cell).toFixed(2) : 0;
      },
    },
    {
      label: "不含税金额",
      prop: "unTicketsPrice",
      align: "center",
      width: 200,
      formatData: (cell) => {
        return parseFloat(cell).toFixed(2);
        return cell ? parseFloat(cell).toFixed(2) : 0;
      },
    },
    {
      label: "增值税",
      prop: "invoiceAmount",
      width: 200,
    },
    {
      label: "录入人",
      prop: "issUer",
      width: 200,
    },
    {
      fixed: "right",
      width: 200,
      label: "操作",
      dataType: "slot",
      slot: "operation",
      align: "center",
    },
    // {
    //   fixed: "right",
    //   width: 120,
    //   label: "操作",
    //   dataType: "slot",
    //   slot: "operation",
    //   align: "center",
    // },
  ],
  {},
  {
@@ -176,6 +227,34 @@
    }),
  }
);
const summarizeMainTable = (param) => {
  const sums = proxy.summarizeTable(
    param,
    ["ticketsAmount", "unTicketsPrice", "invoiceAmount"],
    {
      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) => {
  multipleVal.value = val;
@@ -196,7 +275,45 @@
    });
};
// const handleEdit = () => {};
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(() => {
  getTableData();
@@ -207,4 +324,7 @@
.table_list {
  margin-top: unset;
}
.tagBox {
  margin-top: 4px;
}
</style>