From 4b2e89faeb6383335db4fc4a56d3cb71565abe08 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 26 11月 2024 17:42:24 +0800
Subject: [PATCH] Merge branch 'master' of http://222.71.245.114:9086/r/LA24030-LuLI_PackageLine

---
 LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue                        |   34 +
 LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/wmsStockQuan.ts                                         |   12 
 LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/index.vue                                        |    7 
 LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs    |  125 +++++
 LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/openAllprop.vue                     |   31 
 LA24030_LuLiPackageLine_Web/src/components/printTableCkd.vue                                                  |  412 ++++++++++++++++++
 LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/index.vue                                    |  652 +++++++++++++++--------------
 LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs |   37 +
 8 files changed, 979 insertions(+), 331 deletions(-)

diff --git a/LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/wmsStockQuan.ts b/LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/wmsStockQuan.ts
index 48c02ec..ebbd087 100644
--- a/LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/wmsStockQuan.ts
+++ b/LA24030_LuLiPackageLine_Web/src/api/main/ReportCenter/wmsStockQuan.ts
@@ -4,6 +4,7 @@
   DeleteWmsStockQuan = '/api/wmsStockQuan/delete',
   UpdateWmsStockQuan = '/api/wmsStockQuan/update',
   PageWmsStockQuan = '/api/wmsStockQuan/page', //888
+  ShortagePage = '/api/wmsStockQuan/ShortagePage', 
   PageStockQuanForUse= '/api/wmsStockQuan/getStockQuanPageForUse',
   ListWmsStockQuan = '/api/wmsStockQuan/list',
   DetailWmsStockQuan = '/api/wmsStockQuan/detail',
@@ -66,6 +67,17 @@
 			data: params
 		});
 
+
+
+		// 鍒嗛〉鏌ヨ瀹炴椂搴撳瓨
+export const ShortagePage = (params?: any) => 
+	request({
+			url: Api.ShortagePage,
+			method: 'post',
+			data: params
+		});
+
+
 // 鍒嗛〉鏌ヨ鍙敤瀹炴椂搴撳瓨
 export const pageStockQuanForUse = (params?: any) => 
 	request({
diff --git a/LA24030_LuLiPackageLine_Web/src/components/printTableCkd.vue b/LA24030_LuLiPackageLine_Web/src/components/printTableCkd.vue
new file mode 100644
index 0000000..ca6fb4e
--- /dev/null
+++ b/LA24030_LuLiPackageLine_Web/src/components/printTableCkd.vue
@@ -0,0 +1,412 @@
+<!--鎵撳嵃鍐呭 -->
+<template>
+		<div id="printContent" class="printContent">
+			<div class="printWp" v-for="(itemW, indexW) in deltailList" :key="indexW">
+				<!-- <div class="t1">{{Name[0]}}&nbsp; &nbsp; &nbsp; &nbsp;{{Name[1]}}&nbsp; &nbsp; &nbsp; &nbsp;{{Name[2]}}</div> -->
+
+				<div class="t1">{{ Name }}</div>
+
+				<div class="header_pt">
+					<div class="box1">
+
+						<img class="imgL" src="http://localhost:8888/src/assets/logo-mini.png" alt="" />
+
+						<!-- <img class="imgL" src="@/assets/logo.png" alt="" /> -->
+						<div class="t2">
+							<p class="text1">
+								<!-- MAKINO J CHINA CO.,LTD<br /> -->
+								椴佷附鏈ㄤ笟鑲′唤鏈夐檺鍏徃
+							</p>
+						</div>
+					</div>
+					<div class="box-t1">
+						<div>
+							鍗曞彿锛�<span>{{ itemTitle.orderNo }}</span>
+						</div>
+						<!-- <div>DO鎬ц川锛歿{ itemTitle.doNature }}<span></span> </div> -->
+						<div>
+							<!-- 鍚堝悓鍙凤細{{ itemTitle.customOrderNumber }}<span></span> -->
+							<div>
+								<span> {{ DateToday }}</span>
+							</div>
+						</div>
+						<div class="t4">
+							<!-- 鏀惰揣鏂癸細 <span>{{ itemTitle.clientName }}</span> -->
+						</div>
+					</div>
+				</div>
+
+				<div class="tableBox">
+					<table cellspacing="0" cellpadding="0">
+						<tr class="middle_first">
+							<td class="middle_tree">缂栧彿</td>
+							<!-- <td class="middle_one">瀹㈡埛鐗╂枡浠g爜</td>
+          <td class="middle_one">瀹㈡埛鐗╂枡鍚嶇О</td> -->
+							<td class="middle_one">鎵规</td>
+							<td class="middle_two">璁㈠崟鍙�</td>
+							<td class="middle_four">鍖呰鍙�</td>
+							<td class="middle_one">缂烘枡鏁�</td>
+						</tr>
+						<tr class="middle_first" v-for="(item, index) in itemW" :key="index">
+							<td class="middle_tree">{{ item.num }}</td>
+							<!-- <td class="middle_one">
+            <div>
+              {{ item.customMaterialcode }}
+            </div>
+          </td>
+          <td class="middle_one">
+            <div>
+              {{ item.customMaterialName }}
+            </div>
+          </td> -->
+							<td class="middle_one">
+								<div>
+									{{ item.planNo }}
+								</div>
+							</td>
+							<td class="middle_two">
+								<div>
+									{{ item.orderId }}
+								</div>
+							</td>
+							<td class="middle_four">
+								<div>
+									{{ item.packageCode }}
+								</div>
+							</td>
+							<td class="middle_one">
+								<div>
+									{{ item.shortageCount }}
+								</div>
+							</td>
+						</tr>
+					</table>
+				</div>
+				<!-- <br /> <br /> -->
+				<!-- <div class="box-t2">
+        <div>渚涜揣鏂圭‘璁わ細鐗ч噹姹借溅瑁呭锛堟姹夛級鏈夐檺鍏徃 </div>
+        <div> 绛炬敹浜猴紙浠f敹浜猴級锛� </div>
+      </div> -->
+				<!-- 濮撳悕 鐢佃瘽 鍦板潃 -->
+				<!-- <div class="box-t2">
+        <div>濮撳悕&鐢佃瘽锛�</div>
+        <div> 鏃ユ湡锛� </div>
+      </div> -->
+				<!-- <div class="box-t2 box-t2R">
+        <div>鍦板潃锛�</div>
+      </div> -->
+				<span class="pageNum">{{ indexW + 1 }}</span>
+			</div>
+		</div>
+</template>
+<script lang="ts" setup>
+import { ref, nextTick, computed, defineExpose, defineEmits, markRaw, defineProps } from 'vue';
+import printJS from 'print-js';
+// import { formatUtcToData } from "@/utils/formate";
+
+const Name = ref([]);
+const DateToday = ref('');
+const itemTitle: any = ref({});
+const deltailList = ref<any[]>([]);
+const splitArray = (array: any, size: any) => {
+	let data = [];
+	for (let i = 0; i < array.length; i += size) {
+		data.push(array.slice(i, i + size));
+	}
+	return data;
+};
+const printHd = (name: string, itemSubTitle: any, deltailListArr: any) => {
+	Name.value = name;
+	// if(itemSubTitle && itemSubTitle.length>0){
+	//   itemTitle.value = itemSubTitle[0]
+	// }
+	itemTitle.value.orderNo = deltailListArr[0].orderNo;
+	deltailListArr.forEach((item, index) => {
+		item.num = index + 1;
+	});
+	deltailList.value = splitArray(deltailListArr, 16);
+	console.log(deltailList.value);
+
+	DateToday.value = '2024-01-01';
+
+	// DateToday.value = formatUtcToData(
+	//   new Date().toString(),
+	//   "YYYY-MM-DD"
+	// );
+
+	// console.log(itemSubTitle)
+	// console.log(deltailListArr)
+	nextTick(() => {
+		printJS({
+			printable: 'printContent', // 瑕佹墦鍗扮殑鍏冪礌鐨� ID
+			type: 'html', // 浣跨敤 HTML 鍐呭
+			// header: '鐩爣鏍囬', // 璁剧疆鎵撳嵃鏃剁殑鏍囬锛屽鏋滀笉闇�瑕佸彲浠ュ幓鎺夋琛�
+			css: ['*'], // 璁惧畾鏍峰紡锛屽鏋滀綘闇�瑕佸紩鍏ュ叿浣撶殑 CSS 鏂囦欢锛屽彲浠ュ湪杩欓噷鏀惧叆鏍峰紡鏂囦欢鐨� URL
+			style: `
+      
+.header_pt {
+	display: flex;
+	justify-content: space-between;
+}
+
+.tableBox {
+	border: 1px solid #909399;
+	height: 780px;
+	overflow: hidden;
+}
+
+.printWp {
+	padding: 15px 20px;
+	height: 1070px;
+	overflow: hidden;
+	position: relative;
+}
+
+.imgL {
+	width: 140px;
+}
+
+.t1 {
+	text-align: center;
+	font-size: 30px !important;
+	font-weight: bold;
+	border: 1px solid transparent;
+}
+
+.printContent {
+	position: relative;
+	z-index: -1;
+	font-size: 12px;
+}
+
+.printContent .box-t1 {
+	line-height: 24px;
+	text-align: right;
+	position: relative;
+	width: 200px;
+}
+
+.printContent .box-t1 div {
+	display: block;
+}
+
+.printContent .t4 {
+	text-align: right;
+}
+
+.printContent table {
+	padding: 10px 0;
+}
+
+.printContent table tr,
+.printContent table td {
+	margin: 0;
+	padding: 0;
+}
+
+.printContent table td {
+	border: 1px solid transparent;
+	text-align: center;
+	padding: 0px;
+}
+
+.printContent table td div {
+	height: 44px;
+	display: flex;
+	align-items: center;
+	justify-content: space-around;
+	word-break: break-all;
+	overflow: hidden;
+}
+
+.printContent .middle_tree {
+	width: 50px;
+}
+
+.printContent .middle_four {
+	width: 80px;
+}
+
+.printContent .middle_one {
+	width: 233px;
+}
+
+.printContent .middle_two {
+	width: 210px;
+}
+
+.printContent span {
+	color: gray;
+}
+
+.printContent .box-t2 {
+	display: flex;
+	flex-wrap: wrap;
+	margin: 0 3%;
+}
+
+.printContent .box-t2 div {
+	width: 50%;
+	height: 32px;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.printContent .box-t2R {
+	display: flex;
+	flex-wrap: wrap;
+}
+
+.printContent .box-t2R div {
+	width: 100%;
+	height: 40px;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.printContent .pageNum {
+	position: absolute;
+	right: 20px;
+	bottom: 0;
+}
+
+
+    `,
+			scanStyles: false, // 鏄惁鎵弿褰撳墠鐨� CSS 鏍峰紡
+		});
+	});
+};
+
+// 鏆撮湶鏂规硶
+defineExpose({ printHd });
+</script>
+
+<style>
+
+.header_pt {
+	display: flex;
+	justify-content: space-between;
+}
+
+.tableBox {
+	border: 1px solid #909399;
+	height: 780px;
+	overflow: hidden;
+}
+
+.printWp {
+	padding: 15px 20px;
+	height: 1070px;
+	overflow: hidden;
+	position: relative;
+}
+
+.imgL {
+	width: 140px;
+}
+
+.t1 {
+	text-align: center;
+	font-size: 30px !important;
+	font-weight: bold;
+	border: 1px solid transparent;
+}
+
+.printContent {
+	position: relative;
+	z-index: -1;
+	font-size: 12px;
+}
+
+.printContent .box-t1 {
+	line-height: 24px;
+	text-align: right;
+	position: relative;
+	width: 200px;
+}
+
+.printContent .box-t1 div {
+	display: block;
+}
+
+.printContent .t4 {
+	text-align: right;
+}
+
+.printContent table {
+	padding: 10px 0;
+}
+
+.printContent table tr,
+.printContent table td {
+	margin: 0;
+	padding: 0;
+}
+
+.printContent table td {
+	border: 1px solid transparent;
+	text-align: center;
+	padding: 0px;
+}
+
+.printContent table td div {
+	height: 44px;
+	display: flex;
+	align-items: center;
+	justify-content: space-around;
+	word-break: break-all;
+	overflow: hidden;
+}
+
+.printContent .middle_tree {
+	width: 50px;
+}
+
+.printContent .middle_four {
+	width: 80px;
+}
+
+.printContent .middle_one {
+	width: 233px;
+}
+
+.printContent .middle_two {
+	width: 210px;
+}
+
+.printContent span {
+	color: gray;
+}
+
+.printContent .box-t2 {
+	display: flex;
+	flex-wrap: wrap;
+	margin: 0 3%;
+}
+
+.printContent .box-t2 div {
+	width: 50%;
+	height: 32px;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.printContent .box-t2R {
+	display: flex;
+	flex-wrap: wrap;
+}
+
+.printContent .box-t2R div {
+	width: 100%;
+	height: 40px;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.printContent .pageNum {
+	position: absolute;
+	right: 20px;
+	bottom: 0;
+}
+
+</style>
diff --git a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/openAllprop.vue b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/openAllprop.vue
index 407a34e..c995954 100644
--- a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/openAllprop.vue
+++ b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/kittingList/component/openAllprop.vue
@@ -258,11 +258,11 @@
 			</template>
 		</el-dialog>
 		<!-- 鍗曡鎯� -->
-		<el-drawer v-model="drawerVisible" :title="`${detailForm.poId}鐗╂枡璇︽儏`" direction="rtl" size="80%" @close="handleDrawerClose">
+		<el-drawer v-model="drawerVisible" :title="`${detailForm.poId}璇︽儏`" direction="rtl" size="80%" @close="handleDrawerClose">
 			<template #title>
 				<div class="slot_title">
 					<div class="title_orderNo">{{ title }}</div>
-					<div>鐗╂枡璇︽儏</div>
+					<div>璇︽儏</div>
 				</div>
 			</template>
 
@@ -281,7 +281,9 @@
 								<el-form-item label-width="20px">
 									<el-button type="primary" icon="el-icon-search" @click="getDetail">鏌ヨ</el-button>
 
-									<el-button type="primary" icon="ele-Printer" @click="getPrint">鎵撳嵃</el-button>
+									<!-- <el-button type="primary" icon="ele-Printer" @click="getPrint">鎵撳嵃</el-button> -->
+
+									<el-button type="primary" style="margin-left: 5px" icon="ele-Printer" @click="handleHtmlPrint"> 鎵撳嵃 </el-button>
 								</el-form-item>
 							</el-col>
 						</el-row>
@@ -353,6 +355,9 @@
 			</template>
 		</el-dialog>
 
+		<!-- 鎵撳嵃 -->
+		<print-table-ckd ref="printTableRef"></print-table-ckd>
+
 		<printDialogTestStudent ref="printDialogRefTestStudent" :title="printTestStudentTitle" @reloadTable="handleQueryTestStudent" />
 	</div>
 </template>
@@ -378,6 +383,7 @@
 import { formatDate, formatDate_T_Date, formatDate_T_Time, defaultTimeRange } from '/@/utils/formatTime';
 import commonFunction from '/@/utils/commonFunction';
 import { handleSlectDataWmsBusinessType } from '/@/utils/selectData';
+import printTableCkd from '/@/components/printTableCkd.vue';
 // 鎺ㄨ崘璁剧疆鎿嶄綔 width 涓� 200
 import { hiprint } from 'vue-plugin-hiprint';
 import { SysPrintApi } from '/@/api-services/api';
@@ -538,7 +544,6 @@
 // const enumList: any = cache.getCache('enumList');
 // console.log(enumList.inEnumOrderType);
 
-
 //鑾峰彇PO鍗曞垪琛�
 const getTabelData = () => {
 	//鍒ゆ柇鍒涘缓鏃堕棿鏄惁鏈夐�夋嫨
@@ -619,22 +624,22 @@
 // const
 //鍗曞彿
 const purchaseNo = ref('');
-
+const IsKitting = ref(false);
 //鎵撳紑鎶藉眽
 const openDrawer = async (type: number, scope: any = {}, entozhExcell?: any) => {
 	detailForm.value.Page = 1; //bug:鐐圭紪杈�-鍐嶇偣璇︽儏
 	detailForm.value.PageSize = 10; //bug:鐐圭紪杈�-鍐嶇偣璇︽儏
-	if (scope.packageCode) {
-		title.value = `${scope.packageCode}`;
+	if (scope.orderId) {
+		title.value = `${scope.orderId}`;
 	}
 	drawerType.value = 'drawerAll';
 	drawerVisible.value = true;
 	//褰撳墠鍏ュ簱鍗曞彿id
 	detailForm.value.orderId = scope.orderId;
 	//鍏ュ簱鍗�
-	purchaseNo.value = scope.packageCode;
+	purchaseNo.value = scope.orderId;
 	debugger;
-	detailForm.value.packageCode = scope.packageCode;
+	detailForm.value.orderId = scope.orderId;
 	//鑾峰彇鐗╂枡鍒楄〃
 	if (detailForm.value.poId == '') {
 		drawerList.value = [];
@@ -646,7 +651,7 @@
 	//------------------鑾峰彇鐗╂枡鍒楄〃鐗╂枡鏄庣粏
 	getEnumStockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
 	getEnumLockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
-	
+
 	//----------------鐗╂枡鏄庣粏
 	// 鏍规嵁鐘舵�佽浆涓枃 淇濈暀3浣嶅皬鏁�
 	let scopetrans = JSON.parse(JSON.stringify(scope));
@@ -1122,6 +1127,12 @@
 	};
 	printDialogRefTestStudent.value.showDialog(new hiprint.PrintTemplate({ template: template }), row, template.panels[0].width);
 };
+// 鎵撳嵃
+let itemSubTitle = ref<any[]>([]);
+const handleHtmlPrint = () => {
+	var title = IsKitting.value == true ? '榻愬娓呭崟' : '缂哄娓呭崟';
+	proxy.$refs['printTableRef'].printHd(title, itemSubTitle.value, drawerList.value); //deltailList
+};
 
 // 鏆撮湶鏂规硶
 defineExpose({ openDialog, openDrawer });
diff --git a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue
index 5113be7..56e8c87 100644
--- a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue
+++ b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/component/openAllprop.vue
@@ -258,11 +258,11 @@
 			</template>
 		</el-dialog>
 		<!-- 鍗曡鎯� -->
-		<el-drawer v-model="drawerVisible" :title="`${detailForm.poId}鐗╂枡璇︽儏`" direction="rtl" size="80%" @close="handleDrawerClose">
+		<el-drawer v-model="drawerVisible" :title="`${detailForm.poId}璇︽儏`" direction="rtl" size="80%" @close="handleDrawerClose">
 			<template #title>
 				<div class="slot_title">
 					<div class="title_orderNo">{{ title }}</div>
-					<div>鐗╂枡璇︽儏</div>
+					<div>璇︽儏</div>
 				</div>
 			</template>
 
@@ -273,15 +273,20 @@
 					<el-form :model="detailForm">
 						<el-row>
 							<el-col :span="6">
-								<el-form-item label="鐗╂枡缂栧彿">
-									<el-input v-model="detailForm.materialCode" clearable placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�" />
+								<el-form-item label="鍖呰鍙�">
+									<el-input v-model="detailForm.packageCode" clearable placeholder="璇疯緭鍏ュ寘瑁呭彿" />
 								</el-form-item>
 							</el-col>
 							<el-col :span="4">
 								<el-form-item label-width="20px">
 									<el-button type="primary" icon="el-icon-search" @click="getDetail">鏌ヨ</el-button>
+									<!-- <el-button type="primary" icon="ele-Printer" @click="getPrint">鎵撳嵃</el-button> -->
+									<!-- :disabled="checkRows.length == 0" -->
+									<el-button type="primary" style="margin-left: 5px" icon="ele-Printer" @click="handleHtmlPrint">
+									鎵撳嵃
+								</el-button>
 
-									<el-button type="primary" icon="ele-Printer" @click="getPrint">鎵撳嵃</el-button>
+
 								</el-form-item>
 							</el-col>
 						</el-row>
@@ -354,6 +359,11 @@
 		</el-dialog>
 
 		<printDialogTestStudent ref="printDialogRefTestStudent" :title="printTestStudentTitle" @reloadTable="handleQueryTestStudent" />
+
+
+				<!-- 鎵撳嵃 -->
+				<print-table-ckd ref="printTableRef"></print-table-ckd>
+
 	</div>
 </template>
 <script lang="ts" setup>
@@ -376,13 +386,13 @@
 import { pageBaseCustomer } from '/@/api/main/WmsBase/baseCustomer';
 import { listWmsOrderPurchaseDetails, pageWmsOrderPurchaseDetails } from '/@/api/main/WmsOrder/wmsOrderPurchaseDetails';
 import { formatDate, formatDate_T_Date, formatDate_T_Time, defaultTimeRange } from '/@/utils/formatTime';
+import printTableCkd from '/@/components/printTableCkd.vue';
 import commonFunction from '/@/utils/commonFunction';
 import { handleSlectDataWmsBusinessType } from '/@/utils/selectData';
 // 鎺ㄨ崘璁剧疆鎿嶄綔 width 涓� 200
 import { hiprint } from 'vue-plugin-hiprint';
 import { SysPrintApi } from '/@/api-services/api';
 import { SysPrint } from '/@/api-services/models';
-
 const moveType = 10; //绉诲姩绫诲瀷 鍏ュ簱
 const { proxy }: any = getCurrentInstance(); // 璁块棶瀹炰緥涓婁笅鏂� proxy鍚屾椂鏀寔寮�鍙� 绾夸笂鐜
 const getEnumOrderTypeData = ref<any>([]);
@@ -620,7 +630,7 @@
 // const
 //鍗曞彿
 const purchaseNo = ref('');
-
+const IsPack = ref(false);
 //鎵撳紑鎶藉眽
 const openDrawer = async (type: number, scope: any = {}, entozhExcell?: any) => {
 	detailForm.value.Page = 1; //bug:鐐圭紪杈�-鍐嶇偣璇︽儏
@@ -634,6 +644,7 @@
 	detailForm.value.poId = scope.id;
 	//鍏ュ簱鍗�
 	purchaseNo.value = scope.packageCode;
+	IsPack.value = scope.isPack;
 	debugger;
 	detailForm.value.poId = scope.id;
 	//鑾峰彇鐗╂枡鍒楄〃
@@ -1129,6 +1140,15 @@
 	printDialogRefTestStudent.value.showDialog(new hiprint.PrintTemplate({ template: template }), row, template.panels[0].width);
 };
 
+
+
+// 鎵撳嵃
+let itemSubTitle = ref<any[]>([]);
+const handleHtmlPrint = () => {
+	var title = IsPack.value==true?"榻愬寘娓呭崟":"缂哄寘娓呭崟";
+	proxy.$refs['printTableRef'].printHd(title, itemSubTitle.value, drawerList.value); //deltailList
+};
+
 // 鏆撮湶鏂规硶
 defineExpose({ openDialog, openDrawer });
 </script>
diff --git a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/index.vue b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/index.vue
index c248f24..1a4eb77 100644
--- a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/index.vue
+++ b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/packList/index.vue
@@ -100,7 +100,7 @@
 			<div class="table-container">
 				<!-- 宸︿晶琛ㄦ牸 -->
 				<div class="left-table">
-					<p class="text-xtiny">榻愬鍒楄〃</p>
+					<p class="text-xtiny">榻愬寘鍒楄〃</p>
 
 					<el-table :data="tableData" style="width: 100%" v-loading="loading" tooltip-effect="light" ref="tableRef" row-key="id" @sort-change="sortChange" :summary-method="getExportTitle" border="">
 						<el-table-column type="index" label="搴忓彿" width="55" align="center" />
@@ -128,7 +128,7 @@
 
 				<!-- 鍙充晶琛ㄦ牸 -->
 				<div class="right-table">
-					<p class="text-xtiny">涓嶉綈濂楀垪琛�</p>
+					<p class="text-xtiny">缂哄寘鍒楄〃</p>
 					<el-table
 						:data="newTableData"
 						style="width: 100%"
@@ -165,6 +165,8 @@
 			</div>
 		</el-card>
 
+
+
 		<editDialogWmsOrderDeliver ref="editDialogRefWmsOrderDeliver" :title="editWmsOrderDeliverTitle" @reloadTable="handleQuery" />
 		<importExcelDialog
 			ref="importExcelDialogRefWmsOrderDeliver"
@@ -187,6 +189,7 @@
 import { formatUtcToData, getTypeStatus } from '/@/utils/formate';
 import printDialog from '/@/views/system/print/component/hiprint/preview.vue';
 import editDialog from '/@/views/main/WmsOrder/wmsOrderPurchase/component/editDialog.vue';
+
 import {
 	pageWmsOrderPurchase,
 	deleteWmsOrderPurchase,
diff --git a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/index.vue b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/index.vue
index 87b8cea..dbe86a0 100644
--- a/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/index.vue
+++ b/LA24030_LuLiPackageLine_Web/src/views/main/WmsOrder/shortageList/index.vue
@@ -1,34 +1,32 @@
 锘�<template>
-  <div class="wmsStockQuan-container">
-    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> 
-      <el-form :model="queryParamsWmsStockQuan" ref="queryForm" labelWidth="90">
-        <el-row>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
-            <el-form-item label="鍏抽敭瀛�">
-              <el-input v-model="queryParamsWmsStockQuan.searchKey" clearable="" placeholder="瀹瑰櫒缂栧彿,璺熻釜鐮�,鐗╂枡缂栧彿,鐗╂枡鍚嶇О,渚涘簲鍟嗘壒娆�,鎵规,渚涘簲鍟嗙紪鍙�,ERP鍗曞彿,ERP搴撳瓨鍦�,ERP鍑瘉"/>
-              
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="瀹瑰櫒缂栧彿">
-              <el-input v-model="queryParamsWmsStockQuan.containerCode" clearable="" placeholder="璇疯緭鍏ュ鍣ㄧ紪鍙�"/>
-              
-            </el-form-item>
-          </el-col>
-          
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="璺熻釜鐮�">
-              <el-input v-model="queryParamsWmsStockQuan.snCode" clearable="" placeholder="璇疯緭鍏ヨ窡韪爜"/>
-              
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="鐗╂枡缂栧彿">
-              <el-input v-model="queryParamsWmsStockQuan.materialCode" clearable="" placeholder="璇疯緭鍏ョ墿鏂欑紪鍙�"/>
-              
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
+	<div class="wmsStockQuan-container">
+		<el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+			<el-form :model="queryParamsWmsStockQuan" ref="queryForm" labelWidth="90">
+				<el-row>
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+						<el-form-item label="鍏抽敭瀛�">
+							<el-input v-model="queryParamsWmsStockQuan.searchKey" clearable="" placeholder="璁㈠崟鍙�,鎵规,鍖呰鍙�" />
+						</el-form-item>
+					</el-col>
+
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
+						<el-form-item label="璁㈠崟鍙�">
+							<el-input v-model="queryParamsWmsStockQuan.OrderId" clearable="" placeholder="璇疯緭鍏ヨ鍗曞彿" />
+						</el-form-item>
+					</el-col>
+
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
+						<el-form-item label="鎵规">
+							<el-input v-model="queryParamsWmsStockQuan.PlanNo" clearable="" placeholder="璇疯緭鍏ユ壒娆�" />
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
+						<el-form-item label="鍖呰鍙�">
+							<el-input v-model="queryParamsWmsStockQuan.PackageCode" clearable="" placeholder="璇疯緭鍏ュ寘瑁呭彿" />
+						</el-form-item>
+					</el-col>
+
+					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
             <el-form-item label="鐗╂枡鍚嶇О">
               <el-input v-model="queryParamsWmsStockQuan.materialName" clearable="" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"/>
               
@@ -54,94 +52,56 @@
               <el-input v-model="queryParamsWmsStockQuan.batch" clearable="" placeholder="璇疯緭鍏ユ壒娆�"/>
               
             </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="鏀惰揣鏃堕棿">
-              <el-date-picker placeholder="璇烽�夋嫨鏀惰揣鏃堕棿" value-format="YYYY/MM/DD" type="daterange" v-model="queryParamsWmsStockQuan.recordInsertTimeRange" />
-              
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="渚涘簲鍟嗙紪鍙�">
-              <el-input v-model="queryParamsWmsStockQuan.supplierCode" clearable="" placeholder="璇疯緭鍏ヤ緵搴斿晢缂栧彿"/>
-              
-            </el-form-item>
-          </el-col>
- 
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="ERP鍗曞彿">
-              <el-input v-model="queryParamsWmsStockQuan.erpOrderNo" clearable="" placeholder="璇疯緭鍏RP鍗曞彿"/>
-              
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="ERP搴撳瓨鍦�">
-              <el-input v-model="queryParamsWmsStockQuan.erpCode" clearable="" placeholder="璇疯緭鍏RP搴撳瓨鍦�"/>
-              
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="璐ㄦ鐘舵��">
-              <el-select clearable="" v-model="queryParamsWmsStockQuan.qCStatus" placeholder="璇烽�夋嫨璐ㄦ鐘舵��">
-                <el-option v-for="(item,index) in getEnumQCStatusData_Index" :key="index" :value="item.value" :label="`${item.describe}`" />
-                
-              </el-select>
-              
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="ERP鍑瘉">
-              <el-input v-model="queryParamsWmsStockQuan.erpVoucher" clearable="" placeholder="璇疯緭鍏RP鍑瘉"/>
-              
-            </el-form-item>
-          </el-col>
-          <!-- <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUIWmsStockQuan">
-            <el-form-item label="鎿嶄綔鏃堕棿">
-              <el-date-picker placeholder="璇烽�夋嫨鎿嶄綔鏃堕棿" value-format="YYYY/MM/DD" type="daterange" v-model="queryParamsWmsStockQuan.actionTimeRange" />
-              
-            </el-form-item>
           </el-col> -->
-          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
-            <el-form-item>
-              <el-button-group style="display: flex; align-items: center;">
-                <el-button type="primary"  icon="ele-Search" @click="handleQueryWmsStockQuan" v-auth="'wmsStockQuan:page'" :disabled="disabled_btnWmsStockQuan"> 鏌ヨ </el-button>
-                      <el-button icon="ele-Refresh" @click="resetWmsStockQuan"> 閲嶇疆 </el-button>
-                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsStockQuan" v-if="!showAdvanceQueryUIWmsStockQuan" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
-                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsStockQuan" v-if="showAdvanceQueryUIWmsStockQuan" style="margin-left:5px;"> 闅愯棌 </el-button>
-                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWmsStockQuan" v-auth="'wmsStockQuan:add'"> 鏂板 </el-button>
-                <el-button type="primary" style="margin-left:5px;" icon="ele-Download" @click="handleExportExcelWmsStockQuan"  v-auth="'wmsStockQuan:exportExcel'" > 瀵煎嚭 </el-button> 
 
-                <el-button type="primary" style="margin-left:5px;" icon="ele-Printer" @click="openPrintWmsStockQuan"  v-auth="'wmsStockQuan:exportExcel'" :disabled="checkRows.length==0" > 鎵撳嵃 </el-button> 
+					<el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6" class="mb10">
+						<el-form-item>
+							<el-button-group style="display: flex; align-items: center">
+								<el-button type="primary" icon="ele-Search" @click="handleQueryWmsStockQuan" v-auth="'wmsStockQuan:page'" :disabled="disabled_btnWmsStockQuan"> 鏌ヨ </el-button>
+								<el-button icon="ele-Refresh" @click="resetWmsStockQuan"> 閲嶇疆 </el-button>
+								<el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUIWmsStockQuan" v-if="!showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px"> 楂樼骇鏌ヨ </el-button>
+								<el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUIWmsStockQuan" v-if="showAdvanceQueryUIWmsStockQuan" style="margin-left: 5px"> 闅愯棌 </el-button>
+								<el-button type="primary" style="margin-left: 5px" icon="ele-Plus" @click="openAddWmsStockQuan" v-auth="'wmsStockQuan:add'"> 鏂板 </el-button>
+								<el-button type="primary" style="margin-left: 5px" icon="ele-Download" @click="handleExportExcelWmsStockQuan" v-auth="'wmsStockQuan:exportExcel'"> 瀵煎嚭 </el-button>
 
-              </el-button-group>
-            </el-form-item>
-            
-          </el-col>
-        </el-row>
-      </el-form>
-    </el-card>
-    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
-      <!-- show-summary  :summary-method="getSummaries"  -->
-      <el-table
-                ref="tableRefWmsStockQuan"
+								<el-button type="primary" style="margin-left: 5px" icon="ele-Printer" @click="handleHtmlPrint" v-auth="'wmsStockQuan:exportExcel'" :disabled="checkRows.length == 0">
+									鎵撳嵃
+								</el-button>
+<!-- 
+								<el-button type="primary" style="margin-left: 5px" icon="ele-Printer" v-print="print" plain @click="handleHtmlPrint">鎵撳嵃</el-button> -->
+							</el-button-group>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+		</el-card>
+		<el-card class="full-table" shadow="hover" style="margin-top: 5px">
+			<!-- show-summary  :summary-method="getSummaries"  -->
+			<el-table
+				ref="tableRefWmsStockQuan"
 				:data="tableDataWmsStockQuan"
 				style="width: 100%"
 				v-loading="loadingWmsStockQuan"
 				tooltip-effect="light"
-                				row-key="id"
-                @sort-change="sortChangeWmsStockQuan"
-                @selection-change="handleSelectionChange"
-				border="">
-        <el-table-column align="center" width="60" type="selection"  />
-        <el-table-column type="index"  label="搴忓彿" width="55" align="center"/>
-        
-        <el-table-column prop="placeCode" label="搴撲綅缂栫爜"  show-overflow-tooltip="" />
+				row-key="id"
+				@sort-change="sortChangeWmsStockQuan"
+				@selection-change="handleSelectionChange"
+				border=""
+			>
+				<el-table-column align="center" width="60" type="selection" />
+				<el-table-column type="index" label="搴忓彿" width="55" align="center" />
+				<el-table-column prop="planNo" label="鎵规" show-overflow-tooltip="" />
+				<el-table-column prop="orderId" label="璁㈠崟鍙�" show-overflow-tooltip="" />
+				<el-table-column prop="packageCode" label="鍖呰鍙�" show-overflow-tooltip="" />
+				<el-table-column prop="totalCount" label="鎬绘暟閲�" show-overflow-tooltip="" />
+				<el-table-column prop="hasCount" label="鐜版湁鏁伴噺" show-overflow-tooltip="" />
+				<el-table-column prop="shortageCount" label="缂烘枡鏁伴噺" show-overflow-tooltip="" />
+
+				<!-- <el-table-column prop="placeCode" label="搴撲綅缂栫爜"  show-overflow-tooltip="" />
          <el-table-column prop="inTime" label="杩涘叆鏃堕棿" width="80" :formatter="formatDate_T_Date"  show-overflow-tooltip="" />
         <el-table-column prop="upi" label="閮ㄤ欢鏉$爜"  show-overflow-tooltip="" />
         <el-table-column prop="detailName" label="閮ㄤ欢鍚嶇О"  show-overflow-tooltip="" />
-        <el-table-column prop="planNo" label="鎵规"  show-overflow-tooltip="" />
-        <el-table-column prop="orderId" label="璁㈠崟鍙�"  show-overflow-tooltip="" />
-        <el-table-column prop="packageCode" label="鍖呰鍙�"  show-overflow-tooltip="" />
+   
         <el-table-column prop="length" label="闀�"  show-overflow-tooltip="" />
         <el-table-column prop="width" label="瀹�"  show-overflow-tooltip="" />
         <el-table-column prop="thk" label="鍘�"  show-overflow-tooltip="" />
@@ -166,10 +126,9 @@
          <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
          <el-table-column prop="updateTime" label="淇敼鏃堕棿" width="130" :formatter="formatDate_T_Time"  show-overflow-tooltip="" />
         <el-table-column prop="createUserName" label="鍒涘缓浜�"  show-overflow-tooltip="" />
-        <el-table-column prop="updateUserName" label="淇敼浜�"  show-overflow-tooltip="" />
-   
-      </el-table>
-      <el-pagination
+        <el-table-column prop="updateUserName" label="淇敼浜�"  show-overflow-tooltip="" /> -->
+			</el-table>
+			<el-pagination
 				v-model:currentPage="tableParamsWmsStockQuan.page"
 				v-model:page-size="tableParamsWmsStockQuan.pageSize"
 				:total="tableParamsWmsStockQuan.total"
@@ -179,96 +138,92 @@
 				@size-change="handleSizeChangeWmsStockQuan"
 				@current-change="handleCurrentChangeWmsStockQuan"
 				layout="total, sizes, prev, pager, next, jumper"
-	/>
-      <printDialogWmsStockQuan
-        ref="printDialogRefWmsStockQuan"
-        :title="printWmsStockQuanTitle"
-        @reloadTable="handleQueryWmsStockQuan" />
-      <editDialogWmsStockQuan
-        ref="editDialogRefWmsStockQuan"
-        :title="editWmsStockQuanTitle"
-        @reloadTable="handleQueryWmsStockQuan"
-      />
-    </el-card>
-  </div>
+			/>
+			<printDialogWmsStockQuan ref="printDialogRefWmsStockQuan" :title="printWmsStockQuanTitle" @reloadTable="handleQueryWmsStockQuan" />
+			<editDialogWmsStockQuan ref="editDialogRefWmsStockQuan" :title="editWmsStockQuanTitle" @reloadTable="handleQueryWmsStockQuan" />
+		</el-card>
+
+		<!-- 鎵撳嵃 -->
+		<print-table-ckd ref="printTableRef"></print-table-ckd>
+	</div>
 </template>
 
 <script lang="ts" setup="" name="wmsStockQuan">
-  import { ref,onMounted } from "vue";
-  import { ElMessageBox, ElMessage } from "element-plus";
-  import { auth } from '/@/utils/authFunction';
-  import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
-  import { formatDate,formatDate_T_Date,formatDate_T_Time,defaultTimeRange } from '/@/utils/formatTime';
-  import { exportPageExcel } from '/@/utils/exportPageExcel' //寮曞叆瀵煎嚭鏂规硶
+import { ref, onMounted, getCurrentInstance, reactive, computed, nextTick } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import { auth } from '/@/utils/authFunction';
+import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
+import { formatDate, formatDate_T_Date, formatDate_T_Time, defaultTimeRange } from '/@/utils/formatTime';
+import { exportPageExcel } from '/@/utils/exportPageExcel'; //寮曞叆瀵煎嚭鏂规硶
 
+import printDialogWmsStockQuan from '/@/views/system/print/component/hiprint/preview.vue';
+import { ShortagePage, deleteWmsStockQuan, importExcelWmsStockQuan, downloadExcelTemplateWmsStockQuan } from '/@/api/main/ReportCenter/wmsStockQuan';
+import { getAPI } from '/@/utils/axios-utils';
+import { SysEnumApi } from '/@/api-services/api';
+import commonFunction from '/@/utils/commonFunction';
+import { addWmsRecordSncodePrint } from '/@/api/main/PrintCenter/wmsRecordSncodePrint';
+import printTableCkd from '/@/components/printTableCkd.vue';
+const { proxy }: any = getCurrentInstance(); // 璁块棶瀹炰緥涓婁笅鏂� proxy鍚屾椂鏀寔寮�鍙� 绾夸笂鐜
+import printJs from 'print-js';
 
-  import printDialogWmsStockQuan from '/@/views/system/print/component/hiprint/preview.vue'
-  import { pageWmsStockQuan, deleteWmsStockQuan,importExcelWmsStockQuan,downloadExcelTemplateWmsStockQuan } from '/@/api/main/ReportCenter/wmsStockQuan';
-	import { getAPI } from '/@/utils/axios-utils';
-	import { SysEnumApi } from '/@/api-services/api';
-  import commonFunction from '/@/utils/commonFunction';
-import { addWmsRecordSncodePrint } from "/@/api/main/PrintCenter/wmsRecordSncodePrint";
+const getEnumQCStatusData_Index = ref<any>([]);
+const getEnumStockStatusData_Index = ref<any>([]);
 
-  const getEnumQCStatusData_Index = ref<any>([]);
-    const getEnumStockStatusData_Index = ref<any>([]);
+const { getEnumDesc } = commonFunction();
 
-	const { getEnumDesc } = commonFunction();
-  
-  /***************************************************[瀹炴椂搴撳瓨鎿嶄綔]寮�濮�***************************************************/
-  const showAdvanceQueryUIWmsStockQuan = ref(false);
-  const tableRefWmsStockQuan = ref(null);
-  const printDialogRefWmsStockQuan = ref();
-  const editDialogRefWmsStockQuan = ref();
-  const loadingWmsStockQuan = ref(false);
-  const disabled_btnWmsStockQuan = ref(false);
-  const tableDataWmsStockQuan = ref<any>([]);
-  const queryParamsWmsStockQuan = ref<any>({});
-  const tableParamsWmsStockQuan = ref({
-    page: 1,
-    pageSize: 10,
-    total: 0,
-  });
+/***************************************************[瀹炴椂搴撳瓨鎿嶄綔]寮�濮�***************************************************/
+const showAdvanceQueryUIWmsStockQuan = ref(false);
+const tableRefWmsStockQuan = ref(null);
+const printDialogRefWmsStockQuan = ref();
+const editDialogRefWmsStockQuan = ref();
+const loadingWmsStockQuan = ref(false);
+const disabled_btnWmsStockQuan = ref(false);
+const tableDataWmsStockQuan = ref<any>([]);
+const queryParamsWmsStockQuan = ref<any>({});
+const tableParamsWmsStockQuan = ref({
+	page: 1,
+	pageSize: 10,
+	total: 0,
+});
 
-  const printWmsStockQuanTitle = ref("");
-  const editWmsStockQuanTitle = ref("");
+const printWmsStockQuanTitle = ref('');
+const editWmsStockQuanTitle = ref('');
 
-  // 鏀瑰彉楂樼骇鏌ヨ鐨勬帶浠舵樉绀虹姸鎬�
-  const changeAdvanceQueryUIWmsStockQuan = () => {
-    showAdvanceQueryUIWmsStockQuan.value = !showAdvanceQueryUIWmsStockQuan.value;
-  }
+// 鏀瑰彉楂樼骇鏌ヨ鐨勬帶浠舵樉绀虹姸鎬�
+const changeAdvanceQueryUIWmsStockQuan = () => {
+	showAdvanceQueryUIWmsStockQuan.value = !showAdvanceQueryUIWmsStockQuan.value;
+};
 
-  // 鏌ヨ瀹炴椂搴撳瓨
-  const handleQueryWmsStockQuan = async () => {
-    loadingWmsStockQuan.value = true;
-    disabled_btnWmsStockQuan.value = true;
-    var res = await pageWmsStockQuan(Object.assign(queryParamsWmsStockQuan.value, tableParamsWmsStockQuan.value));
-    if(res.data.type=="success"){
-      tableDataWmsStockQuan.value = res.data.result?.items ?? [];
-      tableParamsWmsStockQuan.value.total = res.data.result?.total;
-    }
-    loadingWmsStockQuan.value = false;
-    disabled_btnWmsStockQuan.value = false;
-  };
+// 8888鏌ヨ瀹炴椂搴撳瓨
+const handleQueryWmsStockQuan = async () => {
+	loadingWmsStockQuan.value = true;
+	disabled_btnWmsStockQuan.value = true;
+	var res = await ShortagePage(Object.assign(queryParamsWmsStockQuan.value, tableParamsWmsStockQuan.value));
+	if (res.data.type == 'success') {
+		tableDataWmsStockQuan.value = res.data.result?.items ?? [];
+		tableParamsWmsStockQuan.value.total = res.data.result?.total;
+	}
+	loadingWmsStockQuan.value = false;
+	disabled_btnWmsStockQuan.value = false;
+};
 
-  // 閲嶇疆瀹炴椂搴撳瓨鏌ヨ
-  const resetWmsStockQuan = async () => {
-    queryParamsWmsStockQuan.value = {}
-  };
+// 閲嶇疆瀹炴椂搴撳瓨鏌ヨ
+const resetWmsStockQuan = async () => {
+	queryParamsWmsStockQuan.value = {};
+};
 
-  // 瀹炴椂搴撳瓨鍒楁帓搴�
-  const sortChangeWmsStockQuan = async (column: any) => {
+// 瀹炴椂搴撳瓨鍒楁帓搴�
+const sortChangeWmsStockQuan = async (column: any) => {
 	queryParamsWmsStockQuan.value.field = column.prop;
 	queryParamsWmsStockQuan.value.order = column.order;
 	await handleQueryWmsStockQuan();
-  };
+};
 
-  // 鎵撳紑鏂板瀹炴椂搴撳瓨椤甸潰
-  const openAddWmsStockQuan = () => {
-    editWmsStockQuanTitle.value = '娣诲姞瀹炴椂搴撳瓨';
-    editDialogRefWmsStockQuan.value.openDialog(1,{});
-  };
-
-
+// 鎵撳紑鏂板瀹炴椂搴撳瓨椤甸潰
+const openAddWmsStockQuan = () => {
+	editWmsStockQuanTitle.value = '娣诲姞瀹炴椂搴撳瓨';
+	editDialogRefWmsStockQuan.value.openDialog(1, {});
+};
 
 //閫変腑鐨勮
 const checkRows = ref<{ id: number }[]>([]);
@@ -276,11 +231,122 @@
 const handleSelectionChange = (val: any) => {
 	checkRows.value = val;
 };
-  // 鎵撳紑鎵撳嵃瀹炴椂搴撳瓨椤甸潰
-  const openPrintWmsStockQuan = async (row: any) => {
 
-    // printWmsStockQuanTitle.value = '鎵撳嵃瀹炴椂搴撳瓨';
+// 璁剧疆 tool header 鏁版嵁
+const setHeader = computed(() => {
+	return props.columns.filter((v) => v.isCheck);
+});
+// 瀹氫箟鐖剁粍浠朵紶杩囨潵鐨勫��
+const props = defineProps({
+	// 鑾峰彇鏁版嵁鐨勬柟娉曪紝鐢辩埗缁勪欢浼犻��
+	getData: {
+		type: Function,
+		required: true,
+	},
+	// 鍒楀睘鎬э紝鍜宔lementUI鐨凾able-column 灞炴�х浉鍚岋紝闄勫姞灞炴�э細isCheck-鏄惁榛樿鍕鹃�夊睍绀猴紝hideCheck-鏄惁闅愯棌璇ュ垪鐨勫彲鍕鹃�夊拰鎷栨嫿
+	columns: {
+		type: Array<any>,
+		default: () => [],
+	},
+	// 閰嶇疆椤癸細isBorder-鏄惁鏄剧ず琛ㄦ牸杈规锛宨sSerialNo-鏄惁鏄剧ず琛ㄦ牸搴忓彿锛宻howSelection-鏄惁鏄剧ず琛ㄦ牸鍙閫夛紝isSelection-鏄惁榛樿閫変腑琛ㄦ牸澶氶�夛紝pageSize-姣忛〉鏉℃暟锛宧ideExport-鏄惁闅愯棌瀵煎嚭鎸夐挳锛宔xportFileName-瀵煎嚭琛ㄦ牸鐨勬枃浠跺悕锛岀┖鍊奸粯璁ょ敤搴旂敤鍚嶇О浣滀负鏂囦欢鍚�
+	config: {
+		type: Object,
+		default: () => ({}),
+	},
+	// 绛涢�夊弬鏁�
+	param: {
+		type: Object,
+		default: () => ({}),
+	},
+	// 榛樿鎺掑簭鏂瑰紡锛寋prop:"鎺掑簭瀛楁",order:"ascending or descending"}
+	defaultSort: {
+		type: Object,
+		default: () => ({}),
+	},
+	// 瀵煎嚭鎶ヨ〃鑷畾涔夋暟鎹浆鎹㈡柟娉曪紝涓嶄紶鎸夊瓧娈靛�煎鍑�
+	exportChangeData: {
+		type: Function,
+	},
+	// 鎵撳嵃鏍囬
+	printName: {
+		type: String,
+		default: () => '',
+	},
+});
+const state = reactive({
+	data: [] as Array<EmptyObjectType>,
+	loading: false,
+	exportLoading: false,
+	total: 0,
+	page: {
+		page: 1,
+		pageSize: 10,
+		field: '',
+		order: '',
+	},
+	showPagination: true,
+	selectlist: [] as EmptyObjectType[],
+	checkListAll: true,
+	checkListIndeterminate: false,
+});
 
+// 鎵撳嵃
+const openPrintWmsStockQuan = () => {
+	printJs({
+		printable: 'printContent', // 寮曠敤瑕佹墦鍗扮殑鍏冪礌 ID
+		type: 'html', // 浣跨敤 HTML 鍐呭
+		css: ['//at.alicdn.com/t/c/font_2298093_rnp72ifj3ba.css', '//unpkg.com/element-plus/dist/index.css'],
+		style: `
+      @media print {
+        .mb15 { margin-bottom: 15px; }
+        .el-button--small i.iconfont { font-size: 12px !important; margin-right: 5px; }
+      }
+      .table-th { word-break: break-all; white-space: pre-wrap; }
+      .table-center { text-align: center; }
+    `,
+	});
+
+	// // https://printjs.crabbly.com/#documentation
+	// // 鑷畾涔夋墦鍗�
+	// let tableTh = '';
+	// let tableTrTd = '';
+	// let tableTd: any = {};
+	// // 琛ㄥご
+	// setHeader.value.forEach((v: any) => {
+	// 	if (v.prop === 'action') {
+	// 		return;
+	// 	}
+	// 	tableTh += `<th class="table-th">${v.label}</th>`;
+	// });
+	// // 琛ㄦ牸鍐呭
+	// state.data.forEach((val: any, key: any) => {
+	// 	if (!tableTd[key]) tableTd[key] = [];
+	// 	setHeader.value.forEach((v: any) => {
+	// 		if (v.prop === 'action') {
+	// 			return;
+	// 		}
+	// 		if (v.type === 'text') {
+	// 			tableTd[key].push(`<td class="table-th table-center">${val[v.prop]}</td>`);
+	// 		} else if (v.type === 'image') {
+	// 			tableTd[key].push(`<td class="table-th table-center"><img src="${val[v.prop]}" style="width:${v.width}px;height:${v.height}px;"/></td>`);
+	// 		} else {
+	// 			tableTd[key].push(`<td class="table-th table-center">${val[v.prop]}</td>`);
+	// 		}
+	// 	});
+	// 	tableTrTd += `<tr>${tableTd[key].join('')}</tr>`;
+	// });
+	// // 鎵撳嵃
+	// printJs({
+	// 	printable: `<div style=display:flex;flex-direction:column;text-align:center><h3>333</h3></div><table border=1 cellspacing=0><tr>${tableTh}${tableTrTd}</table>`,
+	// 	type: 'raw-html',
+	// 	css: ['//at.alicdn.com/t/c/font_2298093_rnp72ifj3ba.css', '//unpkg.com/element-plus/dist/index.css'],
+	// 	style: `@media print{.mb15{margin-bottom:15px;}.el-button--small i.iconfont{font-size: 12px !important;margin-right: 5px;}}; .table-th{word-break: break-all;white-space: pre-wrap;}.table-center{text-align: center;}`,
+	// });
+};
+
+// 鎵撳紑鎵撳嵃瀹炴椂搴撳瓨椤甸潰
+const openPrintWmsStockQuan2 = async (row: any) => {
+	// printWmsStockQuanTitle.value = '鎵撳嵃瀹炴椂搴撳瓨';
 
 	ElMessageBox.confirm('鏄惁纭鎵撳嵃锛�', '鎻愮ず', {
 		confirmButtonText: '纭',
@@ -288,151 +354,116 @@
 		type: 'warning',
 	})
 		.then(async () => {
+			const handleArr: number[] = [];
+			checkRows.value.forEach((item) => {
+				// handleArr.push(item.id);
+				item.PrintSource = 1; //搴撳瓨璺熻釜鐮佹墦鍗�
+				item.PrintType = 1;
+				item.PrintSheetNum = 1;
+				item.PrintNum = 1;
+				item.PrintStatu = 1;
+				item.IsAllowPrint = 1;
+			});
 
-      const handleArr: number[] = [];
-	checkRows.value.forEach((item) => {
-		// handleArr.push(item.id);
-    item.PrintSource = 1 //搴撳瓨璺熻釜鐮佹墦鍗�
-    item.PrintType = 1
-    item.PrintSheetNum = 1
-    item.PrintNum = 1
-    item.PrintStatu = 1
-    item.IsAllowPrint = 1
-    
-	});
+			const obj = { id: handleArr };
 
- 
-	const obj = { id: handleArr };
-
-  var res = await addWmsRecordSncodePrint(checkRows.value);
-  if (res.data && res.data.code == 200) {
-          ElMessage.success("娣诲姞鎴愬姛");
-        }
-		
+			var res = await addWmsRecordSncodePrint(checkRows.value);
+			if (res.data && res.data.code == 200) {
+				ElMessage.success('娣诲姞鎴愬姛');
+			}
 		})
 		.catch(() => {
 			ElMessage.info('宸插彇娑堝垹闄�');
 		});
+};
 
-  }
-  
-  // 鎵撳紑缂栬緫瀹炴椂搴撳瓨椤甸潰
-  const openEditWmsStockQuan = (row: any) => {
-    editWmsStockQuanTitle.value = '缂栬緫瀹炴椂搴撳瓨';
-    editDialogRefWmsStockQuan.value.openDialog(2,row);
-  };
+// 鎵撳紑缂栬緫瀹炴椂搴撳瓨椤甸潰
+const openEditWmsStockQuan = (row: any) => {
+	editWmsStockQuanTitle.value = '缂栬緫瀹炴椂搴撳瓨';
+	editDialogRefWmsStockQuan.value.openDialog(2, row);
+};
 
-  // 鍒犻櫎瀹炴椂搴撳瓨
-  const delWmsStockQuan = (row: any) => {
-    ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
-    confirmButtonText: "纭畾",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-  .then(async () => {
-    loadingWmsStockQuan.value = true;
-    var ret = await deleteWmsStockQuan(row);
-    if(ret.data.type=="success"){
-        ElMessage.success("鍒犻櫎鎴愬姛");
-	}
-    loadingWmsStockQuan.value = false;
-    handleQueryWmsStockQuan();
-  })
-  .catch(() => {});
-  };
+// 鍒犻櫎瀹炴椂搴撳瓨
+const delWmsStockQuan = (row: any) => {
+	ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, '鎻愮ず', {
+		confirmButtonText: '纭畾',
+		cancelButtonText: '鍙栨秷',
+		type: 'warning',
+	})
+		.then(async () => {
+			loadingWmsStockQuan.value = true;
+			var ret = await deleteWmsStockQuan(row);
+			if (ret.data.type == 'success') {
+				ElMessage.success('鍒犻櫎鎴愬姛');
+			}
+			loadingWmsStockQuan.value = false;
+			handleQueryWmsStockQuan();
+		})
+		.catch(() => {});
+};
 
-  // 鏀瑰彉瀹炴椂搴撳瓨椤甸潰瀹归噺
-  const handleSizeChangeWmsStockQuan = (val: number) => {
-    tableParamsWmsStockQuan.value.pageSize = val;
-    handleQueryWmsStockQuan();
-  };
+// 鏀瑰彉瀹炴椂搴撳瓨椤甸潰瀹归噺
+const handleSizeChangeWmsStockQuan = (val: number) => {
+	tableParamsWmsStockQuan.value.pageSize = val;
+	handleQueryWmsStockQuan();
+};
 
-  // 鏀瑰彉瀹炴椂搴撳瓨椤电爜搴忓彿
-  const handleCurrentChangeWmsStockQuan = (val: number) => {
-    tableParamsWmsStockQuan.value.page = val;
-    handleQueryWmsStockQuan();
-  };
+// 鏀瑰彉瀹炴椂搴撳瓨椤电爜搴忓彿
+const handleCurrentChangeWmsStockQuan = (val: number) => {
+	tableParamsWmsStockQuan.value.page = val;
+	handleQueryWmsStockQuan();
+};
 
 /***************************************************[瀹炴椂搴撳瓨鎿嶄綔]缁撴潫***************************************************/
 /***************************************************[瀹炴椂搴撳瓨瀵煎嚭]寮�濮�***************************************************/
 //瀹氫箟褰撳墠椤甸潰鐨勬柟娉曠粍
 const functionMapWmsStockQuan = {
-      getEnumStockStatusData_Index,
-      getEnumQCStatusData_Index,
-      formatDate_T_Date,
-      formatDate_T_Time
+	getEnumStockStatusData_Index,
+	getEnumQCStatusData_Index,
+	formatDate_T_Date,
+	formatDate_T_Time,
 };
 //鐐瑰嚮瀵煎嚭鎸夐挳
-const handleExportExcelWmsStockQuan = async (formData:Blob) => {
-    loadingWmsStockQuan.value = true;
-    disabled_btnWmsStockQuan.value = true;
-    var new_tableParamsWmsStockQuan=JSON.parse(JSON.stringify(tableParamsWmsStockQuan.value));
-    new_tableParamsWmsStockQuan.page = 1;
-    new_tableParamsWmsStockQuan.pageSize = 100000;
-    var res = await pageWmsStockQuan(Object.assign(queryParamsWmsStockQuan.value, new_tableParamsWmsStockQuan));
-    if(res.data.type=="success"){
-      exportExcelWmsStockQuan(res.data.result?.items ?? []);
-    }
-    loadingWmsStockQuan.value = false;
-    disabled_btnWmsStockQuan.value = false;
+const handleExportExcelWmsStockQuan = async (formData: Blob) => {
+	loadingWmsStockQuan.value = true;
+	disabled_btnWmsStockQuan.value = true;
+	var new_tableParamsWmsStockQuan = JSON.parse(JSON.stringify(tableParamsWmsStockQuan.value));
+	new_tableParamsWmsStockQuan.page = 1;
+	new_tableParamsWmsStockQuan.pageSize = 100000;
+	var res = await ShortagePage(Object.assign(queryParamsWmsStockQuan.value, new_tableParamsWmsStockQuan));
+	if (res.data.type == 'success') {
+		exportExcelWmsStockQuan(res.data.result?.items ?? []);
+	}
+	loadingWmsStockQuan.value = false;
+	disabled_btnWmsStockQuan.value = false;
 };
 //瀵煎嚭
-const exportExcelWmsStockQuan  = async (exportDataList:Array) => {
-  exportPageExcel(exportDataList, tableRefWmsStockQuan,"瀹炴椂搴撳瓨",functionMapWmsStockQuan);
+const exportExcelWmsStockQuan = async (exportDataList: Array) => {
+	exportPageExcel(exportDataList, tableRefWmsStockQuan, '瀹炴椂搴撳瓨', functionMapWmsStockQuan);
 };
 /***************************************************[瀹炴椂搴撳瓨瀵煎嚭]缁撴潫***************************************************/
-  // 瀹炴椂搴撳瓨椤甸潰鍔犺浇鏃�
+// 瀹炴椂搴撳瓨椤甸潰鍔犺浇鏃�
 
-  const getEnumLockStatusData_Index = ref<any>([]);
-  onMounted(async () => {
-    getEnumStockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
-    getEnumLockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
-  });
+const getEnumLockStatusData_Index = ref<any>([]);
+onMounted(async () => {
+	getEnumStockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('StockStatusEnum')).data.result ?? [];
+	getEnumLockStatusData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('LockStatusEnum')).data.result ?? [];
+});
 
-  handleQueryWmsStockQuan();
+handleQueryWmsStockQuan();
 
-
-
-
-
-  //琛ㄦ牸姹囨��
-const getSummaries = (param: any) => {
-  const { columns, data } = param;
-  const sums:any = [];
-  columns.forEach((column, index) => {
-    if (index === 0) {
-      sums[index] = '鍚堣';
-      return;
-    }
-    //debugger
-    if (column.property != 'quantity' && column.property != 'scrapQuantity'
-      && column.property != 'useNumber'
-      && column.property != 'gridNumber'
-    ) {
-      sums[index] = '';
-      return "";
-    }
-    const values = data.map(item => Number(item[column.property]));
-    if (!values.every(value => isNaN(value))) {
-      sums[index] = Number(values.reduce((prev, curr) => {
-        const value = Number(curr);
-        if (!isNaN(value)) {
-          return prev + curr;
-        } else {
-          return prev;
-        }
-      }, 0)).toFixed(3);
-      sums[index] += '';
-    } else {
-      sums[index] = '';//N/A
-    }
-  });
-
-  return sums;
-}
-
-
-
+// 鎵撳嵃
+let itemSubTitle = ref<any[]>([]);
+const handleHtmlPrint = () => {
+	proxy.$refs['printTableRef'].printHd('缂哄寘娓呭崟', itemSubTitle.value, checkRows.value); //deltailList
+};
+// //鎵撳嵃
+// const print = ref({
+//   id: 'printContent',
+//   popTitle: ' ',
+//   //extraCss: "https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css, https://cdn.bootcdn.net/ajax/libs/hover.css/2.3.1/css/hover-min.css",
+//   extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
+// })
 </script>
 <style scoped>
 :deep(.el-input),
@@ -441,4 +472,3 @@
 	width: 100%;
 }
 </style>
-
diff --git a/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs b/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs
index cf828e0..f735634 100644
--- a/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs
+++ b/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/Dto/WmsStockQuanOutput.cs
@@ -166,4 +166,41 @@
     public string OrderId { get; set; } // 鍗曞彿
     public int Count { get; set; }           // 瀵瑰簲鐨勬暟閲�
     public bool IsKitting { get; set; }
+}
+
+/// <summary>
+/// 鎵规缂烘枡娓呭崟
+/// </summary>
+public class WmsShortageListOutput
+{
+    /// <summary>
+    /// 缂撳瓨宀涙暟閲�
+    /// </summary>
+    public int HasCount { get; set; }     
+
+    /// <summary>
+    /// mes杩囨潵鐨勬�绘暟閲�
+    /// </summary>
+    public int TotalCount { get; set; }
+
+    /// <summary>
+    /// 缂烘枡鏁伴噺
+    /// </summary>
+    public int ShortageCount { get; set; }
+
+    /// <summary>
+    /// 鎵规
+    /// </summary>
+    public string PlanNo { get; set; }
+
+    /// <summary>
+    /// 璁㈠崟鍙�
+    /// </summary>
+    public string OrderId { get; set; }
+
+    /// <summary>
+    /// 鍖呰鍙�
+    /// </summary>
+    public string PackageCode { get; set; }
+
 }
\ No newline at end of file
diff --git a/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs b/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs
index f246294..5ff4f56 100644
--- a/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs
+++ b/LA24030_LuLiPackageLine_Wms/Admin.NET.Application/Service/WmsStockQuan/WmsStockQuan/WmsStockQuanService.cs
@@ -13,9 +13,13 @@
 public class WmsStockQuanService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<WmsStockQuan> _rep;
-    public WmsStockQuanService(SqlSugarRepository<WmsStockQuan> rep)
+    private readonly SqlSugarRepository<Mes_BatchOrderUPI_New> _Mes_BatchOrderUPI_New_Rep;
+
+    public WmsStockQuanService(SqlSugarRepository<WmsStockQuan> rep,
+        SqlSugarRepository<Mes_BatchOrderUPI_New> Mes_BatchOrderUPI_New_Rep)
     {
         _rep = rep;
+        _Mes_BatchOrderUPI_New_Rep = Mes_BatchOrderUPI_New_Rep;
     }
 
     /// <summary>
@@ -302,5 +306,124 @@
         return groupedResult; // 杩斿洖鍒嗙粍缁撴灉
     }
 
+
+
+
+    /// <summary>
+    /// 涓嶅垎椤垫煡璇㈡壒娆$己鏂欐竻鍗� 涓嶉綈鍖�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "ShortageList")]
+    [Description("WmsStockQuan/ShortageList")]
+    public async Task<List<WmsShortageListOutput>> ShortageList([FromQuery] KittingListInput input)
+    {
+        var list = await _rep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.DetailName), u => u.PlaceCode.Contains(input.DetailName.Trim()))
+            .Select(x => new WmsShortageListOutput
+            {
+                OrderId = x.OrderId,
+                PlanNo = x.PlanNo,
+                PackageCode = x.PackageCode
+            })
+            .ToListAsync(); // 纭繚鑾峰彇缁撴灉涓� List
+
+        // 鍒嗙粍骞惰繑鍥炲垎缁勪俊鎭�
+        var groupedResult = list
+            .GroupBy(x => x.OrderId) // 鎸� OrderId 鍒嗙粍
+            .Select(g => new WmsShortageListOutput
+            {
+                OrderId = g.Key, // 鑾峰彇鍒嗙粍鐨勯敭
+                PlanNo = g.FirstOrDefault().PlanNo, // 鑾峰彇缁勫唴鐨勭涓�涓� PlanNo
+                PackageCode = g.FirstOrDefault().PackageCode, // 鑾峰彇缁勫唴鐨勭涓�涓� PackageCode
+                HasCount = g.Count(), // 缁熻姣忕粍鐨勬暟閲�
+                TotalCount = 0, // 鍒濆鍖� TotalCount
+                ShortageCount = 0 // 鍒濆鍖� ShortageCount
+            })
+            .OrderBy(g => g.OrderId) // 鏍规嵁 OrderId 鎺掑簭
+            .ToList(); // 杞崲涓� List
+
+        // 寰幆 groupedResult 缁欐瘡涓�鏉″姞涓婃�绘暟閲� CountTotal
+        foreach (var item in groupedResult)
+        {
+            item.TotalCount = await _Mes_BatchOrderUPI_New_Rep.AsQueryable().CountAsync(m => m.PackageCode == item.PackageCode); // 鏍规嵁 PackageCode 缁熻鎬绘潯鏁�
+            item.ShortageCount = item.TotalCount - item.HasCount > 0 ? item.TotalCount - item.HasCount : 0;
+        }
+
+        return groupedResult; // 杩斿洖鍒嗙粍缁撴灉
+    }
+
+
+
+
+    /// <summary>
+    /// 鍒嗛〉鏌ヨ鎵规缂烘枡娓呭崟 涓嶉綈鍖� 
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "ShortagePage")]
+    [Description("WmsStockQuan/ShortagePage")]
+    public async Task<SqlSugarPagedList<WmsShortageListOutput>> ShortagePage(KittingListInput input)
+    {
+        // 鑾峰彇鍩虹鏁版嵁
+        var list = await _rep.AsQueryable()
+            .WhereIF(!string.IsNullOrWhiteSpace(input.DetailName), u => u.PlaceCode.Contains(input.DetailName.Trim()))
+            .Select(x => new WmsShortageListOutput
+            {
+                OrderId = x.OrderId,
+                PlanNo = x.PlanNo,
+                PackageCode = x.PackageCode
+            })
+            .ToListAsync(); // 纭繚鑾峰彇缁撴灉涓� List
+
+        // 鍒嗙粍骞惰繑鍥炲垎缁勪俊鎭�
+        var groupedResult = list
+            .GroupBy(x => x.OrderId) // 鎸� OrderId 鍒嗙粍
+            .Select(g => new WmsShortageListOutput
+            {
+                OrderId = g.Key, // 鑾峰彇鍒嗙粍鐨勯敭
+                PlanNo = g.FirstOrDefault().PlanNo, // 鑾峰彇缁勫唴鐨勭涓�涓� PlanNo
+                PackageCode = g.FirstOrDefault().PackageCode, // 鑾峰彇缁勫唴鐨勭涓�涓� PackageCode
+                HasCount = g.Count(), // 缁熻姣忕粍鐨勬暟閲�
+                TotalCount = 0, // 鍒濆鍖� TotalCount
+                ShortageCount = 0 // 鍒濆鍖� ShortageCount
+            })
+            .OrderBy(g => g.OrderId) // 鏍规嵁 OrderId 鎺掑簭
+            .ToList(); // 杞崲涓� List
+
+        // 寰幆 groupedResult 缁欐瘡涓�鏉″姞涓婃�绘暟閲� TotalCount
+        foreach (var item in groupedResult)
+        {
+            item.TotalCount = await _Mes_BatchOrderUPI_New_Rep.AsQueryable().CountAsync(m => m.PackageCode == item.PackageCode); // 鏍规嵁 PackageCode 缁熻鎬绘潯鏁�
+            item.ShortageCount = item.TotalCount - item.HasCount > 0 ? item.TotalCount - item.HasCount : 0;
+        }
+
+        // 鍒嗛〉澶勭悊
+        var pagedResult = groupedResult.AsQueryable() // 灏嗗垎缁勭粨鏋滆浆鎹负鍙煡璇㈢殑闆嗗悎
+            .OrderBy(g => g.OrderId) // 杩涜鎺掑簭
+            .Skip((input.Page - 1) * input.PageSize) // 璺宠繃鍓嶉潰鐨勯〉鏁�
+            .Take(input.PageSize) // 鍙栧嚭褰撳墠椤电殑鏁版嵁
+            .ToList(); // 杞崲涓� List
+
+        var totalCount = groupedResult.Count; // 鑾峰彇鎬绘暟
+        var totalPages = (int)Math.Ceiling((double)totalCount / input.PageSize); // 璁$畻鎬婚〉鏁�
+
+        // 鏋勯�犲苟杩斿洖鍒嗛〉缁撴灉
+        return new SqlSugarPagedList<WmsShortageListOutput>
+        {
+            Page = input.Page,
+            PageSize = input.PageSize,
+            Total = totalCount,
+            TotalPages = totalPages,
+            Items = pagedResult,
+            HasPrevPage = input.Page > 1,
+            HasNextPage = input.Page < totalPages
+        };
+    }
+
+
+
 }
 

--
Gitblit v1.9.3