From 31b8d1274f52aaa32651852c8bece6631720a0fc Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 17 七月 2025 10:24:14 +0800
Subject: [PATCH] 1.设备管理-分页bug

---
 src/views/procurementManagement/procurementLedger/index.vue |  231 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 182 insertions(+), 49 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index d360763..b403fd1 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -2,26 +2,46 @@
   <div class="app-container">
     <div class="search_form">
       <div>
-        <span class="search_title">閲囪喘鍚堝悓鍙凤細</span>
-        <el-input
-          v-model="searchForm.purchaseContractNumber"
-          style="width: 240px"
-          placeholder="璇疯緭鍏�"
-          @change="handleQuery"
-          clearable
-          prefix-icon="Search"
-        />
-        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
-          >鎼滅储</el-button
-        >
+        <el-form :model="searchForm" :inline="true">
+          <el-form-item label="渚涘簲鍟嗗悕绉帮細">
+            <el-input v-model="searchForm.supplierName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+                      @change="handleQuery" />
+          </el-form-item>
+          <el-form-item label="閲囪喘鍚堝悓鍙凤細">
+            <el-input
+                v-model="searchForm.purchaseContractNumber"
+                style="width: 240px"
+                placeholder="璇疯緭鍏�"
+                @change="handleQuery"
+                clearable
+                :prefix-icon="Search"
+            />
+          </el-form-item>
+          <el-form-item label="閿�鍞悎鍚屽彿锛�">
+            <el-input v-model="searchForm.salesContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+                      @change="handleQuery" />
+          </el-form-item>
+          <el-form-item label="椤圭洰鍚嶇О锛�">
+            <el-input v-model="searchForm.projectName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+                      @change="handleQuery" />
+          </el-form-item>
+          <el-form-item label="褰曞叆鏃ユ湡锛�">
+            <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
+                            placeholder="璇烽�夋嫨" clearable @change="changeDaterange" />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button>
+          </el-form-item>
+        </el-form>
       </div>
-      <div>
+
+    </div>
+    <div class="table_list">
+      <div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
         <el-button type="primary" @click="openForm('add')">鏂板鍙拌处</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
       </div>
-    </div>
-    <div class="table_list">
       <el-table
         :data="tableData"
         border
@@ -76,37 +96,50 @@
         <el-table-column
           label="閲囪喘鍚堝悓鍙�"
           prop="purchaseContractNumber"
+          width="200"
           show-overflow-tooltip
         />
         <el-table-column
           label="閿�鍞悎鍚屽彿"
           prop="salesContractNo"
+          width="200"
           show-overflow-tooltip
         />
         <el-table-column
           label="渚涘簲鍟嗗悕绉�"
+          width="240"
           prop="supplierName"
           show-overflow-tooltip
         />
         <el-table-column
           label="椤圭洰鍚嶇О"
           prop="projectName"
+          width="420"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="浠樻鏂瑰紡"
+          width="100"
+          prop="paymentMethod"
           show-overflow-tooltip
         />
         <el-table-column
           label="鍚堝悓閲戦(鍏�)"
           prop="contractAmount"
+           width="200"
           show-overflow-tooltip
           :formatter="formattedNumber"
         />
         <el-table-column
           label="褰曞叆浜�"
           prop="recorderName"
+           width="100"
           show-overflow-tooltip
         />
         <el-table-column
           label="褰曞叆鏃ユ湡"
           prop="entryDate"
+           width="100"
           show-overflow-tooltip
         />
         <el-table-column
@@ -121,6 +154,7 @@
               type="primary"
               size="small"
               @click="openForm('edit', scope.row)"
+							:disabled="scope.row.receiptPaymentAmount>0 || scope.row.recorderName !== userStore.nickName"
               >缂栬緫</el-button
             >
           </template>
@@ -236,6 +270,17 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="浠樻鏂瑰紡">
+              <el-input
+                v-model="form.paymentMethod"
+                placeholder="璇疯緭鍏�"
+                clearable
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-row>
           <el-form-item label="浜у搧淇℃伅锛�" prop="entryDate">
             <el-button type="primary" @click="openProductForm('add')"
@@ -264,7 +309,7 @@
           <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
           <el-table-column label="鍗曚綅" prop="unit" width="70" />
           <el-table-column label="鏁伴噺" prop="quantity" width="70" />
-          <el-table-column label="绋庣巼(%)" prop="taxRate" width="70" />
+          <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" />
           <el-table-column
             label="鍚◣鍗曚环(鍏�)"
             prop="taxInclusiveUnitPrice"
@@ -405,16 +450,20 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏁伴噺锛�" prop="quantity">
-              <el-input
-                v-model="productForm.quantity"
-                placeholder="璇疯緭鍏�"
-                clearable
-                @change="mathNum"
-              />
-            </el-form-item>
-          </el-col>
+					<el-col :span="12">
+						<el-form-item label="绋庣巼(%)锛�" prop="taxRate">
+							<el-select
+								v-model="productForm.taxRate"
+								placeholder="璇烽�夋嫨"
+								clearable
+								@change="mathNum"
+							>
+								<el-option label="1" value="1" />
+								<el-option label="6" value="6" />
+								<el-option label="13" value="13" />
+							</el-select>
+						</el-form-item>
+					</el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
@@ -429,20 +478,19 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="绋庣巼(%)锛�" prop="taxRate">
-              <el-select
-                v-model="productForm.taxRate"
-                placeholder="璇烽�夋嫨"
-                clearable
-                @change="mathNum"
-              >
-                <el-option label="1" value="1" />
-                <el-option label="6" value="6" />
-                <el-option label="13" value="13" />
-              </el-select>
-            </el-form-item>
-          </el-col>
+					<el-col :span="12">
+						<el-form-item label="鏁伴噺锛�" prop="quantity">
+							<el-input-number
+								:step="0.1"
+								clearable
+								:precision="2"
+								style="width: 100%"
+								v-model="productForm.quantity"
+								placeholder="璇疯緭鍏�"
+								@change="mathNum"
+							/>
+						</el-form-item>
+					</el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
@@ -453,7 +501,7 @@
                 :step="0.1"
                 clearable
                 style="width: 100%"
-                disabled
+                @change="reverseMathNum('taxInclusiveTotalPrice')"
               />
             </el-form-item>
           </el-col>
@@ -462,7 +510,10 @@
               label="涓嶅惈绋庢�讳环(鍏�)锛�"
               prop="taxExclusiveTotalPrice"
             >
-              <el-input v-model="productForm.taxExclusiveTotalPrice" disabled />
+              <el-input 
+                v-model="productForm.taxExclusiveTotalPrice"
+                @change="reverseMathNum('taxExclusiveTotalPrice')"
+              />
             </el-form-item>
           </el-col>
         </el-row>
@@ -513,7 +564,9 @@
   productList,
   getPurchaseById,
   getOptions,
+  createPurchaseNo,
 } from "@/api/procurementManagement/procurementLedger.js";
+import useFormData from "@/hooks/useFormData.js";
 const { proxy } = getCurrentInstance();
 const tableData = ref([]);
 const productData = ref([]);
@@ -533,6 +586,7 @@
 const fileList = ref([]);
 import useUserStore from "@/store/modules/user";
 import { modelList, productTreeList } from "@/api/basicData/product.js";
+import dayjs from "dayjs";
 
 const userStore = useUserStore();
 
@@ -541,7 +595,16 @@
 const dialogFormVisible = ref(false);
 const data = reactive({
   searchForm: {
-    purchaseContractNumber: "",
+    supplierName: "", // 渚涘簲鍟嗗悕绉�
+    purchaseContractNumber: "", // 閲囪喘鍚堝悓缂栧彿
+    salesContractNo: "", // 閿�鍞悎鍚岀紪鍙�
+    projectName: "", // 椤圭洰鍚嶇О
+    entryDate: [
+      dayjs().format("YYYY-MM-DD"),
+      dayjs().add(1, "day").format("YYYY-MM-DD"),
+    ], // 褰曞叆鏃ユ湡
+    entryDateStart: dayjs().format("YYYY-MM-DD"),
+    entryDateEnd: dayjs().add(1, "day").format("YYYY-MM-DD"),
   },
   form: {
     purchaseContractNumber: "",
@@ -552,6 +615,7 @@
     productData: [],
     supplierName: "",
     supplierId: "",
+    paymentMethod: "",
   },
   rules: {
     purchaseContractNumber: [
@@ -561,7 +625,9 @@
     supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
   },
 });
-const { searchForm, form, rules } = toRefs(data);
+const {  form, rules } = toRefs(data);
+const { form: searchForm } = useFormData(data.searchForm);
+
 // 浜у搧琛ㄥ崟寮规鏁版嵁
 const productFormVisible = ref(false);
 const productOperationType = ref("");
@@ -607,6 +673,17 @@
   headers: { Authorization: "Bearer " + getToken() },
 });
 
+const changeDaterange = (value) => {
+  if (value) {
+    searchForm.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+    searchForm.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+  } else {
+    searchForm.entryDateStart = undefined;
+    searchForm.entryDateEnd = undefined;
+  }
+  handleQuery();
+};
+
 const formattedNumber = (row, column, cellValue) => {
   return parseFloat(cellValue).toFixed(2);
 };
@@ -642,14 +719,15 @@
 };
 const getList = () => {
   tableLoading.value = true;
-  purchaseListPage({ ...searchForm.value, ...page })
+  const { entryDate, ...rest } = searchForm;
+  purchaseListPage({ ...rest, ...page })
     .then((res) => {
       tableLoading.value = false;
-      tableData.value = res.records;
+      tableData.value = res.data.records;
       tableData.value.map((item) => {
         item.children = [];
       });
-      total.value = res.total;
+      total.value = res.data.total;
       expandedRowKeys.value = [];
     })
     .catch(() => {
@@ -672,7 +750,7 @@
       productList({ salesLedgerId: row.id, type: 2 }).then((res) => {
         const index = tableData.value.findIndex((item) => item.id === row.id);
         if (index > -1) {
-          tableData.value[index].children = res;
+          tableData.value[index].children = res.data;
         }
         expandedRowKeys.value.push(row.id);
       });
@@ -701,6 +779,11 @@
   form.value = {};
   productData.value = [];
   fileList.value = [];
+  if (operationType.value == "add") {
+    createPurchaseNo().then((res) => {
+      form.value.purchaseContractNumber = res.data;
+    });
+  }
   userListNoPage().then((res) => {
     userList.value = res.data;
   });
@@ -755,6 +838,10 @@
 // 绉婚櫎鏂囦欢
 function handleRemove(file) {
   console.log("handleRemove", file.id);
+  if (file.size > 1024 * 1024 * 10) { 
+    // 浠呭墠绔竻鐞嗭紝涓嶈皟鐢ㄥ垹闄ゆ帴鍙e拰鎻愮ず
+    return; 
+  }
   if (operationType.value === "edit") {
     let ids = [];
     ids.push(file.id);
@@ -948,6 +1035,12 @@
 const handleDelete = () => {
   let ids = [];
   if (selectedRows.value.length > 0) {
+		// 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
+		const unauthorizedData = selectedRows.value.filter(item => item.recorderName !== userStore.nickName);
+		if (unauthorizedData.length > 0) {
+			proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
+			return;
+		}
     ids = selectedRows.value.map((item) => item.id);
   } else {
     proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
@@ -977,7 +1070,10 @@
   return `${year}-${month}-${day}`;
 }
 const mathNum = () => {
-  console.log("productForm.value", productForm.value);
+	if (!productForm.value.taxRate) {
+		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+		return;
+	}
   if (!productForm.value.taxInclusiveUnitPrice) {
     return;
   }
@@ -999,6 +1095,43 @@
       );
   }
 };
+const reverseMathNum = (field) => {
+	if (!productForm.value.taxRate) {
+		proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+		return;
+	}
+  const taxRate = Number(productForm.value.taxRate);
+  if (!taxRate) return;
+  if (field === 'taxInclusiveTotalPrice') {
+    // 宸茬煡鍚◣鎬讳环鍜屾暟閲忥紝鍙嶇畻鍚◣鍗曚环
+    if (productForm.value.quantity) {
+      productForm.value.taxInclusiveUnitPrice = 
+        (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
+    }
+    // 宸茬煡鍚◣鎬讳环鍜屽惈绋庡崟浠凤紝鍙嶇畻鏁伴噺
+    else if (productForm.value.taxInclusiveUnitPrice) {
+      productForm.value.quantity = 
+        (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
+    }
+    // 鍙嶇畻涓嶅惈绋庢�讳环
+    productForm.value.taxExclusiveTotalPrice = 
+      (Number(productForm.value.taxInclusiveTotalPrice) / (1 + taxRate / 100)).toFixed(2);
+  } else if (field === 'taxExclusiveTotalPrice') {
+    // 鍙嶇畻鍚◣鎬讳环
+    productForm.value.taxInclusiveTotalPrice = 
+      (Number(productForm.value.taxExclusiveTotalPrice) * (1 + taxRate / 100)).toFixed(2);
+    // 宸茬煡鏁伴噺锛屽弽绠楀惈绋庡崟浠�
+    if (productForm.value.quantity) {
+      productForm.value.taxInclusiveUnitPrice = 
+        (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
+    }
+    // 宸茬煡鍚◣鍗曚环锛屽弽绠楁暟閲�
+    else if (productForm.value.taxInclusiveUnitPrice) {
+      productForm.value.quantity = 
+        (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
+    }
+  }
+};
 // 閿�鍞悎鍚岄�夋嫨鏀瑰彉鏂规硶
 const salesLedgerChange = async (row) => {
   console.log("row", row);

--
Gitblit v1.9.3