From 6e30fb16e72db22a119285cb5b757b7a5e1b2206 Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期三, 18 六月 2025 16:35:14 +0800
Subject: [PATCH] fix: 修复之前剩下的要求

---
 src/views/procurementManagement/procurementInvoiceLedger/index.vue |  401 +++++++++++++++++++++-----------------------------------
 1 files changed, 151 insertions(+), 250 deletions(-)

diff --git a/src/views/procurementManagement/procurementInvoiceLedger/index.vue b/src/views/procurementManagement/procurementInvoiceLedger/index.vue
index 6ae4766..4d5e139 100644
--- a/src/views/procurementManagement/procurementInvoiceLedger/index.vue
+++ b/src/views/procurementManagement/procurementInvoiceLedger/index.vue
@@ -1,274 +1,184 @@
 <template>
   <div class="app-container">
-    <div class="search_form">
-      <div>
-        <span class="search_title">閲囪喘鍚堝悓鍙凤細</span>
+    <el-form :model="filters" :inline="true">
+      <el-form-item label="閲囪喘鍚堝悓鍙�">
         <el-input
-          v-model="searchForm.purchaseContractNumber"
+          v-model="filters.purchaseContractNumber"
           style="width: 240px"
           placeholder="璇疯緭鍏�"
-          @change="handleQuery"
           clearable
           :prefix-icon="Search"
+          @change="getTableData"
         />
-        <span class="search_title" style="margin-left: 10px">渚涘簲鍟嗭細</span>
+      </el-form-item>
+      <el-form-item label="渚涘簲鍟�">
         <el-input
-          v-model="searchForm.supplierName"
+          v-model="filters.supplierName"
           style="width: 240px"
           placeholder="璇疯緭鍏�"
-          @change="handleQuery"
           clearable
           :prefix-icon="Search"
+          @change="getTableData"
         />
-        <span class="search_title" style="margin-left: 10px">鏉ョエ鏃ユ湡锛�</span>
+      </el-form-item>
+      <el-form-item label="鏉ョエ鏃ユ湡">
         <el-date-picker
           style="width: 240px"
-          v-model="searchForm.issueDate"
+          v-model="filters.createdAt"
           value-format="YYYY-MM-DD"
           format="YYYY-MM-DD"
           type="daterange"
           start-placeholder="寮�濮嬫椂闂�"
           end-placeholder="缁撴潫鏃堕棿"
           clearable
-          @change="changeDateRange"
-          @clear="clearRange"
+          @change="getTableData"
         />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-          >鎼滅储</el-button
-        >
-      </div>
-      <div>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="getTableData">鎼滅储</el-button>
+        <el-button @click="resetFilters"> 閲嶇疆 </el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
-      </div>
-    </div>
+      </el-form-item>
+    </el-form>
     <div class="table_list">
-      <el-table
-        :data="tableData"
-        border
-        v-loading="tableLoading"
-        :expand-row-keys="expandedRowKeys"
-        :row-key="(row) => row.id"
-        show-summary
-        :summary-method="summarizeMainTable"
-        @expand-change="expandChange"
-        height="calc(100vh - 18.5em)"
+      <PIMTable
+        :column="columns"
+        :tableLoading="loading"
+        :tableData="dataList"
+        :isSelection="true"
+        :page="{
+          current: pagination.currentPage,
+          size: pagination.pageSize,
+          total: pagination.total,
+        }"
+        :handleSelectionChange="handleSelectionChange"
+        @pagination="onCurrentChange"
       >
-        <el-table-column align="center" label="搴忓彿" type="index" width="55" />
-        <el-table-column type="expand">
-          <template #default="props">
-            <el-table
-              :data="props.row.children"
-              border
-              show-summary
-              :summary-method="summarizeChildrenTable"
-            >
-              <el-table-column
-                align="center"
-                label="搴忓彿"
-                type="index"
-                width="60"
-              />
-              <el-table-column label="浜у搧澶х被" prop="productCategory" />
-              <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
-              <el-table-column label="鍗曚綅" prop="unit" />
-              <el-table-column label="鏁伴噺" prop="quantity" />
-              <el-table-column label="绋庣巼(%)" prop="taxRate" />
-              <el-table-column
-                label="鍚◣鍗曚环(鍏�)"
-                prop="taxInclusiveUnitPrice"
-                :formatter="formattedNumber"
-              />
-              <el-table-column
-                label="鍚◣鎬讳环(鍏�)"
-                prop="taxInclusiveTotalPrice"
-                :formatter="formattedNumber"
-              />
-              <el-table-column
-                label="涓嶅惈绋庢�讳环(鍏�)"
-                prop="taxExclusiveTotalPrice"
-                :formatter="formattedNumber"
-              />
-              <el-table-column label="鏈鏉ョエ鏁�" prop="ticketsNum" />
-              <el-table-column
-                label="鏈鏉ョエ閲戦(鍏�)"
-                prop="ticketsAmount"
-                :formatter="formattedNumber"
-              />
-              <el-table-column label="鏈潵绁ㄦ暟" prop="futureTickets" />
-              <el-table-column
-                label="鏈潵绁ㄩ噾棰�(鍏�)"
-                prop="futureTicketsAmount"
-                :formatter="formattedNumber"
-              />
-            </el-table>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="閲囪喘鍚堝悓鍙�"
-          prop="purchaseContractNumber"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="閿�鍞悎鍚屽彿"
-          prop="salesContractNo"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="渚涘簲鍟嗗悕绉�"
-          prop="supplierName"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍙戠エ鍙�"
-          prop="invoiceNumber"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="鍚堝悓閲戦(鍏�)"
-          prop="invoiceAmount"
-          show-overflow-tooltip
-          :formatter="formattedNumber"
-        />
-        <el-table-column label="寮�绁ㄤ汉" prop="issUer" show-overflow-tooltip />
-        <el-table-column
-          label="寮�绁ㄦ棩鏈�"
-          prop="issueDate"
-          show-overflow-tooltip
-        />
-      </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        layout="total, sizes, prev, pager, next, jumper"
-        :page="page.current"
-        :limit="page.size"
-        @pagination="paginationChange"
-      />
+        <!-- <template #operation>
+          <el-button type="primary" text @click="handleEdit" size="small">
+            缂栬緫
+          </el-button>
+        </template> -->
+      </PIMTable>
     </div>
   </div>
 </template>
 
 <script setup>
-import pagination from "@/components/PIMTable/Pagination.vue";
-import { ref } from "vue";
+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 { onMounted } from "vue";
 import { ElMessageBox } from "element-plus";
-import { productRecordList } from "@/api/procurementManagement/procurementInvoiceLedger.js";
-import { invoiceListPage } from "@/api/procurementManagement/procurementInvoiceLedger.js";
-import dayjs from "dayjs";
+
+defineOptions({
+  name: "鏉ョエ鍙拌处",
+});
 
 const { proxy } = getCurrentInstance();
-const tableData = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
-  current: 1,
-  size: 100,
-});
-const total = ref(0);
-// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
-const data = reactive({
-  searchForm: {
-    purchaseContractNumber: "",
-    supplierName: "",
-    issueDate: [
-      dayjs().startOf("month").format("YYYY-MM-DD"),
-      dayjs().endOf("month").format("YYYY-MM-DD"),
-    ],
-    issueDateStart: dayjs().startOf("month").format("YYYY-MM-DD"),
-    issueDateEnd: dayjs().endOf("month").format("YYYY-MM-DD"),
+const multipleVal = ref([]);
+const {
+  loading,
+  filters,
+  columns,
+  dataList,
+  pagination,
+  getTableData,
+  resetFilters,
+  onCurrentChange,
+} = usePaginationApi(
+  productRecordPage,
+  {
+    purchaseContractNumber: undefined, // 閲囪喘鍚堝悓鍙�
+    supplierName: undefined, // 渚涘簲鍟�
+    createdAt: [], // 鏉ョエ鏃ユ湡
   },
-  form: {
-    issueDate: "", // 寮�绁ㄦ棩鏈�
-    purchaseLedgerId: "",
-    purchaseLedgerNo: "",
-    issUerId: "", // 寮�绁ㄤ汉id
-    issUer: "", // 寮�绁ㄤ汉濮撳悕
-  },
-  rules: {
-    purchaseLedgerId: [
-      { required: true, message: "璇烽�夋嫨", trigger: "change" },
-    ],
-  },
-});
-const { searchForm } = toRefs(data);
-
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
-  page.current = 1;
-  getList();
-};
-const paginationChange = (obj) => {
-  page.current = obj.page;
-  page.size = obj.limit;
-  getList();
-};
-const getList = () => {
-  tableLoading.value = true;
-  const { issueDate, ...rest } = searchForm.value;
-  invoiceListPage({ ...rest, ...page })
-    .then((res) => {
-      tableLoading.value = false;
-      tableData.value = res.records;
-      tableData.value.map((item) => {
-        item.children = [];
-      });
-      total.value = res.total;
-      expandedRowKeys.value = [];
-    })
-    .catch(() => {
-      tableLoading.value = false;
-    });
-};
-const formattedNumber = (row, column, cellValue) => {
-  return parseFloat(cellValue).toFixed(2);
-};
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const expandedRowKeys = ref([]);
-// 灞曞紑琛�
-const expandChange = (row, expandedRows) => {
-  if (expandedRows.length > 0) {
-    expandedRowKeys.value = [];
-    try {
-      productRecordList({ id: row.id }).then((res) => {
-        const index = tableData.value.findIndex((item) => item.id === row.id);
-        if (index > -1) {
-          tableData.value[index].children = res;
-        }
-        expandedRowKeys.value.push(row.id);
-      });
-    } catch (error) {
-      console.log(error);
-    }
-  } else {
-    expandedRowKeys.value = [];
-  }
-};
-// 涓昏〃鍚堣鏂规硶
-const summarizeMainTable = (param) => {
-  return proxy.summarizeTable(param, ["invoiceAmount"], {
-    ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
-    futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
-  });
-};
-// 瀛愯〃鍚堣鏂规硶
-const summarizeChildrenTable = (param) => {
-  return proxy.summarizeTable(
-    param,
-    [
-      "taxInclusiveUnitPrice",
-      "taxInclusiveTotalPrice",
-      "taxExclusiveTotalPrice",
-      "ticketsNum",
-      "ticketsAmount",
-      "futureTickets",
-      "futureTicketsAmount",
-    ],
+  [
     {
-      ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
-      futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
-    }
-  );
+      label: "閲囪喘鍚堝悓鍙�",
+      prop: "purchaseContractNumber",
+      align: "center",
+    },
+    {
+      label: "閿�鍞悎鍚屽彿",
+      prop: "salesContractNo",
+      align: "center",
+    },
+    {
+      label: "瀹㈡埛鍚嶇О",
+      prop: "customerName",
+      align: "center",
+    },
+    {
+      label: "渚涘簲鍟嗗悕绉�",
+      prop: "supplierName",
+      align: "center",
+    },
+    {
+      label: "瑙勬牸鍨嬪彿",
+      prop: "specificationModel",
+      align: "center",
+    },
+    {
+      label: "鍙戠エ鍙�",
+      prop: "invoiceNumber",
+      align: "center",
+    },
+    {
+      label: "鍚堝悓閲戦(鍏�)",
+      prop: "taxInclusiveTotalPrice",
+      align: "center",
+      formatData: (cell) => {
+        return parseFloat(cell).toFixed(2);
+      },
+    },
+    {
+      label: "寮�绁ㄦ棩鏈�",
+      prop: "createdAt",
+      align: "center",
+    },
+    {
+      label: "寮�绁ㄩ噾棰�",
+      prop: "ticketsAmount",
+      align: "center",
+      formatData: (cell) => {
+        return parseFloat(cell).toFixed(2);
+      },
+    },
+    {
+      label: "涓嶅惈绋庨噾棰�",
+      prop: "unTicketsPrice",
+      align: "center",
+      formatData: (cell) => {
+        return parseFloat(cell).toFixed(2);
+      },
+    },
+    {
+      label: "澧炲�肩◣",
+      prop: "invoiceAmount",
+      align: "center",
+    },
+    // {
+    //   fixed: "right",
+    //   width: 120,
+    //   label: "鎿嶄綔",
+    //   dataType: "slot",
+    //   slot: "operation",
+    //   align: "center",
+    // },
+  ],
+  {},
+  {
+    createdAt: (aim) => ({
+      createdAtStart: aim[0],
+      createdAtEnd: aim[1],
+    }),
+  }
+);
+
+const handleSelectionChange = (val) => {
+  multipleVal.value = val;
 };
 
 // 瀵煎嚭
@@ -286,24 +196,15 @@
     });
 };
 
-const changeDateRange = (date) => {
-  if (date) {
-    searchForm.receiptPaymentDateStart = date[0];
-    searchForm.receiptPaymentDateEnd = date[1];
-    getList();
-  }
-};
-
-const clearRange = () => {
-  searchForm.value.issueDate = [];
-  searchForm.value.issueDateStart = undefined;
-  searchForm.value.issueDateEnd = undefined;
-  getList();
-};
+// const handleEdit = () => {};
 
 onMounted(() => {
-  getList();
+  getTableData();
 });
 </script>
 
-<style scoped lang="scss"></style>
+<style lang="scss" scoped>
+.table_list {
+  margin-top: unset;
+}
+</style>

--
Gitblit v1.9.3