From c57fe99f8767c670f128c2bc86b7c8711af6bd33 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 25 三月 2026 11:29:07 +0800
Subject: [PATCH] 打印销售台账

---
 src/views/salesManagement/salesLedger/index.vue |  341 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 222 insertions(+), 119 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 1833bc1..c5495dd 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -481,51 +481,77 @@
 					<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 class="company-name">婀栧崡楣忓垱鐢靛瓙鏈夐檺鍏徃</div>
+								<div class="document-title">閫佽揣鍗�</div>
 							</div>
 							
 							<div class="info-section">
 								<div class="info-row">
-									<div>
-										<span class="label">鍙戣揣鏃ユ湡锛�</span>
-										<span class="value">{{ formatDate(item.createTime) }}</span>
-									</div>
-									<div>
-										<span class="label">鍙戣揣杞︾墝鍙凤細</span>
-										<span class="value">{{ item.shippingCarNumber }}</span>
-									</div>
+                  <div>
+                    <span class="label">瀹㈡埛鍚嶇О锛�</span>
+                    <span class="value">{{ item.customerName }}</span>
+                  </div>
+                  <div>
+                    <span class="label">閫佽揣鍦板潃锛�</span>
+                    <span class="value">{{ item.companyAddress }}</span>
+                  </div>
 								</div>
 								<div class="info-row">
-									<div>
-										<span class="label">瀹㈡埛鍚嶇О锛�</span>
-										<span class="value">{{ item.customerName || '寮犵埍鏈�' }}</span>
-									</div>
-									<span class="label">鍗曞彿锛�</span>
-									<span class="value">{{ item.salesContractNo }}</span>
+                  <div>
+                    <span class="label">鍗曟嵁缂栧彿锛�</span>
+                    <span class="value">{{ item.salesContractNo }}</span>
+                  </div>
+
+                  <div>
+                    <span class="label">閫佽揣鏃ユ湡锛�</span>
+                    <span class="value">{{ formatDate(null) }}</span>
+                  </div>
+
+                  <div>
+                    <span class="label">鑱旂郴鐢佃瘽锛�</span>
+                    <span class="value">{{ item.contactPhone }}</span>
+                  </div>
 								</div>
 							</div>
-							
+
+              <div class="info-section">
+                <div class="info-row">
+                  <div>
+                    <span class="label">鑱旂郴鏂瑰紡锛�</span>
+                    <span class="value"></span>
+                  </div>
+                  <div>
+                    <span class="label">閫佽揣鍗曚綅锛�</span>
+                    <span class="value">婀栧崡楣忓垱鐢靛瓙鏈夐檺鍏徃</span>
+                  </div>
+                  <div>
+                    <span class="label">鍦板潃锛�</span>
+                    <span class="value">婀栧崡鑰掗槼甯傚垱鏂板垱涓氬洯A1鏍�</span>
+                  </div>
+                </div>
+              </div>
+
+              <span style="font-size: 16px;">璐х墿璇︾粏淇℃伅锛�</span>
 							<div class="table-section">
 								<table class="product-table">
 									<thead>
 									<tr>
-										<th>浜у搧鍚嶇О</th>
-										<th>瑙勬牸鍨嬪彿</th>
+										<th>搴忓彿</th>
+										<th>鐗╂枡缂栧彿</th>
+										<th>鍝佸悕/瑙勬牸</th>
 										<th>鍗曚綅</th>
-										<th>鍗曚环</th>
-										<th>闆跺敭鏁伴噺</th>
-										<th>闆跺敭閲戦</th>
+										<th>鏁伴噺</th>
+										<th>璁㈠崟鍙�</th>
 									</tr>
 									</thead>
 									<tbody>
-									<tr v-for="product in item.products" :key="product.id">
-										<td>{{ product.productCategory || '' }}</td>
-										<td>{{ product.specificationModel || '' }}</td>
+									<tr v-for="(product, index) in item.products" :key="product.id">
+										<td>{{ index + 1 }}</td>
+										<td>{{ product.materialCode || '' }}</td>
+										<td>{{`${product.productCategory || ''}/${product.specificationModel || ''}` }}</td>
 										<td>{{ product.unit || '' }}</td>
-										<td>{{ product.taxInclusiveUnitPrice || '0' }}</td>
 										<td>{{ product.quantity || '0' }}</td>
-										<td>{{ product.taxInclusiveTotalPrice || '0' }}</td>
+										<td>{{ item.salesContractNo || '' }}</td>
 									</tr>
 									<tr v-if="!item.products || item.products.length === 0">
 										<td colspan="6" style="text-align: center; color: #999;">鏆傛棤浜у搧鏁版嵁</td>
@@ -533,43 +559,30 @@
 									</tbody>
 									<tfoot>
 									<tr>
+										<td class="label"></td>
 										<td class="label">鍚堣</td>
 										<td class="total-value"></td>
 										<td class="total-value"></td>
-										<td class="total-value"></td>
 										<td class="total-value">{{ getTotalQuantity(item.products) }}</td>
-										<td class="total-value">{{ getTotalAmount(item.products) }}</td>
+										<td class="total-value"></td>
 									</tr>
 									</tfoot>
 								</table>
+
+                <div style="width: 30px;">
+                  鍏卞洓鑱斿瓨鏍瑰洖鍗曞鎴蜂粨搴�
+                </div>
 							</div>
-							
-							<div class="footer-section">
-								<div class="footer-row">
-									<div class="footer-item">
-										<span class="label">鏀惰揣鐢佃瘽锛�</span>
-										<span class="value"></span>
-									</div>
-									<div class="footer-item">
-										<span class="label">鏀惰揣浜猴細</span>
-										<span class="value"></span>
-									</div>
-									<div class="footer-item address-item">
-										<span class="label">鏀惰揣鍦板潃锛�</span>
-										<span class="value address-value"></span>
-									</div>
-								</div>
-								<div class="footer-row">
-									<div class="footer-item">
-										<span class="label">鎿嶄綔鍛橈細</span>
-										<span class="value">{{ userStore.nickName || '鎾曞紑鍓�' }}</span>
-									</div>
-									<div class="footer-item">
-										<span class="label">鎵撳嵃鏃ユ湡锛�</span>
-										<span class="value">{{ formatDateTime(new Date()) }}</span>
-									</div>
-								</div>
-							</div>
+
+              <el-descriptions :column="1">
+                <el-descriptions-item label="澶囨敞锛�">璐靛叕鍙稿湪鏀惰揣鍚庤鍗冲埢鏍稿疄鏁伴噺鍙婂搧璐紝鑻ユ湁寮傝锛岃鍦�3鏃ュ唴鎻愬嚭锛屽惁鍒欒涓烘敹濡ャ��</el-descriptions-item>
+              </el-descriptions>
+              <el-descriptions :column="2">
+                <el-descriptions-item label="閫佽揣鍗曚綅锛堢绔狅級锛�"/>
+                <el-descriptions-item label="鏀惰揣鍗曚綅锛�"/>
+                <el-descriptions-item label="閫佽揣浜猴細"/>
+                <el-descriptions-item label="鏀惰揣浜猴細"/>
+              </el-descriptions>
 						</div>
 					</div>
 				</div>
@@ -1588,7 +1601,7 @@
         }
         .label {
           font-weight: bold;
-          width: 60px;
+          min-width: 60px;
           font-size: 12px;
         }
         .value {
@@ -1596,10 +1609,11 @@
           min-width: 80px;
           font-size: 12px;
         }
-                 .table-section {
-                 margin-bottom: 40px;
-          //  flex: 0.6;
-         }
+        .table-section {
+          margin-bottom: 4px;
+          flex: 1;
+          display: flex;
+        }
         .product-table {
           width: 100%;
           border-collapse: collapse;
@@ -1627,13 +1641,66 @@
           line-height: 22px;
           justify-content: space-between;
         }
+        .remarks-section {
+          margin: 10px 0;
+
+          .remark-item {
+            display: flex;
+            align-items: flex-start;
+
+            .label {
+              font-weight: bold;
+              min-width: 30px;
+              font-size: 14px;
+              margin-right: 10px;
+              white-space: nowrap;
+            }
+
+            .value {
+              flex: 1;
+              font-size: 14px;
+              line-height: 1.4;
+            }
+          }
+        }
+
+        .sign-section {
+          margin-top: 15px;
+
+          .sign-row {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 10px;
+
+            .sign-item {
+              display: flex;
+              align-items: center;
+              width: 48%;
+
+              .label {
+                font-weight: bold;
+                font-size: 14px;
+                margin-right: 10px;
+                white-space: nowrap;
+              }
+
+              .value {
+                flex: 1;
+                min-height: 30px;
+                border-bottom: 1px solid #000;
+                font-size: 14px;
+              }
+            }
+          }
+        }
+
         .footer-item {
           display: flex;
           margin-right: 20px;
         }
         .footer-item .label {
           font-weight: bold;
-          width: 80px;
+          min-width: 80px;
           font-size: 12px;
         }
         .footer-item .value {
@@ -1670,93 +1737,125 @@
       <div class="print-page">
         <div class="delivery-note">
           <div class="header">
-            <div class="company-name">榧庤瘹鐟炲疄涓氭湁闄愯矗浠诲叕鍙�</div>
-            <div class="document-title">闆跺敭鍙戣揣鍗�</div>
+              <div class="company-name">婀栧崡楣忓垱鐢靛瓙鏈夐檺鍏徃</div>
+              <div class="document-title">閫佽揣鍗�</div>
           </div>
-          
           <div class="info-section">
-            <div class="info-row">
-              <div>
-                <span class="label">鍙戣揣鏃ユ湡锛�</span>
-                <span class="value">${formatDate(item.createTime)}</span>
+              <div class="info-row">
+                <div>
+                  <span class="label">瀹㈡埛鍚嶇О锛�</span>
+                  <span class="value">${item.customerName || ''}</span>
+                </div>
+                <div>
+                  <span class="label">閫佽揣鍦板潃锛�</span>
+                  <span class="value">${item.companyAddress || ''}</span>
+                </div>
               </div>
-              <div>
-                <span class="label">瀹㈡埛鍚嶇О锛�</span>
-                <span class="value">${item.customerName || '寮犵埍鏈�'}</span>
-              </div>
-            </div>
-            <div class="info-row">
-              <span class="label">鍗曞彿锛�</span>
-              <span class="value">${item.salesContractNo || ''}</span>
-            </div>
-          </div>
+              <div class="info-row">
+                <div>
+                  <span class="label">鍗曟嵁缂栧彿锛�</span>
+                  <span class="value">${item.salesContractNo || ''}</span>
+                </div>
 
+                <div>
+                  <span class="label">閫佽揣鏃ユ湡锛�</span>
+                  <span class="value">${ formatDate(null)}</span>
+                </div>
+
+                <div>
+                  <span class="label">鑱旂郴鐢佃瘽锛�</span>
+                  <span class="value">${item.contactPhone || ''}</span>
+                </div>
+              </div>
+            </div>
+
+          <div class="info-section">
+              <div class="info-row">
+                <div>
+                  <span class="label">鑱旂郴鏂瑰紡锛�</span>
+                  <span class="value"></span>
+                </div>
+                <div>
+                  <span class="label">閫佽揣鍗曚綅锛�</span>
+                  <span class="value">婀栧崡楣忓垱鐢靛瓙鏈夐檺鍏徃</span>
+                </div>
+                <div>
+                  <span class="label">鍦板潃锛�</span>
+                  <span class="value">婀栧崡鑰掗槼甯傚垱鏂板垱涓氬洯A1鏍�</span>
+                </div>
+              </div>
+            </div>
+
+          <span style="font-size: 16px;">璐х墿璇︾粏淇℃伅锛�</span>
           <div class="table-section">
             <table class="product-table">
               <thead>
                 <tr>
-                  <th>浜у搧鍚嶇О</th>
-                  <th>瑙勬牸鍨嬪彿</th>
+                  <th>搴忓彿</th>
+                  <th>鐗╂枡缂栧彿</th>
+                  <th>鍝佸悕/瑙勬牸</th>
                   <th>鍗曚綅</th>
-                  <th>鍗曚环</th>
-                  <th>闆跺敭鏁伴噺</th>
-                  <th>闆跺敭閲戦</th>
+                  <th>鏁伴噺</th>
+                  <th>璁㈠崟鍙�</th>
                 </tr>
               </thead>
-              <tbody>
+                  <tbody>
                 ${item.products && item.products.length > 0 ?
-			item.products.map(product => `
+        item.products.map((product, index) => `
                     <tr>
-                      <td>${product.productCategory || ''}</td>
-                      <td>${product.specificationModel || ''}</td>
+                      <td>${index + 1}</td>
+                      <td>${product.materialCode || ''}</td>
+                      <td>${product.productCategory || ''}/${product.specificationModel || ''}</td>
                       <td>${product.unit || ''}</td>
-                      <td>${product.taxInclusiveUnitPrice || '0'}</td>
                       <td>${product.quantity || '0'}</td>
-                      <td>${product.taxInclusiveTotalPrice || '0'}</td>
+                      <td>${item.salesContractNo || ''}</td>
                     </tr>
                   `).join('') :
-			'<tr><td colspan="6" style="text-align: center; color: #999;">鏆傛棤浜у搧鏁版嵁</td></tr>'
-		}
+        '<tr><td colspan="6" style="text-align: center; color: #999;">鏆傛棤浜у搧鏁版嵁</td></tr>'
+    }
               </tbody>
               <tfoot>
                 <tr>
+                  <td></td>
                   <td class="label">鍚堣</td>
                   <td class="total-value"></td>
                   <td class="total-value"></td>
+                  <td class="total-value">${ getTotalQuantity(item.products) || '0'}</td>
                   <td class="total-value"></td>
-                  <td class="total-value">${getTotalQuantityForPrint(item.products)}</td>
-                  <td class="total-value">${getTotalAmountForPrint(item.products)}</td>
                 </tr>
               </tfoot>
             </table>
+
+            <div style="width: 30px;">
+              鍏卞洓鑱斿瓨鏍瑰洖鍗曞鎴蜂粨搴�
+            </div>
           </div>
 
-          <div class="footer-section">
-            <div class="footer-row">
-              <div class="footer-item">
-                <span class="label">鏀惰揣鐢佃瘽锛�</span>
-                <span class="value"></span>
+          <div class="remarks-section">
+            <div class="remark-item">
+              <span class="label">澶囨敞锛�</span>
+              <span class="value">璐靛叕鍙稿湪鏀惰揣鍚庤鍗冲埢鏍稿疄鏁伴噺鍙婂搧璐紝鑻ユ湁寮傝锛岃鍦�3鏃ュ唴鎻愬嚭锛屽惁鍒欒涓烘敹濡ャ��</span>
+            </div>
+          </div>
+          <div class="sign-section">
+            <div class="sign-row">
+              <div class="sign-item">
+                <span class="label">閫佽揣鍗曚綅锛堢绔狅級锛�</span>
               </div>
-              <div class="footer-item">
-                <span class="label">鏀惰揣浜猴細</span>
-                <span class="value"></span>
-              </div>
-              <div class="footer-item address-item">
-                <span class="label">鏀惰揣鍦板潃锛�</span>
-                <span class="value address-value"></span>
+              <div class="sign-item">
+                <span class="label">鏀惰揣鍗曚綅锛�</span>
               </div>
             </div>
-            <div class="footer-row">
-              <div class="footer-item">
-                <span class="label">鎿嶄綔鍛橈細</span>
-                <span class="value">${userStore.nickName || '鎾曞紑鍓�'}</span>
+            <div class="sign-row">
+              <div class="sign-item">
+                <span class="label">閫佽揣浜猴細</span>
               </div>
-              <div class="footer-item">
-                <span class="label">鎵撳嵃鏃ユ湡锛�</span>
-                <span class="value">${formatDateTime(new Date())}</span>
+              <div class="sign-item">
+                <span class="label">鏀惰揣浜猴細</span>
               </div>
             </div>
           </div>
+
         </div>
       </div>
     `;
@@ -1782,13 +1881,14 @@
 };
 // 鏍煎紡鍖栨棩鏈�
 const formatDate = (dateString) => {
-	if (!dateString) return getCurrentDate();
+	if (!dateString) return getCurrentDate().replace(/-/g, '/');
 	const date = new Date(dateString);
 	const year = date.getFullYear();
 	const month = String(date.getMonth() + 1).padStart(2, "0");
 	const day = String(date.getDate()).padStart(2, "0");
 	return `${year}/${month}/${day}`;
 };
+
 // 鏍煎紡鍖栨棩鏈熸椂闂�
 const formatDateTime = (date) => {
 	const year = date.getFullYear();
@@ -2249,7 +2349,7 @@
 
 .print-page {
 	width: 220mm;
-	height: 90mm;
+	min-height: 90mm;
 	padding: 10mm;
 	margin: 0 auto;
 	background: white;
@@ -2310,6 +2410,7 @@
 .table-section {
 	margin-bottom: 4px;
 	flex: 1;
+  display: flex;
 	
 	.product-table {
 		width: 100%;
@@ -2344,20 +2445,22 @@
 		display: flex;
 		margin-bottom: 3px;
 		line-height: 20px;
-		justify-content: space-between;
+		justify-content: flex-start;
 		
 		.footer-item {
 			display: flex;
+      align-items: center;
 			margin-right: 20px;
-			
+
 			.label {
 				font-weight: bold;
-				width: 80px;
+        white-space: nowrap;
+        margin-right: 10px;
 				font-size: 14px;
 			}
 			
 			.value {
-				min-width: 80px;
+				min-width: 300px;
 				font-size: 14px;
 			}
 			

--
Gitblit v1.9.3