From ca1cbb4d2ffb48095d5b2625788efd4e08a5eff8 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 20 一月 2026 14:07:24 +0800
Subject: [PATCH] 湟水峡 1.采购模块不要项目名称 2.加一个有待回款登记的提示 3.回款登记、付款登记改成和销售订单价格关联,并且可以多个一起回款或付款 4.合同管理不要下载合同了,跟合同相关的字段可以去掉了

---
 src/views/procurementManagement/paymentEntry/index.vue |  379 +++++++++++++++++++++++++++++-------------------------
 1 files changed, 204 insertions(+), 175 deletions(-)

diff --git a/src/views/procurementManagement/paymentEntry/index.vue b/src/views/procurementManagement/paymentEntry/index.vue
index 0749292..511ee2b 100644
--- a/src/views/procurementManagement/paymentEntry/index.vue
+++ b/src/views/procurementManagement/paymentEntry/index.vue
@@ -27,7 +27,8 @@
           </el-col>
           <el-col :span="4">
             <el-form-item style="float: right; margin-right: unset">
-              <el-button type="primary" @click="openForm('add')">
+              <el-button @click="handleExport" style="margin-right: 10px">瀵煎嚭</el-button>
+              <el-button type="primary" @click="openForm()">
                 鏂板浠樻
               </el-button>
 <!--              <el-button type="danger" plain @click="handleDelete">-->
@@ -131,133 +132,68 @@
     </div>
     <el-dialog
       v-model="dialogFormVisible"
-      :title="operationType === 'add' ? '鏂板浠樻鐧昏' : '缂栬緫浠樻鐧昏'"
-      width="60%"
+      title="鏂板浠樻鐧昏"
+      width="80%"
       @close="closeDia"
     >
-      <el-form
-        :model="form"
-        label-width="140px"
-        label-position="top"
-        :rules="rules"
-        ref="formRef"
-      >
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="閲囪喘鍚堝悓鍙凤細" prop="purchaseContractNumber">
-              <el-input
-                v-model="form.purchaseContractNumber"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
-              <el-input
-                v-model="form.salesContractNo"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierName">
-              <el-input
-                v-model="form.supplierName"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ鍙凤細" prop="invoiceNumber">
-              <el-input
-                v-model="form.invoiceNumber"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ閲戦(鍏�)锛�" prop="invoiceAmount">
-              <el-input
-                v-model="form.invoiceAmount"
-                placeholder="鑷姩濉厖"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏈浠樻閲戦锛�" prop="currentPaymentAmount">
-              <el-input-number :step="0.01" :min="0" style="width: 100%"
-															 :precision="2"
-                v-model="form.currentPaymentAmount"
-                placeholder="璇疯緭鍏�"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="浠樻鏂瑰紡锛�" prop="paymentMethod">
-              <el-select
-                v-model="form.paymentMethod"
-                placeholder="璇烽�夋嫨"
-                clearable
-              >
-                <el-option label="鐢垫眹" value="鐢垫眹" />
-                <el-option label="鎵垮厬" value="鎵垮厬" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-					<el-col :span="12">
-						<el-form-item label="浠樻鏃ユ湡锛�" prop="paymentDate">
-							<el-date-picker
-								style="width: 100%"
-								v-model="form.paymentDate"
-								value-format="YYYY-MM-DD"
-								format="YYYY-MM-DD"
-								type="date"
-								placeholder="璇烽�夋嫨"
-								clearable
-							/>
-						</el-form-item>
-					</el-col>
-        </el-row>
-        <el-row :gutter="30">
-					<el-col :span="12">
-						<el-form-item label="鐧昏浜猴細" prop="registrant">
-							<el-input
-								v-model="form.registrant"
-								placeholder="璇疯緭鍏�"
-								clearable
-								disabled
-							/>
-						</el-form-item>
-					</el-col>
-          <el-col :span="12">
-            <el-form-item label="鐧昏鏃ユ湡锛�" prop="registrationtDate">
-              <el-input
-                v-model="form.registrationtDate"
-                placeholder="璇疯緭鍏�"
-                clearable
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
+      <el-table :data="dialogTableData" border style="width: 100%" max-height="500px">
+        <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+        <el-table-column label="閲囪喘鍚堝悓鍙�" prop="purchaseContractNumber" show-overflow-tooltip width="200" />
+        <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" show-overflow-tooltip width="200" />
+        <el-table-column label="鍙戠エ鍙�" prop="invoiceNumber" show-overflow-tooltip width="180" />
+        <el-table-column label="鍙戠エ閲戦(鍏�)" prop="invoiceAmount" width="150">
+          <template #default="{ row }">
+            {{ row.invoiceAmount ? parseFloat(row.invoiceAmount).toFixed(2) : "0.00" }}
+          </template>
+        </el-table-column>
+        <el-table-column label="寰呬粯娆鹃噾棰�(鍏�)" prop="unPaymentAmountTotal" width="150">
+          <template #default="{ row }">
+            <el-text type="danger">
+              {{ row.unPaymentAmountTotal ? parseFloat(row.unPaymentAmountTotal).toFixed(2) : "0.00" }}
+            </el-text>
+          </template>
+        </el-table-column>
+        <el-table-column label="鏈浠樻閲戦(鍏�)" width="180">
+          <template #default="scope">
+            <el-input-number
+              :step="0.01"
+              :min="0"
+              :max="Number(scope.row.unPaymentAmountTotal || 0)"
+              style="width: 100%"
+              :precision="2"
+              v-model="scope.row.currentPaymentAmount"
+              placeholder="璇疯緭鍏�"
+              clearable
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="浠樻鏂瑰紡" width="150">
+          <template #default="scope">
+            <el-select v-model="scope.row.paymentMethod" placeholder="璇烽�夋嫨" clearable style="width: 100%">
+              <el-option label="鐢垫眹" value="鐢垫眹" />
+              <el-option label="鎵垮厬" value="鎵垮厬" />
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column label="浠樻鏃ユ湡" width="180">
+          <template #default="scope">
+            <el-date-picker
+              style="width: 100%"
+              v-model="scope.row.paymentDate"
+              value-format="YYYY-MM-DD"
+              format="YYYY-MM-DD"
+              type="date"
+              placeholder="璇烽�夋嫨"
+              clearable
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="鐧昏浜�" width="120">
+          <template #default="scope">
+            <el-input v-model="scope.row.registrant" placeholder="鑷姩濉厖" disabled />
+          </template>
+        </el-table-column>
+      </el-table>
       <template #footer>
         <div class="dialog-footer">
           <el-button type="primary" @click="submitForm">纭</el-button>
@@ -269,16 +205,12 @@
 </template>
 
 <script setup>
-import { ref } from "vue";
+import { ref, reactive, toRefs, getCurrentInstance, nextTick, onMounted } from "vue";
 import { Search } from "@element-plus/icons-vue";
 import { ElMessageBox } from "element-plus";
 import useUserStore from "@/store/modules/user.js";
 import {
-  byPurchaseId,
   paymentRegistrationAdd,
-  paymentRegistrationDel,
-  paymentRegistrationEdit,
-  getTicketNo,
 } from "@/api/procurementManagement/paymentEntry.js";
 import {
 	delPaymentRegistration,
@@ -308,6 +240,20 @@
     prop: "supplierName",
     width:240
   },
+	{
+		label: "浠樻鐘舵��",
+		prop: "statusName",
+		dataType: "tag",
+		formatType: (params) => {
+			if (params == '鏈畬鎴愪粯娆�') {
+				return "danger";
+			} else if (params == '宸插畬鎴愪粯娆�') {
+				return "success";
+			} else {
+				return null;
+			}
+		},
+	},
   {
     label: "鍙戠エ鍙�",
     prop: "invoiceNumber",
@@ -351,9 +297,9 @@
 	total: 0,
 });
 
-// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
-const operationType = ref("");
+// 寮规鏁版嵁
 const dialogFormVisible = ref(false);
+const dialogTableData = ref([]);
 const data = reactive({
   searchForm: {
     supplierNameOrContractNo: "",
@@ -392,7 +338,11 @@
 const isShowSummarySon = ref(true);
 const expandedRowKeys = ref([]);
 
-
+const getStatusTagType = (statusName = '') => {
+	const normalized = statusName.trim();
+	if (!normalized) return 'info';
+	return normalized === '鏈畬鎴愪粯娆�' ? 'danger' : 'success';
+};
 // 瀛愯〃鍚堣鏂规硶
 const summarizeMainTable1 = (param) => {
   return proxy.summarizeTable(
@@ -473,7 +423,8 @@
 		currentPaymentAmount: row.currentPaymentAmount,
 		paymentMethod: row.paymentMethod,
 	};
-	updatePaymentRegistration(updateData).then((res) => {
+	// 瀛愯〃缂栬緫淇濆瓨鎸夋暟缁勬彁浜わ紙涓庢壒閲忕櫥璁颁繚鎸佷竴鑷达級
+	updatePaymentRegistration([updateData]).then(() => {
 		row.editType = !row.editType;
 		getList();
 		proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
@@ -484,57 +435,117 @@
   selectedRows.value = selection;
 };
 // 鎵撳紑寮规
-const openForm = (type, row) => {
-  if (selectedRows.value.length !== 1) {
-    proxy.$message.error("璇烽�夋嫨涓�鏉″彂绁ㄦ暟鎹�");
+const openForm = () => {
+  // 鑷冲皯閫夋嫨涓�鏉℃暟鎹�
+  if (selectedRows.value.length === 0) {
+    proxy.$modal?.msgError ? proxy.$modal.msgError("璇烽�夋嫨鏁版嵁") : proxy.$message.error("璇烽�夋嫨鏁版嵁");
     return;
   }
-	if (selectedRows.value[0].unPaymentAmountTotal == 0) {
-		proxy.$message.warning("鏃犻渶鍐嶄粯娆�");
-		return;
-	}
-  operationType.value = type;
-  form.value = {};
-  form.value = { ...selectedRows.value[0] };
-  form.value.ticketRegistrationId = selectedRows.value[0].id;
-  form.value.id = null;
-  // 鏌ヨ閲囪喘鍚堝悓鍙�
-  form.value.registrationtDate = getCurrentDate();
-  form.value.paymentDate = getCurrentDate();
-  form.value.registrant = userStore.name;
+
+  // 鏍¢獙鏄惁涓虹浉鍚屼緵搴斿晢鍚嶇О
+  const firstSupplierName = selectedRows.value[0].supplierName;
+  const isSameSupplier = selectedRows.value.every(
+    (item) => item.supplierName === firstSupplierName
+  );
+  if (!isSameSupplier) {
+    proxy.$modal?.msgError
+      ? proxy.$modal.msgError("璇烽�夋嫨鐩稿悓渚涘簲鍟嗗悕绉扮殑鏁版嵁杩涜浠樻鐧昏")
+      : proxy.$message.error("璇烽�夋嫨鐩稿悓渚涘簲鍟嗗悕绉扮殑鏁版嵁杩涜浠樻鐧昏");
+    return;
+  }
+
+  // 杩囨护鍑烘湁寰呬粯娆鹃噾棰濈殑璁板綍
+  const validRows = selectedRows.value.filter(
+    (item) => Number(item.unPaymentAmountTotal) > 0
+  );
+  if (validRows.length === 0) {
+    proxy.$modal?.msgWarning
+      ? proxy.$modal.msgWarning("鎵�閫夋暟鎹潎鏃犻渶鍐嶄粯娆�")
+      : proxy.$message.warning("鎵�閫夋暟鎹潎鏃犻渶鍐嶄粯娆�");
+    return;
+  }
+
+  const today = getCurrentDate();
+  dialogTableData.value = validRows.map((row) => {
+    return {
+      ...row,
+      // 鍚庣鍏宠仈鈥滄潵绁ㄥ彴璐�/鐧昏鍗曗�濈殑瀛楁锛堝師閫昏緫锛歵icketRegistrationId = row.id锛�
+      ticketRegistrationId: row.id,
+      id: null,
+      currentPaymentAmount: row.unPaymentAmountTotal || "",
+      paymentMethod: "",
+      paymentDate: today,
+      registrationtDate: today,
+      registrant: userStore.nickName || userStore.name,
+    };
+  });
+
   dialogFormVisible.value = true;
 };
 // 鎻愪氦琛ㄥ崟
 const submitForm = () => {
-  proxy.$refs["formRef"].validate((valid) => {
-    if (valid) {
-      if (operationType.value === "edit") {
-        submitEdit();
-      } else {
-        submitAdd();
-      }
-    }
+  // 鏍¢獙琛ㄦ牸鏁版嵁
+  const invalidRows = dialogTableData.value.filter((row) => {
+    return (
+      !row.currentPaymentAmount ||
+      Number(row.currentPaymentAmount) <= 0 ||
+      !row.paymentMethod ||
+      !row.paymentDate
+    );
   });
-};
-// 鎻愪氦鏂板
-const submitAdd = () => {
-  paymentRegistrationAdd(form.value).then((res) => {
-    proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-    closeDia();
-    getList();
+  if (invalidRows.length > 0) {
+    proxy.$modal?.msgError
+      ? proxy.$modal.msgError("璇峰畬鍠勬墍鏈夊繀濉」锛氫粯娆鹃噾棰濄�佷粯娆炬柟寮忋�佷粯娆炬棩鏈�")
+      : proxy.$message.error("璇峰畬鍠勬墍鏈夊繀濉」锛氫粯娆鹃噾棰濄�佷粯娆炬柟寮忋�佷粯娆炬棩鏈�");
+    return;
+  }
+
+  // 鏍¢獙浠樻閲戦涓嶈兘瓒呰繃寰呬粯娆鹃噾棰�
+  const exceedRows = dialogTableData.value.filter((row) => {
+    return Number(row.currentPaymentAmount) > Number(row.unPaymentAmountTotal);
   });
-};
-// 鎻愪氦淇敼
-const submitEdit = () => {
-  paymentRegistrationEdit(form.value).then((res) => {
-    proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-    closeDia();
-    getList();
+  if (exceedRows.length > 0) {
+    proxy.$modal?.msgError
+      ? proxy.$modal.msgError("浠樻閲戦涓嶈兘瓒呰繃寰呬粯娆鹃噾棰�")
+      : proxy.$message.error("浠樻閲戦涓嶈兘瓒呰繃寰呬粯娆鹃噾棰�");
+    return;
+  }
+
+  // 缁勮鏁扮粍鎵归噺鎻愪氦锛堝鏋滃悗绔笉鏀寔鏁扮粍锛屼細璧板厹搴曞惊鐜彁浜わ級
+  const submitDataList = dialogTableData.value.map((row) => {
+    return {
+      ticketRegistrationId: row.ticketRegistrationId,
+      purchaseLedgerId: row.purchaseLedgerId,
+      purchaseContractNumber: row.purchaseContractNumber,
+      salesContractNo: row.salesContractNo,
+      supplierName: row.supplierName,
+      invoiceNumber: row.invoiceNumber,
+      invoiceAmount: row.invoiceAmount,
+      taxRate: row.taxRate,
+      currentPaymentAmount: row.currentPaymentAmount,
+      paymentMethod: row.paymentMethod,
+      paymentDate: row.paymentDate,
+      registrant: row.registrant,
+      registrationtDate: row.registrationtDate,
+      id: null,
+    };
   });
+
+  paymentRegistrationAdd(submitDataList)
+    .then(() => {
+      proxy.$modal?.msgSuccess
+        ? proxy.$modal.msgSuccess("鎻愪氦鎴愬姛")
+        : proxy.$message.success("鎻愪氦鎴愬姛");
+      closeDia();
+      getList();
+    })
+    .catch((e) => {
+      console.error("鎻愪氦澶辫触:", e);
+    });
 };
 // 鍏抽棴寮规
 const closeDia = () => {
-  proxy.resetForm("formRef");
+  dialogTableData.value = [];
   dialogFormVisible.value = false;
 };
 // 鍒犻櫎
@@ -567,7 +578,25 @@
   const day = String(today.getDate()).padStart(2, "0");
   return `${year}-${month}-${day}`;
 }
-getList();
+
+// 瀵煎嚭
+const handleExport = () => {
+  ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      proxy.download("/purchase/registration/exportOne", { ...searchForm, ...page }, "浠樻鐧昏.xlsx");
+    })
+    .catch(() => {
+      proxy.$modal.msg("宸插彇娑�");
+    });
+};
+
+onMounted(() => {
+  getList();
+});
 </script>
 
 <style scoped lang="scss">

--
Gitblit v1.9.3