From 95eff8a806da343936ed85a9ae5cd75cf30962e7 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期四, 09 四月 2026 11:21:26 +0800
Subject: [PATCH] 销售管理: 增加产品删除时的最小保留条目限制

---
 src/views/salesManagement/salesLedger/index.vue |  112 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 70 insertions(+), 42 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 8b7b17c..dc9e3b7 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -10,10 +10,10 @@
           <el-input v-model="searchForm.salesContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
             @change="handleQuery" />
         </el-form-item>
-        <el-form-item label="椤圭洰鍚嶇О锛�">
+        <!-- <el-form-item label="椤圭洰鍚嶇О锛�">
           <el-input v-model="searchForm.projectName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
             @change="handleQuery" />
-        </el-form-item>
+        </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" />
@@ -51,10 +51,12 @@
 															 width="100px"
 															 align="center">
                 <template #default="scope">
-									<el-tag v-if="scope.row.approveStatus === 1"
+
+									<el-tag v-if="scope.row.approveStatus === 1 && (!scope.row.shippingDate || !scope.row.shippingCarNumber)"
 													type="success">鍏呰冻</el-tag>
-									<el-tag v-else
-													type="danger">涓嶈冻</el-tag>
+									<el-tag v-else-if="scope.row.approveStatus === 0 && (scope.row.shippingDate || scope.row.shippingCarNumber)"
+													type="success">宸插嚭搴�</el-tag>
+									<el-tag v-else type="danger">涓嶈冻</el-tag>
                 </template>
               </el-table-column>
 							<el-table-column label="鍙戣揣鐘舵��" width="140" align="center">
@@ -95,8 +97,7 @@
                 <template #default="scope">
                   <el-button 
                     link 
-                    type="primary" 
-                    size="small"
+                    type="primary"
                     :disabled="!canShip(scope.row)"
                     @click="openDeliveryForm(scope.row)">
                     鍙戣揣
@@ -110,7 +111,7 @@
         <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" width="180" show-overflow-tooltip />
         <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" width="300" show-overflow-tooltip />
         <el-table-column label="涓氬姟鍛�" prop="salesman" width="100" show-overflow-tooltip />
-        <el-table-column label="椤圭洰鍚嶇О" prop="projectName" width="180" show-overflow-tooltip />
+        <!-- <el-table-column label="椤圭洰鍚嶇О" prop="projectName" width="180" show-overflow-tooltip /> -->
         <el-table-column label="浠樻鏂瑰紡" prop="paymentMethod" show-overflow-tooltip />
         <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" width="220" show-overflow-tooltip
           :formatter="formattedNumber" />
@@ -118,12 +119,11 @@
         <el-table-column label="褰曞叆鏃ユ湡" prop="entryDate" width="120" show-overflow-tooltip />
         <el-table-column label="绛捐鏃ユ湡" prop="executionDate" width="120" show-overflow-tooltip />
         <el-table-column label="浜や粯鏃ユ湡" prop="deliveryDate" width="120" show-overflow-tooltip />
-        <el-table-column fixed="right" label="鎿嶄綔" min-width="100" align="center">
+        <el-table-column label="澶囨敞" prop="remarks" width="200" show-overflow-tooltip />
+        <el-table-column fixed="right" label="鎿嶄綔" width="130" align="center">
           <template #default="scope">
-            <el-button link type="primary" size="small" @click="openForm('edit', scope.row)">缂栬緫</el-button>
-<!--            <el-button link type="primary" size="small" @click="openForm('view', scope.row)">璇︽儏</el-button>-->
-            <el-button link type="primary" size="small" @click="downLoadFile(scope.row)">闄勪欢</el-button>
-<!--            <el-button link type="primary" size="small" @click="openDeliveryForm(scope.row)">鍙戣揣</el-button>-->
+            <el-button link type="primary" @click="openForm('edit', scope.row)" :disabled="!scope.row.isEdit">缂栬緫</el-button>
+            <el-button link type="primary" @click="downLoadFile(scope.row)">闄勪欢</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -168,26 +168,24 @@
               </el-select>
             </el-form-item>
           </el-col>
-					<el-col :span="12">
-						<el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName">
-							<el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
-						</el-form-item>
-					</el-col>
-        </el-row>
-        <el-row :gutter="30">
-					<el-col :span="12">
+		  <el-col :span="12">
 						<el-form-item label="绛捐鏃ユ湡锛�" prop="executionDate">
 							<el-date-picker style="width: 100%" v-model="form.executionDate" value-format="YYYY-MM-DD"
 															format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'view'" />
 						</el-form-item>
 					</el-col>
+					<!-- <el-col :span="12">
+						<el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName">
+							<el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" />
+						</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 :disabled="operationType === 'view'" />
 						</el-form-item>
 					</el-col>
-				</el-row>
-				<el-row :gutter="30">
 					<el-col :span="12">
 						<el-form-item label="褰曞叆浜猴細" prop="entryPerson">
 							<el-select v-model="form.entryPerson"
@@ -198,21 +196,21 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
+				</el-row>
+				<el-row :gutter="30">
 					<el-col :span="12">
 						<el-form-item label="褰曞叆鏃ユ湡锛�" prop="entryDate">
 							<el-date-picker style="width: 100%" v-model="form.entryDate" 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-col :span="12">
             <el-form-item label="浜よ揣鏃ユ湡锛�" prop="entryDate">
               <el-date-picker style="width: 100%" v-model="form.deliveryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
                               type="date" placeholder="璇烽�夋嫨" clearable />
             </el-form-item>
           </el-col>
-        </el-row>
+				</el-row>
 				<el-row>
 					<el-form-item label="浜у搧淇℃伅锛�" prop="entryDate">
 						<el-button v-if="operationType !== 'view'" type="primary" @click="openProductForm('add')">娣诲姞</el-button>
@@ -242,14 +240,14 @@
 				</el-table>
 				<el-row :gutter="30">
 					<el-col :span="24">
-						<el-form-item label="澶囨敞路锛�" prop="remark">
-							<el-input v-model="form.remark" placeholder="璇疯緭鍏�" clearable type="textarea" :rows="2" :disabled="operationType === 'view'" />
+						<el-form-item label="澶囨敞锛�" prop="remarks">
+							<el-input v-model="form.remarks" placeholder="璇疯緭鍏�" clearable type="textarea" :rows="2" :disabled="operationType === 'view'" />
 						</el-form-item>
 					</el-col>
 				</el-row>
 				<el-row :gutter="30">
 					<el-col :span="24">
-						<el-form-item label="闄勪欢鏉愭枡锛�" prop="remark">
+						<el-form-item label="闄勪欢鏉愭枡锛�" prop="salesLedgerFiles">
 							<el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload
 												 :headers="upload.headers" :before-upload="handleBeforeUpload" :on-error="handleUploadError"
 												 :on-success="handleUploadSuccess" :on-remove="handleRemove">
@@ -317,6 +315,15 @@
 					</template>
 				</el-table-column>
 			</el-table>
+			
+			<pagination
+				v-show="quotationPage.total > 0"
+				:total="quotationPage.total"
+				layout="total, sizes, prev, pager, next, jumper"
+				:page="quotationPage.current"
+				:limit="quotationPage.size"
+				@pagination="quotationPaginationChange"
+			/>
 			
 			<template #footer>
 				<el-button @click="quotationDialogVisible = false">鍏抽棴</el-button>
@@ -471,7 +478,6 @@
 					<div v-for="(item, index) in printData" :key="index" class="print-page">
 						<div class="delivery-note">
 							<div class="header">
-								<div class="company-name">榧庤瘹鐟炲疄涓氭湁闄愯矗浠诲叕鍙�</div>
 								<div class="document-title">闆跺敭鍙戣揣鍗�</div>
 							</div>
 							
@@ -489,7 +495,7 @@
 								<div class="info-row">
 									<div>
 										<span class="label">瀹㈡埛鍚嶇О锛�</span>
-										<span class="value">{{ item.customerName || '寮犵埍鏈�' }}</span>
+										<span class="value">{{ item.customerName }}</span>
 									</div>
 									<span class="label">鍗曞彿锛�</span>
 									<span class="value">{{ item.salesContractNo }}</span>
@@ -622,7 +628,6 @@
                   <div>
                     <el-button
                       type="danger"
-                      size="small"
                       @click="removeApproverNode(index)"
                       v-if="approverNodes.length > 1"
                     >鍒犻櫎</el-button>
@@ -779,6 +784,12 @@
 const quotationSearchForm = reactive({
 	quotationNo: "",
 	customer: "",
+});
+// 鎶ヤ环鍗曞脊妗嗗垎椤�
+const quotationPage = reactive({
+	current: 1,
+	size: 10,
+	total: 0,
 });
 const selectedQuotation = ref(null);
 
@@ -1004,6 +1015,7 @@
 
 // 娣诲姞琛ㄨ绫诲悕鏂规硶
 const tableRowClassName = ({ row }) => {
+  if (!row.deliveryDate) return '';
   if (row.isFh) return '';
 
   const diff = row.deliveryDaysDiff;
@@ -1073,6 +1085,8 @@
 const openQuotationDialog = async () => {
 	if (operationType.value === "view") return;
 	quotationDialogVisible.value = true;
+	// 鎵撳紑寮圭獥鏃堕噸缃垎椤靛埌绗竴椤�
+	quotationPage.current = 1;
 	// 鍏堢‘淇濆鎴峰垪琛ㄥ凡鍔犺浇锛屼究浜庡悗缁洖濉� customerId
 	if (!customerOption.value || customerOption.value.length === 0) {
 		try {
@@ -1089,14 +1103,15 @@
 	quotationLoading.value = true;
 	try {
 		const params = {
-			// 鍏煎鍚庣鍒嗛〉瀛楁锛氳繖閲屾部鐢ㄦ姤浠烽〉闈㈠凡鏈夊彲鐢ㄧ殑瀛楁鍛藉悕
-			currentPage: 1,
-			pageSize: 100,
+			// 鍚庣鍒嗛〉瀛楁锛歝urrent / size
+			current: quotationPage.current,
+			size: quotationPage.size,
 			...quotationSearchForm,
 			status: "閫氳繃",
 		};
 		const res = await getQuotationList(params);
 		quotationList.value = res?.data?.records || [];
+		quotationPage.total = res?.data?.total || 0;
 	} finally {
 		quotationLoading.value = false;
 	}
@@ -1105,7 +1120,15 @@
 const resetQuotationSearch = async () => {
 	quotationSearchForm.quotationNo = "";
 	quotationSearchForm.customer = "";
+	quotationPage.current = 1;
 	await fetchQuotationList();
+};
+
+// 鎶ヤ环鍗曞脊妗嗗垎椤靛垏鎹�
+const quotationPaginationChange = (obj) => {
+	quotationPage.current = obj.page;
+	quotationPage.size = obj.limit;
+	fetchQuotationList();
 };
 
 // 閫変腑鎶ヤ环鍗曞悗鍥炲~鍒板彴璐﹁〃鍗�
@@ -1316,6 +1339,12 @@
 			}
 		});
 	} else {
+		// 缂栬緫鍦烘櫙鍒犻櫎鏃讹紝蹇呴』鑷冲皯淇濈暀 1 鏉′骇鍝佷俊鎭�
+		if (productData.value.length - productSelectedRows.value.length < 1) {
+			proxy.$modal.msgWarning("浜у搧淇℃伅鑷冲皯淇濈暀涓�鏉�");
+			return;
+		}
+
 		let ids = [];
 		if (productSelectedRows.value.length > 0) {
 			ids = productSelectedRows.value.map((item) => item.id);
@@ -1642,7 +1671,6 @@
       <div class="print-page">
         <div class="delivery-note">
           <div class="header">
-            <div class="company-name">榧庤瘹鐟炲疄涓氭湁闄愯矗浠诲叕鍙�</div>
             <div class="document-title">闆跺敭鍙戣揣鍗�</div>
           </div>
           
@@ -1654,7 +1682,7 @@
               </div>
               <div>
                 <span class="label">瀹㈡埛鍚嶇О锛�</span>
-                <span class="value">${item.customerName || '寮犵埍鏈�'}</span>
+                <span class="value">${item.customerName}</span>
               </div>
             </div>
             <div class="info-row">
@@ -2168,19 +2196,19 @@
 	margin-left: 10px;
 }
 
-::v-deep .yellow {
+:deep(.yellow) {
   background-color: #FAF0DE;
 }
 
-::v-deep .pink {
+:deep(.pink) {
   background-color: #FAE1DE;
 }
 
-::v-deep .red {
+:deep(.red) {
   background-color: #FAE1DE;
 }
 
-::v-deep .purple{
+:deep(.purple){
   background-color: #F4DEFA;
 }
 

--
Gitblit v1.9.3