From 39480ed0a107e09b08c6bc61527b5577c2f05df8 Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期六, 18 十月 2025 16:55:31 +0800
Subject: [PATCH] 逻辑优化

---
 components/WorkOrderPrint.vue |  317 ++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 219 insertions(+), 98 deletions(-)

diff --git a/components/WorkOrderPrint.vue b/components/WorkOrderPrint.vue
index 9a67d72..24d2e91 100644
--- a/components/WorkOrderPrint.vue
+++ b/components/WorkOrderPrint.vue
@@ -29,25 +29,25 @@
 								<td>{{ order.daa003 || '-' }}</td>
 								<td>{{ planQtyDisplay }}</td>
 								<td>{{ machineNo || '-' }}</td>
-								<td>{{ initialValue }}</td>
-								<td>{{ productionCount }}</td>
-								<td>{{ calculatedTotalProduction }}</td>
-								<td>{{ calculatedDefectiveCount }}</td>
-								<td>{{ sQuantity }}</td>
+								<td>{{ order.initCjNum }}</td><!--鍒濆閲囬泦鏁�-->
+								<td>{{ order.currentCjNum }}</td><!--鎶ュ伐鏃堕噰闆嗘暟-->
+								<td>{{ order.currentCjNum - order.initCjNum }}</td><!--鎶ュ伐鏁帮紙璁$畻锛�-->
+								<td>{{ realTimeDefectiveCount }}</td><!--涓嶈壇鏁�-->
+								<td>{{ realTimeOkCount }}</td><!--鑹搧鏁帮紙璁$畻锛�-->
 							</tr>
 							<!-- 鍘嗗彶鎶ュ伐璁板綍琛� -->
 							<tr v-for="(r, idx) in reportingHistory" :key="idx">
-								<td>{{ r.time }}</td>
-								<td>{{ r.staff || '-' }}</td>
-								<td>{{ r.orderNo || '-' }}</td>
-								<td>{{ r.productName || '-' }}</td>
-								<td>{{ r.planQty }}</td>
-								<td>{{ r.machineNo || '-' }}</td>
-								<td>{{ r.initialValue }}</td>
-								<td>{{ r.productionCount }}</td>
-								<td>{{ r.totalProduction }}</td>
-								<td>{{ r.defective }}</td>
-								<td>{{ r.good }}</td>
+								<td>{{ r.bgDate }}</td><!--鏃堕棿-->
+								<td>{{ r.staff || '-' }}</td><!--鎶ュ伐浜�-->
+								<td>{{ r.orderNo || '-' }}</td><!--宸ュ崟鍙�-->
+								<td>{{ order.daa003 || '-' }}</td><!--浜у搧鍚嶇О-->
+								<td>{{ planQtyDisplay }}</td><!--璁″垝鐢熶骇鏁�-->
+								<td>{{ r.machineNo || '-' }}</td><!--鏈哄彴鍙�-->
+								<td>{{ r.initialValue }}</td><!--鍒濆閲囬泦鏁�-->
+								<td>{{ r.productionCount }}</td><!--鎶ュ伐鏃堕噰闆嗘暟-->
+								<td>{{ r.totalProduction }}</td><!--鎶ュ伐鏁帮紙璁$畻锛�-->
+								<td>{{ r.BfQty }}</td><!--涓嶈壇鏁�-->
+								<td>{{ r.OkQty }}</td><!--鑹搧鏁帮紙璁$畻锛�-->
 							</tr>
 							<tr v-if="!reportingHistory.length">
 								<td colspan="11" class="no-data">鏆傛棤鍘嗗彶鎶ュ伐璁板綍</td>
@@ -59,7 +59,7 @@
 
 			<!-- 涓嬮潰鍘熸湁鍐呭淇濇寔涓嶅彉 -->
 			<view class="status-row">
-				<view class="status-box">
+				<!--<view class="status-box">
 					<text>鏈哄彴闈㈡澘鏁帮細</text>
 					<input v-model="productionCount" class="highlight" disabled />
 				</view>
@@ -80,15 +80,114 @@
 				<view class="status-box result-box">
 					<text>宸茬敓浜ф暟锛�</text>
 					<input v-model="calculatedTotalProduction" class="highlight" disabled />
-				</view>
+				</view>-->
 				<view class="btn-group">
 					<button class="refresh-btn-inline" @click="refresh">鍒锋柊</button>
 					<button v-if="isGeneratingBarcode" class="reset-btn-inline" @click="resetGenerateState">閲嶇疆</button>
 				</view>
 			</view>
 
-			<!-- 鍏朵綑妯℃澘淇濇寔鍘熸牱 -->
-			<!-- ... -->
+			<view class="flex-row gap-lg">
+				<view class="print-section flex-grow">
+					<view class="barcode-info">
+						<view class="user-select">
+							<text>涓嶈壇鏁伴噺锛�</text>
+							<input v-model="customAmount" class="inp bad-input" placeholder="璇疯緭鍏ユ暟閲�" />
+						</view>
+						<view class="user-select">
+							<button class="details-btn" @click="confirmCustomAmount">纭鎻愪氦</button>
+						</view>
+					</view>
+				</view>
+
+				<view class="current-user-section fill-width">
+					<text>褰撳墠鎶ュ伐浜猴細</text>
+					<text class="current-user-name">{{ staffDisplay || '鏈�夋嫨' }}</text>
+					<button class="select-user-btn" @click="isShowUserSelect = true">閫変汉</button>
+				</view>
+			</view>
+
+			<!-- 閫変汉寮圭獥 -->
+			<view v-if="isShowUserSelect" class="overlay">
+				<view class="popup user-select-popup">
+					<!-- 鎼滅储鏍� -->
+					<view class="user-search-bar">
+						<input v-model.trim="userSearch"
+							   type="text"
+							   class="user-search-input"
+							   placeholder="杈撳叆宸ュ彿鎴栧鍚嶆悳绱�"
+							   @keydown.enter.prevent />
+						<button v-if="userSearch" class="user-search-clear" @click="userSearch=''">娓呯┖</button>
+						<view class="user-search-info">
+							鍖归厤锛歿{ filteredUsers.length }} / {{ users.length }}
+						</view>
+					</view>
+					<view class="user-list-scroll">
+						<template v-if="filteredUsers.length">
+							<view class="user-list-grid">
+								<button v-for="(u, index) in filteredUsers"
+										:key="index"
+										:class="['user-list-btn', {'selected': u===staffNo}]"
+										@click="selectUser(u)">
+									<span class="user-code">{{ u.split(':')[0] }}</span>
+									<span class="user-name">{{ u.split(':')[1] }}</span>
+								</button>
+							</view>
+						</template>
+						<view v-else class="no-user-result">
+							鏈壘鍒板尮閰嶄汉鍛�
+						</view>
+					</view>
+					<view class="user-popup-footer">
+						<button class="clean-btn wide-btn" @click="isShowUserSelect = false">鍏抽棴</button>
+					</view>
+				</view>
+			</view>
+
+			<!-- 绂佺敤鎸夐挳锛氣�樹繚瀛樺苟鐢熸晥'銆佲�樺彇娑堚�� -->
+			<!--<view class="bottom-section">
+				<button class="save-btn" @click="save">淇濆瓨骞剁敓鏁�</button>
+				<button class="cancel-btn" @click="cancel">鍙栨秷</button>
+			</view>-->
+
+			<!-- 淇濈暀鏃у脊绐� -->
+			<view v-if="isShow" class="overlay">
+				<view class="popup">
+					<view class="bottom-section1">
+						<button class="clean-btn" type="warn" @click="deleteBarcode">鍏抽棴</button>
+					</view>
+					<view class="reason-section">
+						<text>鎶ュ伐浜猴細</text>
+						<view class="reason-buttons">
+							<button v-for="(u,index) in users" :key="index"
+									:class="{'reason-btn':true,'selected': user===u}"
+									@click="toggleUser(u)">
+								{{ formatUser(u) }}
+							</button>
+						</view>
+					</view>
+				</view>
+			</view>
+
+			<view v-if="barcodeIsShow" class="overlay">
+				<view class="popup">
+					<uni-table ref="table" border stripe emptyText="鏆傛棤鏇村鏁版嵁" class="table1">
+						<uni-tr>
+							<uni-th align="center" style="font-size:40px;">鐢熸垚鏃堕棿</uni-th>
+							<uni-th align="center" style="width:39%;font-size:40px;">鏉$爜</uni-th>
+							<uni-th align="center" style="font-size:40px;">鎶ュ伐浜�</uni-th>
+							<uni-th align="center" style="font-size:40px;">鎶ュ伐鏁伴噺</uni-th>
+						</uni-tr>
+						<uni-tr v-for="(item,index) in reportingList" :key="index">
+							<uni-td align="center"><input type="text" v-model="item.bgDate" style="width:26vh;" /></uni-td>
+							<uni-td align="center"><input v-model="item.itemNoCade" style="width:40vh;" /></uni-td>
+							<uni-td align="center"><input v-model="item.staffName" /></uni-td>
+							<uni-td align="center"><input v-model="item.okQty" /></uni-td>
+						</uni-tr>
+					</uni-table>
+					<view><button class="clean-btn" type="warn" @click="barcodeIsShow=false">鍏抽棴</button></view>
+				</view>
+			</view>
 		</view>
 	</view>
 </template>
@@ -118,28 +217,41 @@
 			}
 		},
 		computed: {
-			calculatedCurrentCount() { return (this.productionCount || 0) - (this.initialValue || 0); },
-			calculatedTotalProduction() { return (this.kgQty || 0); }, // 鑻ラ渶瑕佹仮澶嶄箣鍓嶉�昏緫鍙敼涓� (this.kgQty||0)+this.calculatedCurrentCount
-			calculatedDefectiveCount() { return this.calculatedTotalProduction - (this.sQuantity || 0); },
-			planQtyDisplay() { return this.order.planQty || this.order.planQuantity || this.order.daa008 || 0; },
-			staffDisplay() {
-				if (!this.staffNo) return '';
-				const segs = this.staffNo.split(':');
-				return segs.length > 1 ? `${segs[0]} ${segs[1]}` : this.staffNo;
-			},
-			filteredUsers() {
-				if (!this.userSearch) return this.users;
-				const kw = this.userSearch.trim().toLowerCase();
-				return this.users.filter(u => u.toLowerCase().includes(kw));
-			}
-		},
-		created() {
-			this.initializeData();
-			this.fetchData(true);
-			this.init();
-			this.getXS0101();
-			this.updateNowTime();
-			this.nowTimeTimer = setInterval(this.updateNowTime, 60000);
+	        //鑹搧鏁板疄鏃惰绠�
+            realTimeDefectiveCount() {
+                // 浼樺厛鐢ㄨ緭鍏ユ鐨勫�硷紝鍚﹀垯鐢ㄦ帴鍙f暟鎹�
+                const val = Number(this.customAmount);
+                if (!isNaN(val) && this.customAmount !== '') return val;
+                return this.calculatedDefectiveCount;
+            },
+            realTimeOkCount() {
+                // 鑹搧鏁� = 鎶ュ伐鏁帮紙璁$畻锛� - 涓嶈壇鏁�
+                const total = (this.order.currentCjNum || 0) - (this.order.initCjNum || 0);
+                return total - this.realTimeDefectiveCount;
+            },
+            calculatedCurrentCount() { return (this.productionCount || 0) - (this.initialValue || 0); },
+            calculatedTotalProduction() { return (this.kgQty || 0); }, // 鑻ラ渶鎭㈠鏃ч�昏緫鍙敤 (this.kgQty||0)+this.calculatedCurrentCount
+            calculatedDefectiveCount() { return this.calculatedTotalProduction - (this.sQuantity || 0); },
+            planQtyDisplay() { return this.order.planQty || this.order.planQuantity || this.order.daa008 || 0; },
+            staffDisplay() {
+                if (!this.staffNo) return '';
+                const segs = this.staffNo.split(':');
+                return segs.length > 1 ? `${segs[0]} ${segs[1]}` : this.staffNo;
+            },
+            filteredUsers() {
+                if (!this.userSearch) return this.users;
+                const kw = this.userSearch.trim().toLowerCase();
+                return this.users.filter(u => u.toLowerCase().includes(kw));
+            }
+        },
+        created() {
+            this.initializeData();
+            this.fetchData(true);
+            this.init();
+            this.getXS0101();
+            this.updateNowTime();
+            // 绉掔骇鍒锋柊锛涘涓嶉渶鍔ㄦ�佽烦绉掑彲鏀逛负 60000
+            this.nowTimeTimer = setInterval(this.updateNowTime, 1000);
 		},
 		beforeDestroy() { if (this.nowTimeTimer) clearInterval(this.nowTimeTimer); },
 		methods: {
@@ -149,27 +261,28 @@
 				return segs.length > 1 ? `${segs[0]} ${segs[1]}` : u;
 			},
 			selectUser(u) { this.staffNo = u; this.isShowUserSelect = false; this.userSearch = ''; },
-			updateNowTime() {
-				const d = new Date(), p = n => n.toString().padStart(2, '0');
-				this.nowTime = `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;
-			},
-			initializeData() {
-				this.productionCount = this.printedCount = this.defectiveCount = 0;
-				this.icount = 1; this.bqty = 0; this.sQuantity = 0; this.kgQty = 0;
-				this.initialValue = 0; this.qqty = 0;
-				this.isGeneratingBarcode = false; this.lastGenerateTime = 0; this.generateRequestId = null;
-			},
-			resetGenerateState() {
-				this.isGeneratingBarcode = false; this.generateRequestId = null; this.lastGenerateTime = 0;
-				this.$showMessage("宸查噸缃潯鐮佺敓鎴愮姸鎬�");
-			},
-			refresh() {
-				this.$sendPostRequest({
-					url: "http://192.168.0.94:9095/Numerical/RefreshDev",
-					data: { machineNo: this.order.machineNo },
-					contentType: "application/json"
-				}).then(r => { r.code == 200 ? this.fetchData(true) : this.$showMessage("鍚屾澶辫触"); });
-			},
+            /* 淇敼锛氬鍔犵 */
+            updateNowTime() {
+                const d = new Date(), p = n => n.toString().padStart(2, '0');
+                this.nowTime = `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
+            },
+            initializeData() {
+                this.productionCount = this.printedCount = this.defectiveCount = 0;
+                this.icount = 1; this.bqty = 0; this.sQuantity = 0; this.kgQty = 0;
+                this.initialValue = 0; this.qqty = 0;
+                this.isGeneratingBarcode = false; this.lastGenerateTime = 0; this.generateRequestId = null;
+            },
+            resetGenerateState() {
+                this.isGeneratingBarcode = false; this.generateRequestId = null; this.lastGenerateTime = 0;
+                this.$showMessage("宸查噸缃潯鐮佺敓鎴愮姸鎬�");
+            },
+            refresh() {
+                this.$sendPostRequest({
+                    url: "http://192.168.0.94:9095/Numerical/RefreshDev",
+                    data: { machineNo: this.order.machineNo },
+                    contentType: "application/json"
+                }).then(r => { r.code == 200 ? this.fetchData(true) : this.$showMessage("鍚屾澶辫触"); });
+            },
 			onDaa003Change(v) {
 				let o = this.lineList[this.DAA003List.indexOf(v)];
 				this.orderId = o.id; this.orderNo = o.daa001;
@@ -192,29 +305,34 @@
 				}
 			},
 			/* 鏂板锛氳幏鍙栧巻鍙叉姤宸ヨ褰� */
-			getReportingHistory() {
-				if (!this.orderNo) { this.reportingHistory = []; return; }
-				this.$post({
-					// 鍚庣闇�瑕佹彁渚涙寜 BILL_NO 鏌ヨ鐨勬帴鍙o紝绀轰緥璺緞锛�
-					url: "/MesReporting/GetByBillNo",
-					data: { billNo: this.orderNo }
+            /* 淇敼锛氳鑼冨巻鍙叉椂闂村埌绉� */
+            getReportingHistory() {
+                if (!this.orderNo) { this.reportingHistory = []; return; }
+                const fmtSec = v => {
+                    if (!v) return '';
+                    // 鍏煎鍚庣鍙兘杩斿洖鐨勪笉鍚屾牸寮�
+                    const d = new Date(typeof v === 'string' ? v.replace(/-/g, '/') : v);
+                    if (isNaN(d.getTime())) return v; // 鏃犳硶瑙f瀽鍒欏師鏍疯繑鍥�
+                    const p = n => n.toString().padStart(2, '0');
+                    return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
+                };
+                this.$post({
+                    url: "/Womdaa/GetByBillNoBG",
+                    data: { billNo: this.orderNo, machineNo: this.machineNo || null }
 				}).then(res => {
 					const list = res?.data?.tbBillList || res?.data || [];
 					this.reportingHistory = list.map(r => {
 						// 渚濇嵁浣犳暟鎹簱瀛楁鍋氭槧灏勶紙涓嬮潰瀛楁鍚嶆寜甯歌鍛藉悕涓句緥锛岄渶瑕佹寜瀹為檯鏀癸級
 						return {
-							time: r.bgDate || r.startTime || r.createTime || '',        // 寮�濮嬫椂闂�
-							staff: (r.staffNo ? (r.staffNo + ' ' + (r.staffName || '')) : (r.staffName || '')),
-							orderNo: r.billNo || this.orderNo,
-							productName: r.daa003 || this.order?.daa003,
-							planQty: this.planQtyDisplay,
-							machineNo: r.machineNo || this.machineNo,
-							initialValue: r.initialValue ?? 0,
-							productionCount: r.productionCount ?? r.todayOutput ?? 0,
-							totalProduction: r.kgQty ?? r.totalProduction ?? 0,
-							good: r.sQuantity ?? r.okQty ?? 0,
-							defective: (r.defectiveQty ??
-								((r.kgQty ?? r.totalProduction ?? 0) - (r.sQuantity ?? r.okQty ?? 0)))
+                            bgDate: r.bgDate || '', // 鎶ュ伐鏃堕棿
+                            staff: (r.staffNo ? (r.staffNo + ' ' + (r.staffName || '')) : (r.staffName || '')),//鎶ュ伐浜�
+                            orderNo: r.billNo,//宸ュ崟鍙�
+                            machineNo: r.machineNo ,//鏈哄彴鍙�
+                            initialValue: r.csQty ?? 0,//鍒濆閲囬泦鏁�
+                            productionCount: r.cjQty ?? 0,//鎶ュ伐鏃堕噰闆嗘暟
+                            totalProduction: (r.cjQty - r.csQty) ?? 0,//鎶ュ伐鏁帮紙璁$畻锛�
+                            BfQty: r.bfQty,//涓嶈壇鏁�
+                            OkQty: r.okQty//鑹搧鏁帮紙璁$畻锛�
 						}
 					});
 				}).catch(() => { this.reportingHistory = []; });
@@ -224,6 +342,7 @@
 				this.user = this.user === u ? null : u;
 				this.staffNo = this.user;
 			},
+            //閫夋嫨鎶ュ伐浜�
 			confirmCustomAmount() {
 				if (!this.customAmount || isNaN(Number(this.customAmount))) { this.$showMessage('璇疯緭鍏ユ湁鏁堢殑鏁伴噺'); return; }
 				if (!this.staffNo) { this.$showMessage('璇烽�夋嫨鎶ュ伐浜�'); return; }
@@ -231,12 +350,14 @@
 				const amount = Number(this.customAmount);
 				this.$post({
 					url: "/MesInvItemBarcodes/AddBFToBarcodes",
-					data: {
-						orderNo: this.orderNo,
-						orderId: this.orderId,
-						bf: amount,
-						staffNo: staffNo
-					}
+                    data: {
+                        orderNo: this.orderNo,
+                        orderId: this.orderId,
+                        bf: amount,
+                        staffNo: staffNo,
+                        initCjNum: this.order.initCjNum,        // 鍒濆閲囬泦鏁�
+                        currentCjNum: this.order.currentCjNum   // 鎶ュ伐鏃堕噰闆嗘暟
+                    }
 				}).then(res => {
 					if (res.status == 1) { this.$showMessage(res.message); return; }
 					this.$showMessage('鎶ュ簾鏁伴噺濉啓鎴愬姛');
@@ -340,18 +461,18 @@
 </script>
 
 <style scoped>
-    /* 鍘熸牱寮忎繚鎸侊紝鏂板鍑犺杈呭姪鏍峰紡 */
-    .report-table .summary-row {
-        background: #f0f8ff;
-        font-weight: 600;
-    }
+	/* 鍘熸牱寮忎繚鎸侊紝鏂板鍑犺杈呭姪鏍峰紡 */
+	.report-table .summary-row {
+		background: #f0f8ff;
+		font-weight: 600;
+	}
 
-    .report-table .no-data {
-        text-align: center;
-        color: #777;
-        font-size: 14px;
-    }
-    /* 鍏朵綑鏍峰紡淇濇寔涓嶅彉 */
+	.report-table .no-data {
+		text-align: center;
+		color: #777;
+		font-size: 14px;
+	}
+	/* 鍏朵綑鏍峰紡淇濇寔涓嶅彉 */
 
 	.page {
 		padding: 1.2vh 2vw;

--
Gitblit v1.9.3