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/salesManagement/receiptPayment/index.vue |  431 ++++++++++++++++++++++++++++++-----------------------
 1 files changed, 247 insertions(+), 184 deletions(-)

diff --git a/src/views/salesManagement/receiptPayment/index.vue b/src/views/salesManagement/receiptPayment/index.vue
index 80cb7f8..18292b2 100644
--- a/src/views/salesManagement/receiptPayment/index.vue
+++ b/src/views/salesManagement/receiptPayment/index.vue
@@ -13,24 +13,6 @@
                 prefix-icon="Search"
               />
             </el-form-item>
-            <el-form-item label="瀹㈡埛鍚堝悓鍙�">
-              <el-input
-                v-model="searchForm.customerContractNo"
-                placeholder="璇疯緭鍏�"
-                @change="handleQuery"
-                clearable
-                prefix-icon="Search"
-              />
-            </el-form-item>
-            <el-form-item label="椤圭洰鍚嶇О">
-              <el-input
-                v-model="searchForm.projectName"
-                placeholder="璇疯緭鍏�"
-                @change="handleQuery"
-                clearable
-                prefix-icon="Search"
-              />
-            </el-form-item>
             <el-form-item>
               <el-checkbox
                 v-model="searchForm.status"
@@ -49,7 +31,7 @@
       <div class="actions">
         <div></div>
         <div>
-          <el-button type="primary" icon="Plus" @click="openForm('add')">
+          <el-button type="primary" @click="openForm('add')">
             鏂板鍥炴
           </el-button>
           <el-button icon="Download" @click="handleOut"> 瀵煎嚭 </el-button>
@@ -65,7 +47,8 @@
         :summary-method="summarizeMainTable"
         :expand-row-keys="expandedRowKeys"
         @expand-change="expandChange"
-        height="calc(100vh - 18.5em)"
+
+        height="calc(100vh - 21.5em)"
       >
         <el-table-column align="center" type="selection" width="55" />
         <el-table-column type="expand">
@@ -82,13 +65,16 @@
                 type="index"
                 width="60"
               />
-              <el-table-column label="鍥炴鏃ユ湡" prop="receiptPaymentDate" />
+              <el-table-column label="鍥炴鏃ユ湡" prop="receiptPaymentDate"  width="130"/>
               <el-table-column label="鍥炴閲戦" prop="receiptPaymentAmount">
                 <template #default="scope">
-                  <el-input
-                    v-model="scope.row.receiptPaymentAmount"
-                    :disabled="!scope.row.editType"
-                  ></el-input>
+									<el-input-number :step="0.01" :min="0" style="width: 100%"
+																	 v-model="scope.row.receiptPaymentAmount"
+																	 :disabled="!scope.row.editType"
+																	 :precision="2"
+																	 placeholder="璇疯緭鍏�"
+																	 clearable
+									/>
                 </template>
               </el-table-column>
               <el-table-column label="鍥炴鏂瑰紡" prop="receiptPaymentType">
@@ -108,9 +94,9 @@
                   </el-select>
                 </template>
               </el-table-column>
-              <el-table-column label="鐧昏浜�" prop="registrant" />
-              <el-table-column label="鐧昏鏃ユ湡" prop="createTime" />
-              <el-table-column label="鎿嶄綔" width="150">
+              <el-table-column label="鐧昏浜�" prop="registrant" width="90"/>
+              <el-table-column label="鐧昏鏃ユ湡" prop="createTime"   width="130"/>
+              <el-table-column label="鎿嶄綔" width="150" align="center">
                 <template #default="scope">
                   <el-button
                     link
@@ -118,6 +104,7 @@
                     size="small"
                     @click="changeEditType(scope.row)"
                     v-if="!scope.row.editType"
+										:disabled="scope.row.registrant !== userStore.nickName"
                     >缂栬緫</el-button
                   >
                   <el-button
@@ -126,6 +113,7 @@
                     size="small"
                     @click="saveReceiptPayment(scope.row)"
                     v-if="scope.row.editType"
+										:disabled="scope.row.registrant !== userStore.nickName"
                     >淇濆瓨</el-button
                   >
                   <el-button
@@ -133,6 +121,7 @@
                     type="primary"
                     size="small"
                     @click="delReceiptRecord(scope.row)"
+										:disabled="scope.row.registrant !== userStore.nickName"
                     >鍒犻櫎</el-button
                   >
                 </template>
@@ -145,11 +134,7 @@
           label="閿�鍞悎鍚屽彿"
           prop="salesContractNo"
           show-overflow-tooltip
-        />
-        <el-table-column
-          label="瀹㈡埛鍚堝悓鍙�"
-          prop="customerContractNo"
-          show-overflow-tooltip
+          width="240"
         />
         <el-table-column
           label="瀹㈡埛鍚嶇О"
@@ -158,25 +143,34 @@
           width="240"
         />
         <el-table-column
-          label="椤圭洰鍚嶇О"
-          prop="projectName"
-          show-overflow-tooltip
-        />
+          label="鍥炴鐘舵��"
+          prop="statusName"
+          width="120"
+        >
+          <template #default="{ row }">
+            <el-tag :type="getStatusTagType(row.statusName)" disable-transitions>
+              {{ row.statusName || "--" }}
+            </el-tag>
+          </template>
+        </el-table-column>
         <el-table-column
           label="浜у搧澶х被"
           prop="productCategory"
           show-overflow-tooltip
+          width="100"
         />
         <el-table-column
           label="鍙戠エ鍙�"
           prop="invoiceNo"
           show-overflow-tooltip
+          width="200"
         />
         <el-table-column
           label="鍙戠エ閲戦(鍏�)"
           prop="invoiceTotal"
           show-overflow-tooltip
           :formatter="formattedNumber"
+          width="200"
         />
         <el-table-column label="绋庣巼(%)" prop="taxRate" show-overflow-tooltip />
         <el-table-column
@@ -184,11 +178,13 @@
           prop="receiptPaymentAmountTotal"
           show-overflow-tooltip
           :formatter="formattedNumber"
+          width="200"
         />
         <el-table-column
           label="寰呭洖娆鹃噾棰�(鍏�)"
           prop="noReceiptAmount"
           show-overflow-tooltip
+          width="200"
         >
           <template #default="{ row, column }">
             <el-text type="danger">
@@ -208,128 +204,126 @@
     </div>
     <el-dialog
       v-model="dialogFormVisible"
-      title="鏂板鍙戠エ鍙烽〉闈�"
-      width="70%"
+      title="鏂板鍥炴椤甸潰"
+      width="90%"
       @close="closeDia"
     >
-      <el-form
-        :model="form"
-        label-width="140px"
-        label-position="top"
-        :rules="rules"
-        ref="formRef"
+      <el-table
+        :data="dialogTableData"
+        border
+        style="width: 100%"
+        max-height="500px"
       >
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
-              <el-input
-                v-model="form.salesContractNo"
-                placeholder="鑷姩濉厖"
-                disabled
+        <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+        <el-table-column
+          label="閿�鍞悎鍚屽彿"
+          prop="salesContractNo"
+          show-overflow-tooltip
+          width="200"
+        />
+        <el-table-column
+          label="瀹㈡埛鍚嶇О"
+          prop="customerName"
+          show-overflow-tooltip
+          width="200"
+        />
+        <el-table-column
+          label="浜у搧澶х被"
+          prop="productCategory"
+          show-overflow-tooltip
+          width="120"
+        />
+        <el-table-column
+          label="瑙勬牸鍨嬪彿"
+          prop="specification"
+          show-overflow-tooltip
+          width="150"
+        />
+        <el-table-column
+          label="鍙戠エ鍙�"
+          prop="invoiceNo"
+          show-overflow-tooltip
+          width="180"
+        />
+        <el-table-column
+          label="鍙戠エ閲戦(鍏�)"
+          prop="invoiceTotal"
+          show-overflow-tooltip
+          :formatter="formattedNumber"
+          width="150"
+        />
+        <el-table-column
+          label="绋庣巼(%)"
+          prop="taxRate"
+          show-overflow-tooltip
+          width="100"
+        />
+        <el-table-column
+          label="寰呭洖娆鹃噾棰�(鍏�)"
+          prop="noReceiptAmount"
+          show-overflow-tooltip
+          width="150"
+        >
+          <template #default="{ row }">
+            <el-text type="danger">
+              {{ formattedNumber(row, null, row.noReceiptAmount) }}
+            </el-text>
+          </template>
+        </el-table-column>
+        <el-table-column label="鏈鍥炴閲戦(鍏�)" width="180">
+          <template #default="scope">
+            <el-input-number
+              :step="0.01"
+              :min="0"
+              :max="scope.row.noReceiptAmount"
+              style="width: 100%"
+              :precision="2"
+              v-model="scope.row.receiptPaymentAmount"
+              placeholder="璇疯緭鍏�"
+              clearable
+            />
+          </template>
+        </el-table-column>
+        <el-table-column label="鍥炴鏂瑰紡" width="150">
+          <template #default="scope">
+            <el-select
+              v-model="scope.row.receiptPaymentType"
+              placeholder="璇烽�夋嫨"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in receipt_payment_type"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
               />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="瀹㈡埛鍚嶇О锛�" prop="customerName">
-              <el-input
-                v-model="form.customerName"
-                placeholder="鑷姩濉厖"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ鍙凤細" prop="invoiceNo">
-              <el-input
-                v-model="form.invoiceNo"
-                placeholder="鑷姩濉厖"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍙戠エ閲戦(鍏�)锛�" prop="invoiceTotal">
-              <el-input
-                type="number"
-                v-model="form.invoiceTotal"
-                placeholder="鑷姩濉厖"
-                :step="0.01"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="绋庣巼锛�" prop="taxRate">
-              <el-input
-                type="number"
-                v-model="form.taxRate"
-                placeholder="鑷姩濉厖"
-                :step="0.01"
-                disabled
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鏈鍥炴閲戦锛�" prop="receiptPaymentAmount">
-              <el-input
-                type="number"
-                min="0"
-                v-model="form.receiptPaymentAmount"
-                placeholder="璇疯緭鍏�"
-                :step="0.01"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍥炴褰㈠紡锛�" prop="receiptPaymentType">
-              <el-select
-                v-model="form.receiptPaymentType"
-                placeholder="璇烽�夋嫨"
-                clearable
-              >
-                <el-option
-                  v-for="item in receipt_payment_type"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <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-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鏉ユ鏃ユ湡锛�" prop="receiptPaymentDate">
-              <el-date-picker
-                style="width: 100%"
-                v-model="form.receiptPaymentDate"
-                value-format="YYYY-MM-DD"
-                format="YYYY-MM-DD"
-                type="date"
-                placeholder="璇烽�夋嫨"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
+            </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.receiptPaymentDate"
+              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>
@@ -346,7 +340,6 @@
 import {
   receiptPaymentSaveOrUpdate,
   bindInvoiceNoRegPage,
-  invoiceInfo,
   receiptPaymentHistoryListNoPage,
   receiptPaymentDel,
 } from "../../../api/salesManagement/receiptPayment.js";
@@ -368,13 +361,12 @@
 
 // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
 const dialogFormVisible = ref(false);
+const dialogTableData = ref([]);
 const data = reactive({
   searchForm: {
     searchText: "",
     status: true,
     customerName: "",
-    customerContractNo: "",
-    projectName: "",
   },
   form: {
     salesContractNo: "",
@@ -412,6 +404,12 @@
 const formattedNumber = (row, column, cellValue) => {
   return parseFloat(cellValue).toFixed(2);
 };
+
+const getStatusTagType = (statusName = '') => {
+  const normalized = statusName.trim();
+  if (!normalized) return 'info';
+  return normalized === '鏈畬鎴愬洖娆�' ? 'danger' : 'success';
+};
 // 鏌ヨ鍒楄〃
 /** 鎼滅储鎸夐挳鎿嶄綔 */
 const handleQuery = () => {
@@ -424,13 +422,20 @@
   getList();
 };
 const getList = () => {
-  expandedRowKeys.value = [];
   tableLoading.value = true;
   bindInvoiceNoRegPage({ ...searchForm, ...page })
     .then((res) => {
       tableLoading.value = false;
       tableData.value = res.data.records;
       total.value = res.data.total;
+			if (expandedRowKeys.value.length > 0) {
+				const arr = []
+				const index = tableData.value.findIndex(item => item.id === expandedRowKeys.value[0]);
+				if (index > -1) {
+					arr.push(tableData.value[index]);
+					expandChange(tableData.value[index], arr)
+				}
+			}
     })
     .catch(() => {
       tableLoading.value = false;
@@ -466,9 +471,7 @@
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = (selection) => {
   console.log("selection", selection);
-  selectedRows.value = selection.filter(
-    (item) => item.customerContractNo !== null
-  );
+  selectedRows.value = selection;
 };
 // 涓昏〃鍚堣鏂规硶
 const summarizeMainTable = (param) => {
@@ -487,40 +490,97 @@
 };
 // 鎵撳紑寮规
 const openForm = () => {
-  form.value = {};
-  if (selectedRows.value.length !== 1) {
-    proxy.$modal.msgError("璇烽�夋嫨涓�鏉℃暟鎹�");
+  // 鑷冲皯閫夋嫨涓�鏉℃暟鎹�
+  if (selectedRows.value.length === 0) {
+    proxy.$modal.msgError("璇烽�夋嫨鏁版嵁");
     return;
   }
-  //
-  console.log("(selectedRows.value", selectedRows.value);
-  if (selectedRows.value[0].noReceiptAmount === 0) {
-    proxy.$modal.msgError("寰呭洖娆鹃噾棰濅负0鍏�");
+
+  // 鏍¢獙鏄惁涓虹浉鍚岄攢鍞悎鍚屽彿
+  const firstContractNo = selectedRows.value[0].salesContractNo;
+  const isSameContract = selectedRows.value.every(
+    (item) => item.salesContractNo === firstContractNo
+  );
+  if (!isSameContract) {
+    proxy.$modal.msgError("璇烽�夋嫨鐩稿悓閿�鍞悎鍚屽彿鐨勬暟鎹繘琛屽洖娆�");
     return;
   }
-  invoiceInfo({ id: selectedRows.value[0].id }).then((res) => {
-    form.value = { ...res.data };
-    form.value.invoiceLedgerId = form.value.id;
-    form.value.id = "";
-    form.value.registrant = userStore.nickName;
+
+  // 杩囨护鍑烘湁寰呭洖娆鹃噾棰濈殑璁板綍
+  const validRows = selectedRows.value.filter(
+    (item) => Number(item.noReceiptAmount) > 0
+  );
+  if (validRows.length === 0) {
+    proxy.$modal.msgWarning("鎵�閫夋暟鎹潎鏃犻渶鍐嶅洖娆�");
+    return;
+  }
+
+  // 鐩存帴浣跨敤澶栭儴琛ㄦ牸鏁版嵁锛屼负姣忔潯璁板綍娣诲姞鍥炴鐩稿叧瀛楁
+  dialogTableData.value = validRows.map((row) => {
+    return {
+      ...row,
+      invoiceLedgerId: row.id,
+      receiptPaymentAmount: row.noReceiptAmount || "",
+      receiptPaymentType: "",
+      receiptPaymentDate: "",
+      registrant: userStore.nickName,
+    };
   });
+
   dialogFormVisible.value = true;
 };
 // 鎻愪氦琛ㄥ崟
 const submitForm = () => {
-  proxy.$refs["formRef"].validate((valid) => {
-    if (valid) {
-      receiptPaymentSaveOrUpdate(form.value).then((res) => {
-        proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
-        closeDia();
-        getList();
-      });
-    }
+  // 鏍¢獙琛ㄦ牸鏁版嵁
+  const invalidRows = dialogTableData.value.filter((row) => {
+    return (
+      !row.receiptPaymentAmount ||
+      row.receiptPaymentAmount <= 0 ||
+      !row.receiptPaymentType ||
+      !row.receiptPaymentDate
+    );
   });
+
+  if (invalidRows.length > 0) {
+    proxy.$modal.msgError("璇峰畬鍠勬墍鏈夊繀濉」锛氬洖娆鹃噾棰濄�佸洖娆炬柟寮忋�佸洖娆炬棩鏈�");
+    return;
+  }
+
+  // 鏍¢獙鍥炴閲戦涓嶈兘瓒呰繃寰呭洖娆鹃噾棰�
+  const exceedRows = dialogTableData.value.filter((row) => {
+    return Number(row.receiptPaymentAmount) > Number(row.noReceiptAmount);
+  });
+
+  if (exceedRows.length > 0) {
+    proxy.$modal.msgError("鍥炴閲戦涓嶈兘瓒呰繃寰呭洖娆鹃噾棰�");
+    return;
+  }
+
+  // 缁勫悎鎴愭暟缁勬壒閲忔彁浜�
+  const submitDataList = dialogTableData.value.map((row) => {
+    return {
+      invoiceLedgerId: row.invoiceLedgerId,
+      receiptPaymentAmount: row.receiptPaymentAmount,
+      receiptPaymentType: row.receiptPaymentType,
+      receiptPaymentDate: row.receiptPaymentDate,
+      registrant: row.registrant,
+    };
+  });
+
+  receiptPaymentSaveOrUpdate(submitDataList)
+    .then(() => {
+      proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+      closeDia();
+      getList();
+    })
+    .catch((error) => {
+      console.error("鎻愪氦澶辫触:", error);
+      proxy.$modal.msgError("鎻愪氦澶辫触锛岃閲嶈瘯");
+    });
 };
 // 鍏抽棴寮规
 const closeDia = () => {
-  proxy.resetForm("formRef");
+  dialogTableData.value = [];
   dialogFormVisible.value = false;
 };
 
@@ -561,8 +621,11 @@
     receiptPaymentType: row.receiptPaymentType,
     receiptPaymentAmount: row.receiptPaymentAmount,
   };
-  receiptPaymentSaveOrUpdate(updateData).then((res) => {
+  // 瀛愯〃缂栬緫淇濆瓨涔熸寜鏁扮粍鎻愪氦锛堜笌鎵归噺鏂板淇濇寔涓�鑷达級
+  receiptPaymentSaveOrUpdate([updateData]).then((res) => {
     row.editType = !row.editType;
+		getList();
+		proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
   });
 };
 

--
Gitblit v1.9.3