From a563ea879ef5fb6897e76d2df661e465dce2ab9b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 01 六月 2026 15:02:27 +0800
Subject: [PATCH] Merge branch 'dev_新疆_大罗素马铃薯new' of http://114.132.189.42:9002/r/product-inventory-management into dev_新疆_大罗素马铃薯new

---
 src/views/procurementManagement/paymentLedger/index.vue |  480 +++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 267 insertions(+), 213 deletions(-)

diff --git a/src/views/procurementManagement/paymentLedger/index.vue b/src/views/procurementManagement/paymentLedger/index.vue
index 4d24bbb..ba84a4c 100644
--- a/src/views/procurementManagement/paymentLedger/index.vue
+++ b/src/views/procurementManagement/paymentLedger/index.vue
@@ -1,90 +1,113 @@
 <template>
   <div class="app-container">
-    <div class="search_form">
+    <div class="search_form"
+         style="margin-bottom: 20px;">
       <div>
         <span class="search_title">渚涘簲鍟嗗悕绉�:</span>
-        <el-input
-          v-model="searchForm.supplierNameOrContractNo"
-          style="width: 240px"
-          placeholder="杈撳叆渚涘簲鍟嗗悕绉�"
-          @change="handleQuery"
-          clearable
-          :prefix-icon="Search"
-        />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-          >鎼滅储</el-button
-        >
+        <el-input v-model="searchForm.supplierName"
+                  style="width: 240px"
+                  placeholder="杈撳叆渚涘簲鍟嗗悕绉�"
+                  @change="handleQuery"
+                  clearable
+                  :prefix-icon="Search" />
+        <el-button type="primary"
+                   @click="handleQuery"
+                   style="margin-left: 10px">鎼滅储</el-button>
       </div>
       <div></div>
     </div>
-    <el-row>
-      <el-col :span="14">
+    <el-row :gutter="20">
+      <el-col :span="8">
         <div class="table_list">
-          <el-table
-            ref="multipleTable"
-            v-loading="tableLoading"
-            :data="tableData"
-            :header-cell-style="{ background: '#F0F1F5', color: '#333333' }"
-            height="calc(100vh - 18.5em)"
-            :highlight-current-row="true"
-            style="width: 100%"
-            tooltip-effect="dark"
-            @row-click="rowClick"
-            :show-summary="isShowSummary"
-            class="lims-table"
-          >
-            <el-table-column
-              align="center"
-              label="搴忓彿"
-              type="index"
-              width="60"
-            />
-            <el-table-column
-              v-for="(item, index) in tableColumn"
-              :key="index"
-              :column-key="item.columnKey"
-              :filter-method="item.filterHandler"
-              :filter-multiple="item.filterMultiple"
-              :filtered-value="item.filteredValue"
-              :filters="item.filters"
-              :fixed="item.fixed"
-              :label="item.label"
-              :prop="item.prop"
-              show-overflow-tooltip
-              :align="item.align"
-              :sortable="!!item.sortable"
-              :type="item.type"
-              :width="item.width"
-            >
+          <el-table ref="multipleTable"
+                    border
+                    v-loading="tableLoading"
+                    :data="tableData"
+                    :header-cell-style="{ background: '#F0F1F5', color: '#333333' }"
+                    height="calc(100vh - 18.5em)"
+                    :highlight-current-row="true"
+                    style="width: 100%"
+                    tooltip-effect="dark"
+                    @row-click="rowClick"
+                    :show-summary="isShowSummary"
+                    :summary-method="summarizeMainTable"
+                    class="lims-table">
+            <el-table-column align="center"
+                             label="搴忓彿"
+                             type="index"
+                             width="60" />
+            <el-table-column label="渚涘簲鍟嗗悕绉�"
+                             prop="supplierName" />
+            <el-table-column label="鍚堝悓閲戦(鍏�)"
+                             prop="contractAmounts"
+                             show-overflow-tooltip
+                             :formatter="formattedNumber" />
+            <el-table-column label="搴斾粯閲戦(鍏�)"
+                             prop="payableAmount"
+                             show-overflow-tooltip>
+              <template #default="{ row, column }">
+                <el-text type="danger">
+                  {{ formattedNumber(row, column, row.payableAmount) }}
+                </el-text>
+              </template>
             </el-table-column>
           </el-table>
-          <pagination
-              v-show="total > 0"
-              @pagination="paginationSearch"
-              :total="total"
-              :layout="page.layout"
-              :page="page.current"
-              :limit="page.size"
-          />
+          <pagination v-show="total > 0"
+                      @pagination="paginationSearch"
+                      :total="total"
+                      :layout="page.layout"
+                      :page="page.current"
+                      :limit="page.size" />
         </div>
       </el-col>
-      <el-col :span="10">
+      <el-col :span="16">
         <div class="table_list">
-          <PIMTable
-            :column="tableColumnSon"
-            :tableData="tableDataSon"
-            :isSelection="false"
-            :tableLoading="tableLoadingSon"
-            :isShowSummary="isShowSummarySon"
-          ></PIMTable>
-          <pagination
-              v-show="sonTotal > 0"
-              :total="sonTotal"
-              @pagination="sonPaginationSearch"
-              :layout="page.layout"
-              :page="sonPage.current"
-              :limit="sonPage.size"
-          />
+          <div class="table-header" v-if="selectedSupplierName">
+            <span class="supplier-title">渚涘簲鍟嗭細{{ selectedSupplierName }}</span>
+          </div>
+          <el-table border
+                    v-loading="tableLoadingSon"
+                    :data="originalTableDataSon"
+                    :header-cell-style="{ background: '#F0F1F5', color: '#333333' }"
+                    height="calc(100vh - 20em)"
+                    style="width: 100%"
+                    tooltip-effect="dark"
+                    :show-summary="isShowSummarySon"
+                    :summary-method="summarizeMainTable1">
+            <el-table-column align="center"
+                             label="搴忓彿"
+                             type="index"
+                             width="60" />
+            <el-table-column label="鍚堝悓绛捐鏃ユ湡"
+                             prop="executionDate"
+                             show-overflow-tooltip/>
+            <el-table-column label="閲囪喘鍚堝悓鍙�"
+                             prop="purchaseContractNumber"
+                             show-overflow-tooltip/>
+            <el-table-column label="椤圭洰鍚嶇О"
+                             prop="projectName"
+                             show-overflow-tooltip/>
+            <el-table-column label="鍚堝悓閲戦(鍏�)"
+                             prop="contractAmount"
+                             show-overflow-tooltip
+                             :formatter="formattedNumber" />
+            <el-table-column label="鏀惰揣鐘舵��"
+                             prop="status"
+                             show-overflow-tooltip
+                             width="100">
+              <template #default="{ row }">
+                <el-tag :type="getReceiptStatusType(row.status)" size="small">
+                  {{ receiptStatusText[row.status] || '鏈煡鐘舵��' }}
+                </el-tag>
+              </template>
+            </el-table-column>
+          </el-table>
+          <pagination v-show="sonPage.total > 0"
+                      @pagination="sonPaginationSearch"
+                      :total="sonPage.total"
+                      :layout="sonPage.layout"
+                      :page="sonPage.current"
+                      :limit="sonPage.size" />
         </div>
       </el-col>
     </el-row>
@@ -92,153 +115,184 @@
 </template>
 
 <script setup>
-import { ref, toRefs } from "vue";
-import { Search } from "@element-plus/icons-vue";
-import { paymentLedgerList,paymentRecordList } from "@/api/procurementManagement/paymentLedger.js";
+  import { ref, toRefs, reactive, getCurrentInstance } from "vue";
+  import { Search } from "@element-plus/icons-vue";
+  import {
+    paymentLedgerList,
+  } from "@/api/procurementManagement/paymentLedger.js";
+  import { gePurchaseListPage } from "@/api/procurementManagement/invoiceEntry.js";
+  import Pagination from "../../../components/PIMTable/Pagination.vue";
 
-const tableColumn = ref([
-  {
-    label: "渚涘簲鍟嗗悕绉�",
-    prop: "supplierName",
-  },
-  {
-    label: "鍙戠エ閲戦(鍏�)",
-    prop: "invoiceAmount",
-  },
-  {
-    label: "浠樻閲戦(鍏�)",
-    prop: "paymentAmount",
-  },
-  {
-    label: "搴斾粯閲戦(鍏�)",
-    prop: "payableAmount",
-  },
-]);
-const tableData = ref([]);
-const tableLoading = ref(false);
-const data = reactive({
-  searchForm: {
-    supplierNameOrContractNo: "",
-  },
-});
-const page = reactive({
-  current: 1,
-  size: 10,
-});
-const sonPage = reactive({
-  current: 1,
-  size: 10,
-});
-const total = ref(0);
-const sonTotal = ref(0);
-const isShowSummary = ref(true);
-const { searchForm } = toRefs(data);
-const currentSupplierId = ref('')
-const rowClick = (row) => {
-  currentSupplierId.value = row.supplierId;
-  getPaymenRecordtList(row.supplierId)
-};
-// 瀛愭ā鍧�
-const tableColumnSon = ref([
-  {
-    label: "鍙戠敓鏃ユ湡",
-    prop: "happenTime",
-  },
-  {
-    label: "鍙戠エ閲戦",
-    prop: "invoiceAmount",
-  },
-  {
-    label: "浠樻閲戦(鍏�)",
-    prop: "currentPaymentAmount",
-  },
-  {
-    label: "搴斾粯閲戦(鍏�)",
-    prop: "payableAmount",
-  },
-]);
-const tableDataSon = ref([]);
-const tableLoadingSon = ref(false);
-const isShowSummarySon = ref(true);
-const detailPageNum = ref(1);
-const detailPageSize = ref(10);
-
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const paginationSearch = ({ current, limit }) => {
-  page.current = current;
-  page.size = limit;
-  tableDataSon.value = [];
-  getList();
-};
-const getList = () => {
-  tableLoading.value = false;
-  paymentLedgerList({
-    ...searchForm.value,
-    ...page,
-    detailPageNum: detailPageNum.value, // 鏂板
-    detailPageSize: detailPageSize.value, // 鏂板
-  }).then((res) => {
-    let result = res.data;
-    tableLoading.value = false;
-    tableData.value = result.records || [];
-    total.value = result.total || 0;
-    if(tableData.value.length > 0) {
-      getPaymenRecordtList(tableData.value[0].supplierId);
-      currentSupplierId.value = tableData.value[0].supplierId
-    }
-
+  const tableData = ref([]);
+  const tableLoading = ref(false);
+  const data = reactive({
+    searchForm: {
+      supplierName: "",
+    },
   });
-};
+  const page = reactive({
+    current: 1,
+    size: 100,
+  });
+  const sonPage = reactive({
+    current: 1,
+    size: 10,
+    total: 0,
+    layout: "total, sizes, prev, pager, next, jumper",
+  });
+  const total = ref(0);
+  const isShowSummary = ref(true);
+  const { searchForm } = toRefs(data);
+  const currentSupplierId = ref("");
+  const selectedSupplierName = ref("");
+  const rowClick = row => {
+    currentSupplierId.value = row.supplierId;
+    selectedSupplierName.value = row.supplierName;
+    sonPage.current = 1;
+    getPurchaseList(row.supplierName);
+  };
+  const originalTableDataSon = ref([]);
+  const tableLoadingSon = ref(false);
+  const isShowSummarySon = ref(true);
+  const { proxy } = getCurrentInstance();
 
-const getPaymenRecordtList = (supplierId) => {
-  paymentRecordList(supplierId).then(res => {
-    tableDataSon.value = res.data
-    sonTotal.value = res.data.length
-  })
-}
+  // 涓昏〃鍚堣鏂规硶
+  const summarizeMainTable = param => {
+    return proxy.summarizeTable(
+      param,
+      ["contractAmounts", "payableAmount"],
+      {
+        ticketsNum: { noDecimal: true },
+        futureTickets: { noDecimal: true },
+      }
+    );
+  };
+  // 瀛愯〃鍚堣鏂规硶
+  const summarizeMainTable1 = param => {
+    return proxy.summarizeTable(
+      param,
+      ["contractAmount"],
+      {
+        ticketsNum: { noDecimal: true },
+        futureTickets: { noDecimal: true },
+      }
+    );
+  };
+  /** 鎼滅储鎸夐挳鎿嶄綔 */
+  const handleQuery = () => {
+    page.current = 1;
+    getList();
+  };
+  const paginationSearch = obj => {
+    page.current = obj.page;
+    page.size = obj.limit;
+    getList();
+  };
+  const getList = () => {
+    tableLoading.value = true;
+    paymentLedgerList({
+      ...searchForm.value,
+      ...page,
+    }).then(res => {
+      let result = res.data;
+      tableLoading.value = false;
+      tableData.value = result.records || [];
+      total.value = result.total || 0;
+      if (tableData.value.length > 0) {
+        currentSupplierId.value = tableData.value[0].supplierId;
+        selectedSupplierName.value = tableData.value[0].supplierName;
+        sonPage.current = 1;
+        getPurchaseList(tableData.value[0].supplierName);
+      } else {
+        originalTableDataSon.value = [];
+        selectedSupplierName.value = "";
+      }
+    });
+  };
 
-const sonPaginationSearch = ({ current, limit }) => {
-  sonPage.current = current;
-  sonPage.size = limit;
-};
+  const getPurchaseList = supplierName => {
+    tableLoadingSon.value = true;
+    gePurchaseListPage({
+      supplierName: supplierName,
+      current: sonPage.current,
+      size: sonPage.size,
+    })
+      .then(res => {
+        tableLoadingSon.value = false;
+        let result = res.data;
+        if (Array.isArray(result)) {
+          originalTableDataSon.value = result;
+          sonPage.total = result.length;
+        } else {
+          originalTableDataSon.value = result.records || [];
+          sonPage.total = result.total || 0;
+        }
+      })
+      .catch(e => {
+        tableLoadingSon.value = false;
+      });
+  };
 
-getList();
+  const sonPaginationSearch = pagination => {
+    sonPage.current = pagination.page;
+    sonPage.size = pagination.limit;
+    getPurchaseList(selectedSupplierName.value);
+  };
+
+  const formattedNumber = (row, column, cellValue) => {
+    if (cellValue !== undefined && cellValue !== null && !isNaN(cellValue)) {
+      return parseFloat(cellValue).toFixed(2);
+    }
+    return "0.00";
+  };
+
+  // 鏀惰揣鐘舵�佹枃鏈槧灏�
+  const receiptStatusText = {
+    1: '寰呮敹璐�',
+    2: '鏀惰揣涓�',
+    3: '宸叉敹璐�'
+  };
+
+  // 鏀惰揣鐘舵�佹爣绛剧被鍨�
+  const getReceiptStatusType = (status) => {
+    const typeMap = {
+      1: 'info',
+      2: 'warning',
+      3: 'success'
+    };
+    return typeMap[status] || 'info';
+  };
+
+  getList();
 </script>
 
 <style scoped lang="scss">
-.el-row {
-  .el-col-14 {
-    .table_list {
-      padding-right: 0px;
+  .el-pagination {
+    width: 100%;
+    height: 55px;
+    display: flex;
+    justify-content: flex-end;
+    float: right;
+    flex-direction: row;
+    align-items: center;
+    background: #fff;
+    margin: -20px 0 0 0;
+    padding: 0 20px;
+  }
+  .pagination-container {
+    margin-top: 0;
+  }
+
+  .table-header {
+    margin-bottom: 10px;
+    padding: 10px;
+    background-color: #f5f7fa;
+    border-radius: 4px;
+
+    .supplier-title {
+      font-weight: bold;
+      font-size: 14px;
+      color: #303133;
     }
   }
-  .el-col-10 {
-    .table_list {
-      padding-left: 0px;
-    }
-  }
-}
-.el-pagination {
-  width: 100%;
-  height: 55px;
-  display: flex;
-  justify-content: flex-end;
-  float: right;
-  flex-direction: row;
-  align-items: center;
-  background: #fff;
-  margin: -20px 0 0 0;
-  padding: 0 20px;
-}
-.pagination-container {
-  margin-top: 0;
-}
-.table_list {
-  height: calc(100vh - 13.5em);
-  overflow: auto;
-}
 </style>

--
Gitblit v1.9.3