From 7118f393605f8ef28457430d43a2608aa02f1696 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 22 一月 2026 14:28:42 +0800
Subject: [PATCH] 湟水峡 1.发货分开类型货车和快递,并可以上传图片

---
 src/views/inventoryManagement/dispatchLog/index.vue |  367 +++++++++++++++-------------------------------------
 1 files changed, 106 insertions(+), 261 deletions(-)

diff --git a/src/views/inventoryManagement/dispatchLog/index.vue b/src/views/inventoryManagement/dispatchLog/index.vue
index 7f4b267..f41fe86 100644
--- a/src/views/inventoryManagement/dispatchLog/index.vue
+++ b/src/views/inventoryManagement/dispatchLog/index.vue
@@ -1,18 +1,9 @@
 <template>
 	<div class="app-container">
 		<el-tabs v-model="activeTab" @tab-change="handleTabChange">
-			<el-tab-pane label="鐢熶骇鍑哄簱" name="production">
+			<el-tab-pane label="鎴愬搧鍑哄簱" name="production">
 				<div class="search_form">
 					<div>
-						<span class="search_title">瀹㈡埛鍚嶇О锛�</span>
-						<el-input
-							v-model="searchForm.customerName"
-							style="width: 240px"
-							placeholder="璇疯緭鍏�"
-							@change="handleQuery"
-							clearable
-							prefix-icon="Search"
-						/>
 						<span class="search_title ml10">鍑哄簱鏃ユ湡锛�</span>
 						<el-date-picker
 							v-model="searchForm.timeStr"
@@ -23,71 +14,12 @@
 							clearable
 							@change="handleQuery"
 						/>
-						<el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
-					</div>
-					<div>
-						<el-button @click="handleOut">瀵煎嚭</el-button>
-						<el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
-						<el-button type="primary" plain @click="handlePrint">鎵撳嵃</el-button>
-					</div>
-				</div>
-				<div class="table_list">
-					<el-table
-						:data="tableData"
-						border
-						v-loading="tableLoading"
-						:expand-row-keys="expandedRowKeys"
-						:row-key="(row) => row.id"
-						show-summary
-						style="width: 100%"
-						:summary-method="summarizeMainTable"
-						height="calc(100vh - 18.5em)"
-					>
-						<el-table-column align="center" label="搴忓彿" type="index" width="60" />
-						<el-table-column label="鍑哄簱鏃ユ湡" prop="createTime" min-width="250" show-overflow-tooltip />
-						<el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" width="250" show-overflow-tooltip />
-						<el-table-column label="浜у搧澶х被" prop="productCategory" width="100" show-overflow-tooltip />
-						<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="100" show-overflow-tooltip />
-						<el-table-column label="鍗曚綅" prop="unit" width="80" show-overflow-tooltip />
-						<el-table-column label="鍑哄簱鏁伴噺" prop="inboundNum" width="100" show-overflow-tooltip />
-						<el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />
-						<el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />
-						<el-table-column label="绋庣巼(%)" prop="taxRate" width="100" show-overflow-tooltip />
-						<el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip />
-						<el-table-column label="鍑哄簱浜�" prop="createBy" width="80" show-overflow-tooltip />
-					</el-table>
-					<pagination
-						v-show="total > 0"
-						:total="total"
-						layout="total, sizes, prev, pager, next, jumper"
-						:page="page.current"
-						:limit="page.size"
-						@pagination="paginationChange"
-					/>
-				</div>
-			</el-tab-pane>
-
-			<el-tab-pane label="閲囪喘鍑哄簱" name="purchase">
-				<div class="search_form">
-					<div>
-						<span class="search_title">渚涘簲鍟嗗悕绉帮細</span>
+						<span class="search_title ml10">浜у搧澶х被锛�</span>
 						<el-input
-							v-model="searchForm.supplierName"
+							v-model="searchForm.productCategory"
 							style="width: 240px"
 							placeholder="璇疯緭鍏�"
-							@change="handleQuery"
 							clearable
-							prefix-icon="Search"
-						/>
-						<span class="search_title ml10">鍑哄簱鏃ユ湡锛�</span>
-						<el-date-picker
-							v-model="searchForm.timeStr"
-							type="date"
-							placeholder="璇烽�夋嫨鏃ユ湡"
-							value-format="YYYY-MM-DD"
-							format="YYYY-MM-DD"
-							clearable
-							@change="handleQuery"
 						/>
 						<el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
 					</div>
@@ -112,16 +44,14 @@
 					>
 						<el-table-column align="center" type="selection" width="55" />
 						<el-table-column align="center" label="搴忓彿" type="index" width="60" />
-						<el-table-column label="鍑哄簱鏃ユ湡" prop="createTime" min-width="250" show-overflow-tooltip />
-						<el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="250" show-overflow-tooltip />
-						<el-table-column label="浜у搧澶х被" prop="productCategory" width="100" show-overflow-tooltip />
-						<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="100" show-overflow-tooltip />
+						<el-table-column label="鍑哄簱鏃ユ湡" prop="createTime" width="120" show-overflow-tooltip />
+						<el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" width="180" show-overflow-tooltip />
+						<el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
+						<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
 						<el-table-column label="鍗曚綅" prop="unit" width="80" show-overflow-tooltip />
 						<el-table-column label="鍑哄簱鏁伴噺" prop="inboundNum" width="100" show-overflow-tooltip />
-						<el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />
-						<el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />
-						<el-table-column label="绋庣巼(%)" prop="taxRate" width="100" show-overflow-tooltip />
-						<el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip />
+						<el-table-column label="鍗曚环(鍏�)" prop="unitPrice" width="150"></el-table-column>
+						<el-table-column label="鎬讳环(鍏�)" prop="totalPrice" width="150"></el-table-column>
 						<el-table-column label="鍑哄簱浜�" prop="createBy" width="80" show-overflow-tooltip />
 					</el-table>
 					<pagination
@@ -135,18 +65,9 @@
 				</div>
 			</el-tab-pane>
 
-			<el-tab-pane label="鑷畾涔夊嚭搴�" name="manual">
+			<el-tab-pane label="鍘熸枡鍑哄簱" name="purchase">
 				<div class="search_form">
 					<div>
-						<span class="search_title">渚涘簲鍟嗗悕绉帮細</span>
-						<el-input
-							v-model="searchForm.supplierName"
-							style="width: 240px"
-							placeholder="璇疯緭鍏�"
-							@change="handleQuery"
-							clearable
-							prefix-icon="Search"
-						/>
 						<span class="search_title ml10">鍑哄簱鏃ユ湡锛�</span>
 						<el-date-picker
 							v-model="searchForm.timeStr"
@@ -156,6 +77,13 @@
 							format="YYYY-MM-DD"
 							clearable
 							@change="handleQuery"
+						/>
+						<span class="search_title ml10">浜у搧澶х被锛�</span>
+						<el-input
+							v-model="searchForm.productCategory"
+							style="width: 240px"
+							placeholder="璇疯緭鍏�"
+							clearable
 						/>
 						<el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
 					</div>
@@ -180,17 +108,14 @@
 					>
 						<el-table-column align="center" type="selection" width="55" />
 						<el-table-column align="center" label="搴忓彿" type="index" width="60" />
-						<el-table-column label="鍑哄簱鏃ユ湡" prop="createTime" min-width="250" show-overflow-tooltip />
-						<el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="250" show-overflow-tooltip />
-						<el-table-column label="浜у搧澶х被" prop="productCategory" width="100" show-overflow-tooltip />
-						<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="100" show-overflow-tooltip />
+						<el-table-column label="鍑哄簱鏃ユ湡" prop="createTime" width="120" show-overflow-tooltip />
+						<el-table-column label="閲囪喘鍚堝悓鍙�" prop="purchaseContractNumber" width="180" show-overflow-tooltip />
+						<el-table-column label="浜у搧澶х被" prop="productCategory" show-overflow-tooltip />
+						<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" show-overflow-tooltip />
 						<el-table-column label="鍗曚綅" prop="unit" width="80" show-overflow-tooltip />
-						<el-table-column label="鐗╁搧绫诲瀷" prop="itemType" width="120" show-overflow-tooltip />
 						<el-table-column label="鍑哄簱鏁伴噺" prop="inboundNum" width="100" show-overflow-tooltip />
-						<el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />
-						<el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />
-						<el-table-column label="绋庣巼(%)" prop="taxRate" width="100" show-overflow-tooltip />
-						<el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip />
+						<el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="150"></el-table-column>
+						<el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" width="150"></el-table-column>
 						<el-table-column label="鍑哄簱浜�" prop="createBy" width="80" show-overflow-tooltip />
 					</el-table>
 					<pagination
@@ -204,114 +129,7 @@
 				</div>
 			</el-tab-pane>
 		</el-tabs>
-		<div class="table_list">
-			<el-table
-				:data="tableData"
-				border
-				v-loading="tableLoading"
-				@selection-change="handleSelectionChange"
-				:expand-row-keys="expandedRowKeys"
-				:row-key="(row) => row.id"
-				show-summary
-				style="width: 100%"
-				:summary-method="summarizeMainTable"
-				height="calc(100vh - 18.5em)"
-			>
-				<el-table-column align="center" type="selection" width="55" />
-				<el-table-column align="center" label="搴忓彿" type="index" width="60" />
-				<el-table-column
-					label="鍑哄簱鏃ユ湡"
-					prop="createTime"
-					min-width="250"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="渚涘簲鍟嗗悕绉�"
-					prop="supplierName"
-					width="250"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="浜у搧澶х被"
-					prop="productCategory"
-					width="100"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="瑙勬牸鍨嬪彿"
-					prop="specificationModel"
-					width="100"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="鍗曚綅"
-					prop="unit"
-					width="80"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="鍑哄簱鏁伴噺"
-					prop="inboundNum"
-					width="100"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="鍚◣鍗曚环(鍏�)"
-					prop="taxInclusiveUnitPrice"
-					width="100"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="鍚◣鎬讳环(鍏�)"
-					prop="taxInclusiveTotalPrice"
-					width="100"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="绋庣巼(%)"
-					prop="taxRate"
-					width="100"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="涓嶅惈绋庢�讳环(鍏�)"
-					prop="taxExclusiveTotalPrice"
-					width="180"
-					show-overflow-tooltip
-				/>
-				<el-table-column
-					label="鍑哄簱浜�"
-					prop="createBy"
-					width="80"
-					show-overflow-tooltip
-				/>
-				<!-- <el-table-column
-					fixed="right"
-					label="鎿嶄綔"
-					min-width="60"
-					align="center"
-				>
-					<template #default="scope">
-						<el-button
-							link
-							type="primary"
-							size="small"
-							@click="openForm('edit', scope.row)"
-							>缂栬緫</el-button
-						>
-					</template>
-				</el-table-column> -->
-			</el-table>
-			<pagination
-				v-show="total > 0"
-				:total="total"
-				layout="total, sizes, prev, pager, next, jumper"
-				:page="page.current"
-				:limit="page.size"
-				@pagination="paginationChange"
-			/>
-		</div>
-		
+
 		<!-- 鎵撳嵃棰勮寮圭獥 -->
 		<el-dialog
 			v-model="printPreviewVisible"
@@ -335,10 +153,10 @@
 					<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="company-name">鍐涙嘲浼熶笟锛堝ぉ娲ワ級鏈夐檺鍏徃</div>
 								<div class="document-title">闆跺敭鍙戣揣鍗�</div>
 							</div>
-							
+
 							<div class="info-section">
 								<div class="info-row">
 									<div>
@@ -346,7 +164,7 @@
 										<span class="value">{{ formatDate(item.createTime) }}</span>
 									</div>
 									<div>
-										
+
 										<span class="label">瀹㈡埛鍚嶇О锛�</span>
 										<span class="value">{{ item.supplierName || '寮犵埍鏈�' }}</span>
 									</div>
@@ -356,7 +174,7 @@
 									<span class="value">{{ item.code }}</span>
 								</div>
 							</div>
-							
+
 							<div class="table-section">
 								<table class="product-table">
 									<thead>
@@ -391,7 +209,7 @@
 									</tfoot>
 								</table>
 							</div>
-							
+
 							<div class="footer-section">
 								<div class="footer-row">
 									<div class="footer-item">
@@ -423,8 +241,8 @@
 				</div>
 			</div>
 		</el-dialog>
-	
-	
+
+
 	</div>
 </template>
 
@@ -436,10 +254,10 @@
 import {
 	getStockOutPage,
 	delStockOut,
+  getStockOutSemiProductPage,
 } from "@/api/inventoryManagement/stockOut.js";
 import {
 	getStockInPageByProduct,
-	getStockInPageByCustom,
 } from "@/api/inventoryManagement/stockIn.js";
 
 const userStore = useUserStore();
@@ -463,7 +281,8 @@
 	searchForm: {
 		supplierName: "",
 		customerName: "",
-		timeStr: "",
+    	productCategory:'',
+		timeStr: '',
 	},
 	form: {
 		supplierId: null,
@@ -498,6 +317,11 @@
 	page.size = obj.limit;
 	getList();
 };
+const paginationSemiProductChange = (obj) => {
+  page.current = obj.page;
+  page.size = obj.limit;
+  getList();
+};
 const getList = () => {
 	tableLoading.value = true;
 	const params = { ...page }
@@ -508,26 +332,46 @@
 		params.supplierName = searchForm.value.supplierName
 		params.timeStr = searchForm.value.timeStr
 	}
-	
-	// 鏍规嵁涓嶅悓鐨� tab 绫诲瀷璋冪敤涓嶅悓鐨勬帴鍙�
-	const apiCall = activeTab.value === 'production' 
-		? getStockInPageByProduct(params)
-		: activeTab.value === 'manual' 
-		? getStockInPageByCustom(params)
-		: getStockOutPage(params)
-	
-	apiCall
-		.then((res) => {
-			tableLoading.value = false;
-			tableData.value = res.data.records;
-			tableData.value.map((item) => {
-				item.children = [];
-			});
-			total.value = res.data.total;
-		})
-		.catch(() => {
-			tableLoading.value = false;
-		});
+    params.productCategory = searchForm.value.productCategory
+
+	// 鏍规嵁涓嶅悓鐨� tab 绫诲瀷璋冪敤涓嶅悓鐨勬帴鍙
+  if (activeTab.value === 'semiProduct') {
+    const apiCall = getStockOutSemiProductPage(params)
+    apiCall
+        .then((res) => {
+          tableLoading.value = false;
+          tableData.value = res.data.records;
+        })
+  }else {
+    const apiCall = activeTab.value === 'production'
+        ? getStockInPageByProduct(params)
+        : getStockOutPage(params)
+
+    apiCall
+        .then((res) => {
+          tableLoading.value = false;
+          tableData.value = res.data.records;
+          tableData.value.map((item) => {
+            item.children = [];
+            // 鍓嶇璁$畻鎬讳环
+            const inboundNum = Number(item.inboundNum) || 0;
+            if (activeTab.value === 'production') {
+              // 鎴愬搧鍑哄簱锛氭�讳环 = unitPrice 脳 inboundNum
+              const unitPrice = Number(item.unitPrice) || 0;
+              item.totalPrice = (unitPrice * inboundNum).toFixed(2);
+            } else {
+              // 鍘熸枡鍑哄簱锛氭�讳环 = taxInclusiveUnitPrice 脳 inboundNum
+              const taxInclusiveUnitPrice = Number(item.taxInclusiveUnitPrice) || 0;
+              item.taxInclusiveTotalPrice = (taxInclusiveUnitPrice * inboundNum).toFixed(2);
+            }
+          });
+          total.value = res.data.total;
+        })
+        .catch(() => {
+          tableLoading.value = false;
+        });
+  }
+
 };
 
 const handleTabChange = () => {
@@ -536,6 +380,7 @@
 	searchForm.value.customerName = ''
 	searchForm.value.timeStr = ''
 	selectedRows.value = []
+  	searchForm.value.productCategory = ''
 	getList()
 };
 
@@ -568,8 +413,6 @@
 			let exportUrl = "/stockmanagement/export"
 			if (activeTab.value === 'production') {
 				exportUrl = "/stockmanagement/exportone"
-			} else if (activeTab.value === 'manual') {
-				exportUrl = "/stockmanagement/exportTwo"
 			}
 			proxy.download(exportUrl, {}, "鍑哄簱鍙拌处.xlsx");
 		})
@@ -618,10 +461,10 @@
 const executePrint = () => {
 	console.log('寮�濮嬫墽琛屾墦鍗帮紝鏁版嵁鏉℃暟:', printData.value.length);
 	console.log('鎵撳嵃鏁版嵁:', printData.value);
-	
+
 	// 鍒涘缓涓�涓柊鐨勬墦鍗扮獥鍙�
 	const printWindow = window.open('', '_blank', 'width=800,height=600');
-	
+
 	// 鏋勫缓鎵撳嵃鍐呭
 	let printContent = `
     <!DOCTYPE html>
@@ -757,14 +600,14 @@
     </head>
     <body>
   `;
-	
+
 	// 涓烘瘡鏉℃暟鎹敓鎴愭墦鍗伴〉闈�
 	printData.value.forEach((item, index) => {
 		printContent += `
       <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>
           
@@ -850,16 +693,16 @@
       </div>
     `;
 	});
-	
+
 	printContent += `
     </body>
     </html>
   `;
-	
+
 	// 鍐欏叆鍐呭鍒版柊绐楀彛
 	printWindow.document.write(printContent);
 	printWindow.document.close();
-	
+
 	// 绛夊緟鍐呭鍔犺浇瀹屾垚鍚庢墦鍗�
 	printWindow.onload = () => {
 		setTimeout(() => {
@@ -919,12 +762,12 @@
 		padding: 15px;
 		border-bottom: 1px solid #e4e7ed;
 		text-align: center;
-		
+
 		.el-button {
 			margin: 0 10px;
 		}
 	}
-	
+
 	.print-preview-content {
 		padding: 20px;
 		background-color: #f5f5f5;
@@ -956,13 +799,13 @@
 .header {
 	text-align: center;
 	margin-bottom: 8px;
-	
+
 	.company-name {
 		font-size: 18px;
 		font-weight: bold;
 		margin-bottom: 4px;
 	}
-	
+
 	.document-title {
 		font-size: 16px;
 		font-weight: bold;
@@ -974,16 +817,16 @@
 	display: flex;
 	justify-content: space-between;
 	align-items: center;
-	
+
 	.info-row {
 		line-height: 20px;
-		
+
 		.label {
 			font-weight: bold;
 			width: 60px;
 			font-size: 14px;
 		}
-		
+
 		.value {
 			margin-right: 20px;
 			min-width: 80px;
@@ -995,12 +838,12 @@
 .table-section {
 	margin-bottom: 4px;
 	flex: 1;
-	
+
 	.product-table {
 		width: 100%;
 		border-collapse: collapse;
 		border: 1px solid #000;
-		
+
 		th, td {
 			border: 1px solid #000;
 			padding: 6px;
@@ -1008,16 +851,16 @@
 			font-size: 14px;
 			line-height: 1.4;
 		}
-		
+
 		th {
 			font-weight: bold;
 		}
-		
+
 		.total-label {
 			text-align: right;
 			font-weight: bold;
 		}
-		
+
 		.total-value {
 			font-weight: bold;
 		}
@@ -1030,22 +873,22 @@
 		margin-bottom: 3px;
 		line-height: 20px;
 		justify-content: space-between;
-		
+
 		.footer-item {
 			display: flex;
 			margin-right: 20px;
-			
+
 			.label {
 				font-weight: bold;
 				width: 80px;
 				font-size: 14px;
 			}
-			
+
 			.value {
 				min-width: 80px;
 				font-size: 14px;
 			}
-			
+
 			&.address-item {
 				.address-value {
 					min-width: 200px;
@@ -1059,7 +902,7 @@
 	.app-container {
 		display: none;
 	}
-	
+
 	.print-page {
 		box-shadow: none;
 		margin: 0;
@@ -1073,3 +916,5 @@
 	}
 }
 </style>
+
+

--
Gitblit v1.9.3