From baf3c33766ccec31c172b7d81d96a6d32dfac8cc Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期二, 24 三月 2026 17:59:56 +0800
Subject: [PATCH] 调整销售台账打印样式

---
 src/views/salesManagement/salesLedger/index.vue |  188 +++++++++++++++++++++++++++++------------------
 1 files changed, 116 insertions(+), 72 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 11e6131..c24bdc8 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -121,7 +121,7 @@
         <el-table-column label="澶囨敞" prop="remarks" width="200" show-overflow-tooltip />
         <el-table-column fixed="right" label="鎿嶄綔" min-width="100" 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('edit', scope.row)" :disabled="!scope.row.isEdit">缂栬緫</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>-->
@@ -243,14 +243,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">
@@ -318,6 +318,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>
@@ -472,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.productNo || '' }}</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>
@@ -524,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>
@@ -780,6 +802,12 @@
 const quotationSearchForm = reactive({
 	quotationNo: "",
 	customer: "",
+});
+// 鎶ヤ环鍗曞脊妗嗗垎椤�
+const quotationPage = reactive({
+	current: 1,
+	size: 10,
+	total: 0,
 });
 const selectedQuotation = ref(null);
 
@@ -1005,6 +1033,7 @@
 
 // 娣诲姞琛ㄨ绫诲悕鏂规硶
 const tableRowClassName = ({ row }) => {
+  if (!row.deliveryDate) return '';
   if (row.isFh) return '';
 
   const diff = row.deliveryDaysDiff;
@@ -1074,6 +1103,8 @@
 const openQuotationDialog = async () => {
 	if (operationType.value === "view") return;
 	quotationDialogVisible.value = true;
+	// 鎵撳紑寮圭獥鏃堕噸缃垎椤靛埌绗竴椤�
+	quotationPage.current = 1;
 	// 鍏堢‘淇濆鎴峰垪琛ㄥ凡鍔犺浇锛屼究浜庡悗缁洖濉� customerId
 	if (!customerOption.value || customerOption.value.length === 0) {
 		try {
@@ -1090,14 +1121,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;
 	}
@@ -1106,7 +1138,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();
 };
 
 // 閫変腑鎶ヤ环鍗曞悗鍥炲~鍒板彴璐﹁〃鍗�
@@ -1561,7 +1601,7 @@
         }
         .label {
           font-weight: bold;
-          width: 60px;
+          min-width: 60px;
           font-size: 12px;
         }
         .value {
@@ -1606,7 +1646,7 @@
         }
         .footer-item .label {
           font-weight: bold;
-          width: 80px;
+          min-width: 80px;
           font-size: 12px;
         }
         .footer-item .value {
@@ -1643,7 +1683,7 @@
       <div class="print-page">
         <div class="delivery-note">
           <div class="header">
-            <div class="company-name">榧庤瘹鐟炲疄涓氭湁闄愯矗浠诲叕鍙�</div>
+            <div class="company-name">婀栧崡楣忓垱鐢靛瓙鏈夐檺鍏徃</div>
             <div class="document-title">闆跺敭鍙戣揣鍗�</div>
           </div>
           
@@ -1755,13 +1795,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();
@@ -2222,7 +2263,7 @@
 
 .print-page {
 	width: 220mm;
-	height: 90mm;
+	min-height: 90mm;
 	padding: 10mm;
 	margin: 0 auto;
 	background: white;
@@ -2283,6 +2324,7 @@
 .table-section {
 	margin-bottom: 4px;
 	flex: 1;
+  display: flex;
 	
 	.product-table {
 		width: 100%;
@@ -2317,20 +2359,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