From 261f2ed00235d47df3754291a4fdca9ba5cb8e7a Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期四, 21 五月 2026 17:16:09 +0800
Subject: [PATCH] fix: 合并财务数据

---
 src/views/financialManagement/payable/purchaseIn.vue |  283 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 162 insertions(+), 121 deletions(-)

diff --git a/src/views/financialManagement/payable/purchaseIn.vue b/src/views/financialManagement/payable/purchaseIn.vue
index 4fadcbb..fcb768f 100644
--- a/src/views/financialManagement/payable/purchaseIn.vue
+++ b/src/views/financialManagement/payable/purchaseIn.vue
@@ -1,27 +1,39 @@
 <template>
   <!-- 閲囪喘鍏ュ簱 -->
   <div class="app-container">
-    <el-form :model="filters" :inline="true">
+    <el-form :model="filters"
+             :inline="true">
       <el-form-item label="鍏ュ簱鍗曞彿:">
-        <el-input v-model="filters.inboundBatches" placeholder="璇疯緭鍏ュ叆搴撳崟鍙�" clearable style="width: 200px;" />
+        <el-input v-model="filters.inboundBatches"
+                  placeholder="璇疯緭鍏ュ叆搴撳崟鍙�"
+                  clearable
+                  style="width: 200px;" />
       </el-form-item>
       <el-form-item label="渚涘簲鍟�:">
-        <el-input v-model="filters.supplierName" placeholder="璇疯緭鍏ヤ緵搴斿晢" clearable style="width: 200px;" />
+        <el-select v-model="filters.supplierId"
+                   placeholder="璇烽�夋嫨渚涘簲鍟�"
+                   clearable
+                   filterable
+                   style="width: 200px;">
+          <el-option v-for="item in supplierList"
+                     :key="item.id"
+                     :label="item.supplierName"
+                     :value="item.id" />
+        </el-select>
       </el-form-item>
       <el-form-item label="鍏ュ簱鏃ユ湡:">
-        <el-date-picker
-          v-model="filters.dateRange"
-          value-format="YYYY-MM-DD"
-          format="YYYY-MM-DD"
-          type="daterange"
-          range-separator="鑷�"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-          clearable
-        />
+        <el-date-picker v-model="filters.dateRange"
+                        value-format="YYYY-MM-DD"
+                        format="YYYY-MM-DD"
+                        type="daterange"
+                        range-separator="鑷�"
+                        start-placeholder="寮�濮嬫棩鏈�"
+                        end-placeholder="缁撴潫鏃ユ湡"
+                        clearable />
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" @click="onSearch">鎼滅储</el-button>
+        <el-button type="primary"
+                   @click="onSearch">鎼滅储</el-button>
         <el-button @click="resetFilters">閲嶇疆</el-button>
       </el-form-item>
     </el-form>
@@ -29,23 +41,22 @@
       <div class="actions">
         <div></div>
         <div>
-          <el-button @click="handleOut" icon="Download">瀵煎嚭</el-button>
+          <el-button @click="handleOut"
+                     icon="Download">瀵煎嚭</el-button>
         </div>
       </div>
-      <PIMTable
-        rowKey="id"
-        :column="columns"
-        :tableData="dataList"
-        :tableLoading="tableLoading"
-        :page="{
+      <PIMTable rowKey="id"
+                :column="columns"
+                :tableData="dataList"
+                :tableLoading="tableLoading"
+                :page="{
           current: pagination.currentPage,
           size: pagination.pageSize,
           total: pagination.total,
         }"
-        @pagination="changePage"
-      >
+                @pagination="changePage">
         <template #inboundDate="{ row }">
-          {{ row.InboundDate || row.inboundDate || "" }}
+          {{ row.inboundDate ?? row.InboundDate ?? "" }}
         </template>
       </PIMTable>
     </div>
@@ -53,119 +64,149 @@
 </template>
 
 <script setup>
-import { ref, reactive, onMounted, getCurrentInstance } from "vue";
-import { ElMessage } from "element-plus";
-import { listPageAccountPurchase } from "@/api/financialManagement/accountPurchase";
+  import { ref, reactive, onMounted, getCurrentInstance } from "vue";
+  import { ElMessage } from "element-plus";
+  import { listPageAccountPurchase } from "@/api/financialManagement/accountPurchase";
+  import { listSupplier } from "@/api/basicData/supplierManageFile.js";
 
-defineOptions({
-  name: "閲囪喘鍏ュ簱",
-});
+  defineOptions({
+    name: "閲囪喘鍏ュ簱",
+  });
 
-const { proxy } = getCurrentInstance();
+  const { proxy } = getCurrentInstance();
 
-const filters = reactive({
-  inboundBatches: "",
-  supplierName: "",
-  dateRange: [],
-});
+  const filters = reactive({
+    inboundBatches: "",
+    supplierId: "",
+    dateRange: [],
+  });
 
-const pagination = reactive({
-  currentPage: 1,
-  pageSize: 10,
-  total: 0,
-});
+  const pagination = reactive({
+    currentPage: 1,
+    pageSize: 10,
+    total: 0,
+  });
 
-const columns = [
-  { label: "鍏ュ簱鍗曞彿", prop: "inboundBatches", minWidth: "150" },
-  { label: "渚涘簲鍟�", prop: "supplierName", minWidth: "180" },
-  {
-    label: "鍏ュ簱鏃ユ湡",
-    prop: "InboundDate",
-    minWidth: "170",
-    dataType: "slot",
-    slot: "inboundDate",
-  },
-  { label: "浜у搧鍚嶇О", prop: "productName", minWidth: "140" },
-  { label: "浜у搧瑙勬牸", prop: "specificationModel", minWidth: "140" },
-  { label: "閲囪喘璁㈠崟鍙�", prop: "purchaseContractNumber", minWidth: "150" },
-];
+  const columns = [
+    { label: "鍏ュ簱鍗曞彿", prop: "inboundBatches", minWidth: "150" },
+    { label: "渚涘簲鍟�", prop: "supplierName", minWidth: "180" },
+    {
+      label: "鍏ュ簱鏃ユ湡",
+      prop: "inboundDate",
+      minWidth: "170",
+      dataType: "slot",
+      slot: "inboundDate",
+    },
+    { label: "浜у搧鍚嶇О", prop: "productName", minWidth: "140" },
+    { label: "浜у搧瑙勬牸", prop: "specificationModel", minWidth: "140" },
+    {
+      label: "閲戦",
+      prop: "inboundAmount",
+      minWidth: "120",
+      align: "right",
+      formatData: val =>
+        val === null || val === undefined || val === ""
+          ? ""
+          : Number(val).toLocaleString("zh-CN", {
+              minimumFractionDigits: 2,
+              maximumFractionDigits: 2,
+            }),
+    },
+    { label: "閲囪喘璁㈠崟鍙�", prop: "purchaseContractNumber", minWidth: "150" },
+  ];
 
-const dataList = ref([]);
-const tableLoading = ref(false);
+  const dataList = ref([]);
+  const tableLoading = ref(false);
+  const supplierList = ref([]);
 
-function buildFilterParams() {
-  const params = {
-    inboundBatches: filters.inboundBatches || undefined,
-    supplierName: filters.supplierName || undefined,
+  const buildFilterParams = () => {
+    const params = {};
+    if (filters.inboundBatches) {
+      params.inboundBatches = filters.inboundBatches;
+    }
+    if (filters.supplierId) {
+      params.supplierId = filters.supplierId;
+    }
+    if (filters.dateRange?.length === 2) {
+      params.startDate = filters.dateRange[0];
+      params.endDate = filters.dateRange[1];
+    }
+    return params;
   };
-  if (filters.dateRange && filters.dateRange.length === 2) {
-    params.startDate = filters.dateRange[0];
-    params.endDate = filters.dateRange[1];
-  }
-  return params;
-}
 
-const onSearch = () => {
-  pagination.currentPage = 1;
-  getTableData();
-};
-
-const getTableData = () => {
-  tableLoading.value = true;
-  listPageAccountPurchase({
-    ...buildFilterParams(),
-    current: pagination.currentPage,
-    size: pagination.pageSize,
-  })
-    .then((res) => {
-      const ok = res.code === 200 || res.code === 0;
-      if (ok && res.data) {
-        pagination.total = res.data.total ?? 0;
-        dataList.value = res.data.records ?? [];
-      } else {
-        ElMessage.error(res.msg || "鏌ヨ澶辫触");
-        dataList.value = [];
+  const getSupplierList = () => {
+    listSupplier({ current: -1, size: -1, isWhite: 0 }).then(res => {
+      if (res.code === 200) {
+        supplierList.value = res.data?.records ?? [];
       }
-    })
-    .catch(() => {
-      dataList.value = [];
-    })
-    .finally(() => {
-      tableLoading.value = false;
     });
-};
+  };
 
-const resetFilters = () => {
-  filters.inboundBatches = "";
-  filters.supplierName = "";
-  filters.dateRange = [];
-  pagination.currentPage = 1;
-  getTableData();
-};
+  const onSearch = () => {
+    pagination.currentPage = 1;
+    getTableData();
+  };
 
-const changePage = ({ page, limit }) => {
-  pagination.currentPage = page;
-  pagination.pageSize = limit;
-  getTableData();
-};
+  const getTableData = () => {
+    tableLoading.value = true;
+    listPageAccountPurchase({
+      ...buildFilterParams(),
+      current: pagination.currentPage,
+      size: pagination.pageSize,
+    })
+      .then(res => {
+        const ok = res.code === 200 || res.code === 0;
+        if (ok && res.data) {
+          pagination.total = res.data.total ?? 0;
+          dataList.value = res.data.records ?? [];
+        } else {
+          ElMessage.error(res.msg || "鏌ヨ澶辫触");
+          dataList.value = [];
+          pagination.total = 0;
+        }
+      })
+      .catch(() => {
+        dataList.value = [];
+        pagination.total = 0;
+        ElMessage.error("鏌ヨ澶辫触");
+      })
+      .finally(() => {
+        tableLoading.value = false;
+      });
+  };
 
-const handleOut = () => {
-  proxy.download(
-    "/accountPurchase/exportAccountPurchaseInbound",
-    buildFilterParams(),
-    `閲囪喘鍏ュ簱_${new Date().getTime()}.xlsx`
-  );
-};
+  const resetFilters = () => {
+    filters.inboundBatches = "";
+    filters.supplierId = "";
+    filters.dateRange = [];
+    pagination.currentPage = 1;
+    getTableData();
+  };
 
-onMounted(() => {
-  getTableData();
-});
+  const changePage = ({ page, limit }) => {
+    pagination.currentPage = page;
+    pagination.pageSize = limit;
+    getTableData();
+  };
+
+  const handleOut = () => {
+    proxy.download(
+      "/accountPurchase/exportAccountPurchaseInbound",
+      buildFilterParams(),
+      `閲囪喘鍏ュ簱_${Date.now()}.xlsx`
+    );
+  };
+
+  onMounted(() => {
+    getSupplierList();
+    getTableData();
+  });
 </script>
 
 <style lang="scss" scoped>
-.actions {
-  display: flex;
-  justify-content: space-between;
-  margin-bottom: 15px;
-}
+  .actions {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 15px;
+  }
 </style>

--
Gitblit v1.9.3