From 512becab5fae2af1712337c0bbc6d2ff10139b0a Mon Sep 17 00:00:00 2001
From: 快乐的昕的电脑 <快乐的昕的电脑@DESKTOP-C2BQPQU>
Date: 星期三, 19 十一月 2025 10:45:34 +0800
Subject: [PATCH] 调试

---
 components/WorkOrderPrint.vue | 1391 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 862 insertions(+), 529 deletions(-)

diff --git a/components/WorkOrderPrint.vue b/components/WorkOrderPrint.vue
index 832214c..c0e9faa 100644
--- a/components/WorkOrderPrint.vue
+++ b/components/WorkOrderPrint.vue
@@ -1,46 +1,97 @@
 <template>
-	<view class="page">
+	<view class="page wide-layout" :class="{'has-overlay': (isShowUserSelect || isShow || barcodeIsShow)}">
 		<view class="status-section">
-			<!-- 鎶ュ伐璁板綍琛� -->
+			<!-- 鎶ュ伐璁板綍琛ㄩ儴鍒嗭紝鍦ㄦ爣棰樿娣诲姞鍒锋柊鎸夐挳 -->
 			<view class="report-table-wrapper">
-				<view class="report-title">鎶ュ伐璁板綍琛�</view>
-				<table class="report-table">
-					<thead>
-						<tr>
-							<th>鏃堕棿</th>
-							<th>鎶ュ伐浜�</th>
-							<th>宸ュ崟鍙�</th>
-							<th>浜у搧鍚嶇О</th>
-							<th>璁″垝鐢熶骇鏁�</th>
-							<th>鏈哄彴鍙�</th>
-							<th>鍒濆閲囬泦鏁�</th>
-							<th>鎶ュ伐鏃堕噰闆嗘暟</th>
-							<th>鎶ュ伐鏁帮紙璁$畻锛�</th>
-							<th>涓嶈壇鏁�</th>
-							<th>鑹搧鏁帮紙璁$畻锛�</th>
-						</tr>
-					</thead>
-					<tbody>
-						<tr>
-							<td>{{ nowTime }}</td>
-							<td>{{ staffNo || '-' }}</td>
-							<td>{{ orderNo || '-' }}</td>
-							<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>
-						</tr>
-					</tbody>
-				</table>
+				<view class="report-header">
+					<view class="report-title">鎶ュ伐璁板綍琛�</view>
+					<view class="header-buttons">
+						<button class="refresh-btn-header" @click="refresh">鍒锋柊</button>
+						<button v-if="isGeneratingBarcode" class="reset-btn-header" @click="resetGenerateState">閲嶇疆</button>
+					</view>
+				</view>
+
+				<!-- 鏁伴噰鎬讳骇閲� -->
+				<view class="section-title">褰撳墠鏁伴噰浜ч噺鎶ュ伐璁板綍</view>
+				<div class="table-scroll">
+					<table class="report-table">
+						<thead>
+							<tr>
+								<th>鏃堕棿</th>
+								<th>鎶ュ伐浜�</th>
+								<th>宸ュ崟鍙�</th>
+								<th>浜у搧鍚嶇О</th>
+								<th>璁″垝鐢熶骇鏁�</th>
+								<th>鏈哄彴鍙�</th>
+								<th>鍒濆閲囬泦鏁�</th>
+								<th>鎶ュ伐鏃堕噰闆嗘暟</th>
+								<th>鍩轰簬鏁伴噰鐨勬姤宸ユ暟</th>
+								<th>涓嶈壇鏁�</th>
+								<th>鑹搧鏁帮紙璁$畻锛�</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr class="summary-row highlight-row">
+								<td>{{ nowTime }}</td>
+								<td>{{ staffDisplay || '-' }}</td>
+								<td>{{ orderNo || '-' }}</td>
+								<td>{{ order.daa003 || '-' }}</td>
+								<td>{{ planQtyDisplay }}</td>
+								<td>{{ machineNo || '-' }}</td>
+								<td>{{ order.initCjNum }}</td>
+								<td>{{ order.currentCjNum }}</td>
+								<td>{{ order.currentCjNum - order.initCjNum }}</td>
+								<td>{{ realTimeDefectiveCount }}</td>
+								<td>{{ realTimeOkCount }}</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+
+				<!-- 鍘嗗彶鎶ュ伐璁板綍 -->
+				<view class="section-title history-title">鍘嗗彶鎶ュ伐璁板綍</view>
+				<div class="table-scroll">
+					<table class="report-table">
+						<thead>
+							<tr>
+								<th>鏃堕棿</th>
+								<th>鎶ュ伐浜�</th>
+								<th>宸ュ崟鍙�</th>
+								<th>浜у搧鍚嶇О</th>
+								<th>璁″垝鐢熶骇鏁�</th>
+								<th>鏈哄彴鍙�</th>
+								<th>鍒濆閲囬泦鏁�</th>
+								<th>鎶ュ伐鏃堕噰闆嗘暟</th>
+								<th>鎶ュ伐鏁帮紙璁$畻锛�</th>
+								<th>涓嶈壇鏁�</th>
+								<th>鑹搧鏁帮紙璁$畻锛�</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr v-for="(r, idx) in reportingHistory" :key="idx">
+								<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>
+							</tr>
+						</tbody>
+					</table>
+				</div>
 			</view>
 
-			<!-- 椤堕儴鐘舵�侊紙淇濈暀鍘熺涓�琛岋級 -->
+			<!-- 绉婚櫎浜嗗師鏉ョ殑鐘舵�佽涓殑鎸夐挳缁� -->
 			<view class="status-row">
-				<view class="status-box">
+				<!--<view class="status-box">
 					<text>鏈哄彴闈㈡澘鏁帮細</text>
 					<input v-model="productionCount" class="highlight" disabled />
 				</view>
@@ -61,78 +112,72 @@
 				<view class="status-box result-box">
 					<text>宸茬敓浜ф暟锛�</text>
 					<input v-model="calculatedTotalProduction" class="highlight" disabled />
+				</view>-->
+			</view>
+
+			<view class="flex-row gap-lg">
+				<!-- 褰撳墠鎶ュ伐浜洪儴鍒� -->
+				<view class="current-user-section">
+					<text>褰撳墠鎶ュ伐浜猴細</text>
+					<text class="current-user-name">{{ staffDisplay || '鏈�夋嫨' }}</text>
+					<button class="select-user-btn" @click="isShowUserSelect = true">閫変汉</button>
+				</view>
+
+				<!-- 涓嶈壇鏁伴噺閮ㄥ垎 -->
+				<view class="defective-section">
+					<text>涓嶈壇鏁伴噺锛�</text>
+					<input v-model="customAmount" class="inp bad-input" placeholder="璇疯緭鍏ユ暟閲�" />
+				</view>
+
+				<!-- 纭鎻愪氦鎸夐挳 -->
+				<view class="submit-section">
+					<button class="details-btn" @click="confirmCustomAmount">纭鎻愪氦</button>
 				</view>
 			</view>
 
-			<!-- 澶撮儴 -->
-			<view class="header-container">
-				<view class="header-title">
-					<text>鐢熶骇鏁版嵁缁熻</text>
-				</view>
-				<view class="header-right">
-					<view class="version-info-top">
-						<text>v1.0.6</text>
+			<!-- 閫変汉寮圭獥 -->
+			<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>
-					<button class="refresh-btn" @click="refresh">鍒锋柊</button>
-					<button v-if="isGeneratingBarcode" class="reset-btn" @click="resetGenerateState">閲嶇疆</button>
-				</view>
-			</view>
-
-			<!-- 鍩虹淇℃伅锛堢Щ闄� 鍥惧彿 / 鏉愯川 / 棰滆壊 琛岋級 -->
-			<view>
-				<view style="display:flex;flex-direction:column;">
-					<view class="form-row">
-						<view class="form-item">
-							<label>浜у搧缂栫爜:</label>
-							<input class="inp" type="text" v-model="order.daa002" disabled />
-						</view>
-						<view class="form-item">
-							<label>浜у搧鍚嶇О:</label>
-							<superwei-combox :candidates="DAA003List" v-model="order.daa003"
-											 @select="onDaa003Change" class="inp"></superwei-combox>
-						</view>
-						<view class="form-item">
-							<label>浜у搧瑙勬牸:</label>
-							<input class="inp" type="text" v-model="order.daa004" disabled />
+					<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>
-			</view>
-
-			<!-- 涓嶈壇鏁伴噺 -->
-			<view class="print-section" style="margin-top:20px;">
-				<view class="barcode-info">
-					<view class="user-select">
-						<text style="display:inline-block;float:left;margin-left:-11px;">涓嶈壇鏁伴噺锛�</text>
-						<input v-model="customAmount" class="inp"
-							   style="width:55%;height:70px;border:3px solid #808080;font-size:40px;text-align:center;margin-top:5px;"
-							   placeholder="璇疯緭鍏ユ暟閲�" />
-					</view>
-					<view class="user-select" style="margin-left:30px;">
-						<button class="details-btn" @click="confirmCustomAmount">纭鎻愪氦</button>
+					<view class="user-popup-footer">
+						<button class="clean-btn wide-btn" @click="isShowUserSelect = false">鍏抽棴</button>
 					</view>
 				</view>
 			</view>
 
-			<!-- 鎶ュ伐浜洪�夋嫨 -->
-			<view>
-				<view class="reason-section" style="margin-bottom:-16px">
-					<text>鎶ュ伐浜猴細</text>
-					<view class="reason-buttons" style="font-size:23px;">
-						<button v-for="(u,index) in users" :key="index"
-								:class="{'reason-btn':true,'selected': staffNo===u}"
-								@click="toggleUser(u)" v-text="u"></button>
-					</view>
-				</view>
-			</view>
-
-			<!-- 搴曢儴鎸夐挳 -->
-			<view class="bottom-section">
+			<!-- 绂佺敤鎸夐挳锛氣�樹繚瀛樺苟鐢熸晥'銆佲�樺彇娑堚�� -->
+			<!--<view class="bottom-section">
 				<button class="save-btn" @click="save">淇濆瓨骞剁敓鏁�</button>
 				<button class="cancel-btn" @click="cancel">鍙栨秷</button>
-			</view>
-
-			<!-- 涓嬮潰寮圭獥閫昏緫淇濈暀锛堝涓嶉渶瑕佸彲鍐嶅垹闄わ級 -->
+			</view>-->
+			<!-- 淇濈暀鏃у脊绐� -->
 			<view v-if="isShow" class="overlay">
 				<view class="popup">
 					<view class="bottom-section1">
@@ -143,7 +188,9 @@
 						<view class="reason-buttons">
 							<button v-for="(u,index) in users" :key="index"
 									:class="{'reason-btn':true,'selected': user===u}"
-									@click="toggleUser(u)" v-text="u"></button>
+									@click="toggleUser(u)">
+								{{ formatUser(u) }}
+							</button>
 						</view>
 					</view>
 				</view>
@@ -159,23 +206,13 @@
 							<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-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><button class="clean-btn" type="warn" @click="barcodeIsShow=false">鍏抽棴</button></view>
 				</view>
 			</view>
 		</view>
@@ -186,75 +223,52 @@
 	import { printTemplate3 } from "../utils/printTemplate";
 
 	export default {
-		props: {
-			orderNo: String,
-			orderId: Number,
-			machineNo: String
-		},
+		props: { orderNo: String, orderId: Number, machineNo: String },
 		data() {
 			return {
+				isShowUserSelect: false,
 				currentUser: '',
 				barcodeAmount: '',
-				users: [],
-				userForm: [],
-				staff: [],
-				user: {},
-				productionCount: 0,
-				printedCount: 0,
-				defectiveCount: 0,
-				order: {},
-				icount: 1,
-				bqty: 0,
-				sQuantity: 0,
-				kgQty: 0,
-				initialValue: 0,
-				qqty: 0,
-				ngStaid: 0,
-				bufferData: '',
-				dataToPrint: [],
-				isLoading: false,
-				but: false,
-				DAA003List: [],
-				lineList: [],
-				isShow: false,
-				barcodeIsShow: false,
-				barcodeList: [],
-				staffNo: '',
-				printStr: '',
-				printMac: '',
-				bluetoothSocket: {},
-				device: '',
-				uuid: '',
-				printNum: 1,
-				reportingList: [],
-				printLoading: false,
-				customAmount: '',
-				isGeneratingBarcode: false,
-				lastGenerateTime: 0,
-				generateRequestId: null,
-				nowTimeTimer: null,
-				nowTime: ''
-			};
+				users: [], userForm: [], staff: [], user: {},
+				productionCount: 0, printedCount: 0, defectiveCount: 0, order: {},
+				icount: 1, bqty: 0, sQuantity: 0, kgQty: 0, initialValue: 0, qqty: 0,
+				ngStaid: 0, bufferData: '', dataToPrint: [], isLoading: false, but: false,
+				DAA003List: [], lineList: [], isShow: false, barcodeIsShow: false, barcodeList: [],
+				staffNo: '', printStr: '', printMac: '', bluetoothSocket: {}, device: '', uuid: '',
+				printNum: 1, reportingList: [], printLoading: false, customAmount: '',
+				isGeneratingBarcode: false, lastGenerateTime: 0, generateRequestId: null,
+				nowTimeTimer: null, nowTime: '',
+				userSearch: '',
+				/* 鏂板锛氬巻鍙叉姤宸ヨ褰曟暟缁� */
+				reportingHistory: []
+			}
 		},
 		computed: {
-			calculatedCurrentCount() {
-				const production = this.productionCount || 0;
-				const initial = this.initialValue || 0;
-				return production - initial;
+			//鑹搧鏁板疄鏃惰绠�
+			realTimeDefectiveCount() {
+				// 浼樺厛鐢ㄨ緭鍏ユ鐨勫�硷紝鍚﹀垯鐢ㄦ帴鍙f暟鎹�
+				const val = Number(this.customAmount);
+				if (!isNaN(val) && this.customAmount !== '') return val;
+				return this.calculatedDefectiveCount;
 			},
-			calculatedTotalProduction() {
-				const kgQty = this.kgQty || 0;
-				const currentCount = this.calculatedCurrentCount;
-				return kgQty + currentCount;
+			realTimeOkCount() {
+				// 鑹搧鏁� = 鎶ュ伐鏁帮紙璁$畻锛� - 涓嶈壇鏁�
+				const total = (this.order.currentCjNum || 0) - (this.order.initCjNum || 0);
+				return total - this.realTimeDefectiveCount;
 			},
-			calculatedDefectiveCount() {
-				const totalProduction = this.calculatedTotalProduction;
-				const goodCount = this.sQuantity || 0;
-				return totalProduction - goodCount;
+			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;
 			},
-			planQtyDisplay() {
-				// 璁″垝鐢熶骇鏁板瓧娈典笉纭畾鏃跺厹搴�
-				return this.order.planQty || this.order.planQuantity || this.order.daa007 || this.order.daa010 || 0;
+			filteredUsers() {
+				if (!this.userSearch) return this.users;
+				const kw = this.userSearch.trim().toLowerCase();
+				return this.users.filter(u => u.toLowerCase().includes(kw));
 			}
 		},
 		created() {
@@ -263,54 +277,42 @@
 			this.init();
 			this.getXS0101();
 			this.updateNowTime();
-			this.nowTimeTimer = setInterval(this.updateNowTime, 60000);
+			// 绉掔骇鍒锋柊锛涘涓嶉渶鍔ㄦ�佽烦绉掑彲鏀逛负 60000
+			this.nowTimeTimer = setInterval(this.updateNowTime, 1000);
 		},
-		beforeDestroy() {
-			if (this.nowTimeTimer) clearInterval(this.nowTimeTimer);
-		},
+		beforeDestroy() { if (this.nowTimeTimer) clearInterval(this.nowTimeTimer); },
 		methods: {
+			formatUser(u) {
+				if (!u) return '';
+				const segs = u.split(':');
+				return segs.length > 1 ? `${segs[0]} ${segs[1]}` : u;
+			},
+			selectUser(u) { this.staffNo = u; this.isShowUserSelect = false; this.userSearch = ''; },
+			/* 淇敼锛氬鍔犵 */
 			updateNowTime() {
-				const d = new Date();
-				const pad = n => (n < 10 ? '0' + n : n);
-				this.nowTime = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
+				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 = 0;
-				this.printedCount = 0;
-				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;
+				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.isGeneratingBarcode = false; this.generateRequestId = null; this.lastGenerateTime = 0;
 				this.$showMessage("宸查噸缃潯鐮佺敓鎴愮姸鎬�");
 			},
 			refresh() {
 				this.$sendPostRequest({
-					url: "http://192.168.0.94:9095/Numerical/RefreshDev",
+					url: "http://192.168.0.94:9095/Numerical/RefreshDevBycl",
 					data: { machineNo: this.order.machineNo },
 					contentType: "application/json"
-				}).then(res1 => {
-					if (res1.code == 200) {
-						this.fetchData(true);
-					} else {
-						this.$showMessage("鍚屾澶辫触");
-					}
-				});
+				}).then(r => { r.code == 200 ? this.fetchData(true) : this.$showMessage("鍚屾澶辫触"); });
 			},
-			onDaa003Change(event) {
-				let orde = this.lineList[this.DAA003List.indexOf(event)];
-				this.orderId = orde.id;
-				this.orderNo = orde.daa001;
+			onDaa003Change(v) {
+				let o = this.lineList[this.DAA003List.indexOf(v)];
+				this.orderId = o.id; this.orderNo = o.daa001;
 				uni.setStorageSync('machine', this.machineNo);
 				uni.setStorageSync('orderId', this.orderId);
 				uni.setStorageSync('orderNo', this.orderNo);
@@ -320,108 +322,124 @@
 				if (!this.orderId && !this.orderNo) return;
 				this.getOrderById();
 				this.getWomdaaPrintById();
+				this.getReportingHistory(); // 鏂板锛氭瘡娆″埛鏂板悓姝ュ巻鍙�
 				if (flag) {
-					this.$post({
-						url: "/Womdaa/GetWomdaasByShow",
-						data: { machineNo: this.machineNo }
-					}).then(res => {
-						this.lineList = res.data.tbBillList;
-						this.DAA003List = res.data.tbBillList.map(item => item.daa003);
-					});
+					this.$post({ url: "/Womdaa/GetWomdaasByShow", data: { machineNo: this.machineNo } })
+						.then(res => {
+							this.lineList = res.data.tbBillList;
+							this.DAA003List = res.data.tbBillList.map(i => i.daa003);
+						});
 				}
 			},
-			toggleUser(user) {
-				if (!user) return;
-				this.user = this.user === user ? null : user;
+			/* 鏂板锛氳幏鍙栧巻鍙叉姤宸ヨ褰� */
+			/* 淇敼锛氳鑼冨巻鍙叉椂闂村埌绉� */
+			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 {
+							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 = []; });
+			},
+			toggleUser(u) {
+				if (!u) return;
+				this.user = this.user === u ? null : u;
 				this.staffNo = this.user;
 			},
+			//閫夋嫨鎶ュ伐浜�
 			confirmCustomAmount() {
-				if (!this.customAmount || isNaN(Number(this.customAmount))) {
-					this.$showMessage('璇疯緭鍏ユ湁鏁堢殑鏁伴噺');
-					return;
-				}
-				let amount = Number(this.customAmount);
+				if (!this.customAmount || isNaN(Number(this.customAmount))) { this.$showMessage('璇疯緭鍏ユ湁鏁堢殑鏁伴噺'); return; }
+				if (!this.staffNo) { this.$showMessage('璇烽�夋嫨鎶ュ伐浜�'); return; }
+				const staffNo = this.staffNo.split(':')[0];
+				const amount = Number(this.customAmount);
 				this.$post({
 					url: "/MesInvItemBarcodes/AddBFToBarcodes",
 					data: {
 						orderNo: this.orderNo,
 						orderId: this.orderId,
-						bf: amount
+						bf: amount,
+						staffNo: staffNo,
+						initCjNum: this.order.initCjNum,        // 鍒濆閲囬泦鏁�
+						currentCjNum: this.order.currentCjNum   // 鎶ュ伐鏃堕噰闆嗘暟
 					}
 				}).then(res => {
-					if (res.status == 1) {
-						this.$showMessage(res.message);
-						return;
-					}
+					if (res.status == 1) { this.$showMessage(res.message); return; }
 					this.$showMessage('鎶ュ簾鏁伴噺濉啓鎴愬姛');
-					this.fetchData(true);
+					this.fetchData(true); // 鑷姩鍒锋柊鍘嗗彶
 					this.customAmount = '';
-				}).catch(() => {
-					this.$showMessage('鎶ュ簾鏁伴噺濉啓澶辫触锛岃閲嶈瘯');
-				});
+				}).catch(() => this.$showMessage('鎶ュ簾鏁伴噺濉啓澶辫触锛岃閲嶈瘯'));
 			},
 			save() {
-				if (!this.staffNo) {
-					this.$showMessage('璇烽�夋嫨鎶ュ伐浜�');
-					return;
-				}
+				if (!this.staffNo) { this.$showMessage('璇烽�夋嫨鎶ュ伐浜�'); return; }
 				uni.showToast({ title: '淇濆瓨鎴愬姛', icon: 'success' });
+				this.getReportingHistory(); // 淇濆瓨鍚庝篃鍙埛鏂�
 			},
-			cancel() {
-				uni.showToast({ title: '鍙栨秷鎿嶄綔', icon: 'none' });
-			},
+			cancel() { uni.showToast({ title: '鍙栨秷鎿嶄綔', icon: 'none' }); },
 			getOrderById() {
-				this.$post({
-					url: "/Womdaa/GetWomdaaById",
-					data: { orderId: this.orderId, orderNo: this.orderNo }
-				}).then(res => {
-					this.order = res.data.tbBillList;
-					this.printedCount = res.data.tbBillList.bgqty;
-					this.defectiveCount = res.data.tbBillList.blQty;
-					this.productionCount = this.order.todayOutput || 0;
-					this.defectiveCount = this.defectiveCount || 0;
-					this.printedCount = this.printedCount || 0;
-				});
+				this.$post({ url: "/Womdaa/GetWomdaaById", data: { orderId: this.orderId, orderNo: this.orderNo } })
+					.then(res => {
+						this.order = res.data.tbBillList;
+						this.printedCount = res.data.tbBillList.bgqty || 0;
+						this.defectiveCount = res.data.tbBillList.blQty || 0;
+						this.productionCount = this.order.todayOutput || 0;
+					});
 			},
 			getXS0101() {
-				this.$post({ url: "/MesStaff/GetAllXS0101" }).then(res => {
-					this.staff = res.data.tbBillList;
-					this.users = this.staff.map(s => s.staffNo + ":" + s.staffName);
-				});
+				this.$post({ url: "/MesStaff/GetAllXS0101" })
+					.then(res => {
+						this.staff = res.data.tbBillList;
+						this.users = this.staff.map(s => s.staffNo + ":" + s.staffName);
+					});
 			},
 			getWomdaaPrintById() {
-				this.$post({
-					url: "/Womdaa/GetWomdaaPrintById",
-					data: { orderId: this.orderId }
-				}).then(res => {
-					if (!res || !res.data || !res.data.tbBillList) return;
-					const data = res.data.tbBillList;
-					this.bqty = data.bqty;
-					this.icount = 1;
-					this.sQuantity = data.sQuantity || 0;
-					this.initialValue = data.initialValue || 0;
-					this.kgQty = data.kgQty || 0;
-					this.barcodeAmount = data.qqty || 0;
-					if (this.bqty === 0) this.Completed();
-				}).catch(() => { });
+				this.$post({ url: "/Womdaa/GetWomdaaPrintById", data: { orderId: this.orderId } })
+					.then(res => {
+						if (!res?.data?.tbBillList) return;
+						const d = res.data.tbBillList;
+						this.bqty = d.bqty;
+						this.icount = 1;
+						this.sQuantity = d.sQuantity || 0;
+						this.initialValue = d.initialValue || 0;
+						this.kgQty = d.kgQty || 0;
+						this.barcodeAmount = d.qqty || 0;
+						if (this.bqty === 0) this.Completed();
+					}).catch(() => { });
 			},
 			Completed() {
-				this.$post({
-					url: "/MesOrderSta/Completed",
-					data: { orderId: this.orderId, orderNo: this.orderNo }
-				});
+				this.$post({ url: "/MesOrderSta/Completed", data: { orderId: this.orderId, orderNo: this.orderNo } });
 			},
 			init() {
 				try {
-					const androidVersion = this.getAndroidVersion();
-					if (androidVersion >= 12) this.initForAndroid12Plus(); else this.initForAndroidLegacy();
+					const v = this.getAndroidVersion();
+					v >= 12 ? this.initForAndroid12Plus() : this.initForAndroidLegacy();
 				} catch (e) { console.error(e); }
 			},
 			getAndroidVersion() {
-				try {
-					var Build = plus.android.importClass("android.os.Build");
-					return Build.VERSION.SDK_INT;
-				} catch { return 30; }
+				try { var Build = plus.android.importClass("android.os.Build"); return Build.VERSION.SDK_INT; }
+				catch { return 30; }
 			},
 			initForAndroid12Plus() {
 				try {
@@ -430,18 +448,16 @@
 					var Context = plus.android.importClass("android.content.Context");
 					var UUID = plus.android.importClass("java.util.UUID");
 					this.uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
-					var bluetoothManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
-					var bluetoothAdapter = bluetoothManager.getAdapter();
-					if (bluetoothAdapter && bluetoothAdapter.isDiscovering()) bluetoothAdapter.cancelDiscovery();
+					var mgr = main.getSystemService(Context.BLUETOOTH_SERVICE);
+					var adp = mgr.getAdapter();
+					if (adp && adp.isDiscovering()) adp.cancelDiscovery();
 					this.printMac = uni.getStorageSync('printMac');
-					var address_mac = this.printMac ? this.printMac : "DC:1D:30:91:06:52";
-					if (bluetoothAdapter) {
-						this.device = bluetoothAdapter.getRemoteDevice(address_mac);
+					var mac = this.printMac || "DC:1D:30:91:06:52";
+					if (adp) {
+						this.device = adp.getRemoteDevice(mac);
 						plus.android.importClass(this.device);
 					}
-				} catch (e) {
-					this.initForAndroidLegacy();
-				}
+				} catch (e) { this.initForAndroidLegacy(); }
 			},
 			initForAndroidLegacy() {
 				try {
@@ -451,9 +467,9 @@
 					var BAdapter = BluetoothAdapter.getDefaultAdapter();
 					if (BAdapter) BAdapter.cancelDiscovery();
 					this.printMac = uni.getStorageSync('printMac');
-					var address_mac = this.printMac ? this.printMac : "DC:1D:30:91:06:52";
+					var mac = this.printMac || "DC:1D:30:91:06:52";
 					if (BAdapter) {
-						this.device = BAdapter.getRemoteDevice(address_mac);
+						this.device = BAdapter.getRemoteDevice(mac);
 						plus.android.importClass(this.device);
 						this.bluetoothSocket = this.device.createInsecureRfcommSocketToServiceRecord(this.uuid);
 						plus.android.importClass(this.bluetoothSocket);
@@ -464,281 +480,598 @@
 				this.isShow = false;
 				this.isGeneratingBarcode = false;
 				this.generateRequestId = null;
-				this.bufferData = '';
-				this.dataToPrint = [];
-				this.staffNo = null;
-				this.user = '';
-				this.barcodeAmount = '';
-				this.icount = 1;
-				this.staff = null;
+				this.bufferData = ''; this.dataToPrint = [];
+				this.staffNo = null; this.user = ''; this.barcodeAmount = ''; this.icount = 1; this.staff = null;
 			}
 		}
-	};
+	}
 </script>
 
 <style scoped>
-	.page {
-		padding: 2vh;
-		display: flex;
-		flex-direction: column;
-		justify-content: space-between;
-		box-sizing: border-box;
-	}
+    .section-title {
+        font-size: 20px;
+        font-weight: bold;
+        margin: 18px 0 8px 0;
+        color: #fff;
+        background: #007aff;
+        padding: 8px 18px;
+        border-radius: 8px 8px 0 0;
+        display: inline-block;
+    }
 
-	.report-table-wrapper {
-		margin-bottom: 20px;
-	}
+    .history-title {
+        background: #555;
+    }
 
-	.report-title {
-		font-size: 26px;
-		font-weight: 600;
-		text-align: center;
-		margin-bottom: 10px;
-	}
+    .highlight-row {
+        background: #ffe9b3 !important;
+        font-weight: bold;
+    }
 
-	.report-table {
-		width: 100%;
-		border-collapse: collapse;
-		font-size: 14px;
-		background: #fff;
-	}
+    .report-table .summary-row {
+        background: #f0f8ff;
+        font-weight: 600;
+    }
 
-		.report-table th, .report-table td {
-			border: 1px solid #555;
-			padding: 6px;
-			text-align: center;
-			white-space: nowrap;
-		}
+    .report-table .no-data {
+        text-align: center;
+        color: #777;
+        font-size: 14px;
+    }
 
-	.refresh-btn {
-		float: right;
-		background-color: #00A2E9;
-		color: #fff;
-		border: none;
-		font-size: 32px;
-		border-radius: 15px;
-		margin-top: -32px;
-		margin-bottom: 49px;
-		padding: 0 25px;
-	}
+    .report-header {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin-bottom: 8px;
+    }
 
-	.status-section {
-		display: flex;
-		flex-direction: column;
-		margin-bottom: 3vh;
-		padding-top: 14px;
-	}
+    .header-buttons {
+        display: flex;
+        align-items: center;
+        gap: 12px;
+    }
 
-	.status-row {
-		display: flex;
-		justify-content: flex-start;
-		align-items: center;
-		margin-bottom: 20px;
-		background-color: #f9f9f9;
-		padding: 15px;
-		border-radius: 8px;
-		box-shadow: 0 1px 3px rgba(0,0,0,.05);
-	}
+    .refresh-btn-header {
+        background: #00A2E9;
+        color: #fff;
+        border: none;
+        font-size: 16px;
+        border-radius: 8px;
+        padding: 8px 20px;
+        transition: background 0.15s;
+    }
 
-	.status-box {
-		display: flex;
-		align-items: center;
-		padding: 0 10px;
-	}
+        .refresh-btn-header:hover {
+            background: #0086c0;
+        }
 
-	.result-box {
-		background-color: #f0f8ff;
-		padding: 5px 15px;
-		border-radius: 6px;
-		border-left: 4px solid #007aff;
-	}
+    .reset-btn-header {
+        background: #ff6b6b;
+        color: #fff;
+        border: none;
+        font-size: 14px;
+        border-radius: 8px;
+        padding: 8px 16px;
+        transition: background 0.15s;
+    }
 
-	input.highlight {
-		width: 10vw;
-		font-weight: 700;
-		border: none;
-		background-color: #fff;
-		text-align: center;
-		font-size: 1.5vw;
-		padding: 8px;
-		border-radius: 4px;
-		box-shadow: inset 0 1px 3px rgba(0,0,0,.1);
-	}
+        .reset-btn-header:hover {
+            background: #e94d4d;
+        }
 
-	.operator-box {
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		font-size: 36px;
-		font-weight: bold;
-		margin: 0 15px;
-		color: #007aff;
-		width: 40px;
-		height: 40px;
-	}
+    .page {
+        padding: 1.2vh 2vw;
+        display: flex;
+        flex-direction: column;
+        box-sizing: border-box;
+    }
 
-	.header-container {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-bottom: 20px;
-		padding: 10px 15px;
-		background-color: #f2f2f2;
-		border-radius: 10px;
-		box-shadow: 0 2px 5px rgba(0,0,0,.1);
-	}
+    .wide-layout {
+        max-width: none;
+        width: 100%;
+    }
 
-	.header-title {
-		font-size: 24px;
-		font-weight: bold;
-		color: #333;
-	}
+    .page.has-overlay .status-section > :not(.overlay) {
+        pointer-events: none;
+    }
 
-	.version-info-top {
-		font-size: 13px;
-		color: #666;
-		margin-right: 10px;
-	}
+    .page.has-overlay .status-section > .overlay {
+        pointer-events: auto;
+    }
 
-	.inp {
-		width: 65%;
-		padding: 1vh;
-		margin-top: -13px;
-		font-size: 1.3vw;
-		border: 1px solid #808080;
-		border-radius: .5vw;
-		box-sizing: border-box;
-	}
+    .report-table-wrapper {
+        width: 100%;
+        max-width: none;
+    }
 
-	.form-row {
-		display: flex;
-		justify-content: space-between;
-		margin-bottom: 3vh;
-		flex-wrap: nowrap;
-	}
+    .table-scroll {
+        width: 100%;
+        overflow-x: scroll !important;
+        min-height: 40px;
+    }
 
-	.form-item {
-		width: 30%;
-	}
+    .report-title {
+        font-size: 32px;
+        font-weight: 600;
+        text-align: center;
+        margin: 0;
+    }
 
-	.print-section {
-		padding: 1vh;
-		border-radius: 1vw;
-		margin-bottom: 2vh;
-		display: flex;
-		flex-wrap: wrap;
-		align-items: center;
-	}
+    /* 2. 鍖哄潡鏍囬 */
+    .section-title, .history-title {
+        font-size: 26px;
+    }
 
-	.barcode-info {
-		display: flex;
-		align-items: flex-start;
-		gap: 2vw;
-	}
+    /* 3. 琛ㄦ牸瀛椾綋 */
+    .report-table, .report-table th, .report-table td {
+        font-size: 22px;
+    }
 
-	.details-btn {
-		display: inline-block;
-		padding: 1.5vh;
-		background-color: #00a2e9;
-		color: #fff;
-		font-size: 1.5vw;
-		border: none;
-		cursor: pointer;
-		border-radius: 1vw;
-	}
+    /* 4. 褰撳墠鎶ュ伐浜恒�佷笉鑹暟閲忕瓑杈撳叆鍖� */
+    .current-user-section,
+    .defective-section,
+    .submit-section {
+        font-size: 30px;
+    }
 
-	.reason-section {
-		margin-bottom: 3vh;
-	}
+    /* 5. 杈撳叆妗嗗瓧浣� */
+    .inp, .bad-input {
+        font-size: 28px;
+    }
 
-	.reason-buttons {
-		display: grid;
-		grid-template-columns: repeat(5,1fr);
-		gap: 1vw;
-	}
+    /* 6. 鎸夐挳瀛椾綋 */
+    .details-btn,
+    .select-user-btn,
+    .refresh-btn-header,
+    .reset-btn-header {
+        font-size: 22px;
+    }
 
-	.reason-btn {
-		padding: .5vh;
-		background-color: #808080;
-		color: #fff;
-		font-size: 1.3vw;
-		border: none;
-		border-radius: .5vw;
-		cursor: pointer;
-	}
+    .report-table {
+        width: 100%;
+        min-width: 1800px;
+        border-collapse: collapse;
+        background: #fff;
+    }
 
-		.reason-btn.selected {
-			background-color: #FFD700;
-			color: #000;
-		}
+        .report-table th, .report-table td {
+            border: 1px solid #555;
+            padding: 6px 8px;
+            text-align: center;
+            white-space: nowrap;
+        }
 
-	.bottom-section {
-		display: flex;
-		justify-content: space-between;
-		margin-top: 2vh;
-	}
+    .status-section {
+        display: flex;
+        flex-direction: column;
+        gap: 10px;
+    }
 
-	.save-btn, .cancel-btn {
-		width: 48%;
-		padding: 1.5vh;
-		background-color: #00A2E9;
-		color: #fff;
-		font-size: 1.5vw;
-		border: none;
-		text-align: center;
-		cursor: pointer;
-		border-radius: .5vw;
-	}
+    .status-row {
+        display: flex;
+        flex-wrap: wrap;
+        align-items: center;
+        gap: 10px;
+        background: #f9f9f9;
+        padding: 10px 14px;
+        border-radius: 8px;
+        box-shadow: 0 1px 4px rgba(0,0,0,.06);
+    }
 
-	.overlay {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		background-color: rgba(0,0,0,.5);
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
+    .status-box {
+        display: flex;
+        align-items: center;
+    }
 
-	.popup {
-		background-color: #fff;
-		padding: 2vh;
-		border: 1px solid #ccc;
-		box-shadow: 0 0 10px rgba(0,0,0,.1);
-		width: 70vw;
-		height: 70vh;
-		font-size: 1.6vw;
-		max-height: 80vh;
-		overflow-y: auto;
-		border-radius: 8px;
-	}
+    .result-box {
+        background: #f0f8ff;
+        padding: 4px 12px;
+        border-radius: 6px;
+        border-left: 5px solid #007aff;
+    }
 
-	.clean-btn {
-		width: 48%;
-		padding: 1.5vh;
-		color: #fff;
-		font-size: 1.5vw;
-		border: none;
-		text-align: center;
-		cursor: pointer;
-		border-radius: .5vw;
-		background-color: #007aff;
-	}
+    input.highlight {
+        width: 9vw;
+        min-width: 110px;
+        font-weight: 600;
+        border: none;
+        background: #fff;
+        text-align: center;
+        font-size: 18px;
+        padding: 6px 0;
+        border-radius: 6px;
+        box-shadow: inset 0 1px 3px rgba(0,0,0,.12);
+    }
 
-	.table1 {
-		width: 100%;
-		border-spacing: 3px;
-	}
+    .operator-box {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        font-size: 28px;
+        font-weight: bold;
+        color: #007aff;
+        margin: 0 6px;
+    }
 
-	.reset-btn {
-		background-color: #ff6b6b;
-		color: #fff;
-		border: none;
-		font-size: 18px;
-		border-radius: 6px;
-		padding: 8px 15px;
-		margin-left: 10px;
-	}
+    .btn-group {
+        margin-left: auto;
+        display: flex;
+        align-items: center;
+        gap: 12px;
+    }
+
+    .refresh-btn-inline, .reset-btn-inline {
+        transition: .15s;
+    }
+
+    .refresh-btn-inline {
+        background: #00A2E9;
+        color: #fff;
+        font-size: 18px;
+        border-radius: 10px;
+        padding: 8px 30px;
+        border: none;
+    }
+
+        .refresh-btn-inline:hover {
+            background: #0086c0;
+        }
+
+    .reset-btn-inline {
+        background: #ff6b6b;
+        color: #fff;
+        font-size: 16px;
+        border-radius: 10px;
+        padding: 8px 18px;
+        border: none;
+    }
+
+        .reset-btn-inline:hover {
+            background: #e94d4d;
+        }
+
+    .flex-row {
+        display: flex;
+        flex-wrap: wrap;
+        gap: 20px;
+        align-items: stretch;
+    }
+
+    .flex-grow {
+        flex: 1 1 540px;
+    }
+
+    .gap-lg {
+        gap: 30px;
+    }
+
+    /* 涓嶈壇鏁伴噺鍖哄煙 */
+    .defective-section {
+        display: flex;
+        align-items: center;
+        gap: 14px;
+        font-size: 32px;
+    }
+
+    .submit-section {
+        display: flex;
+        align-items: center;
+    }
+
+    .inp {
+        padding: 8px;
+        font-size: 16px;
+        border: 1px solid #808080;
+        border-radius: 8px;
+        box-sizing: border-box;
+    }
+
+    /* 涓嶈壇鏁伴噺杈撳叆妗� */
+    .bad-input {
+        width: 320px;
+        max-width: 100%;
+        height: 66px;
+        border: 3px solid #808080;
+        font-size: 42px;
+        text-align: center;
+    }
+
+    /* 纭鎻愪氦鎸夐挳*/
+    .details-btn {
+        padding: 12px 34px;
+        background: #00a2e9;
+        color: #fff;
+        font-size: 32px;
+        border: none;
+        cursor: pointer;
+        border-radius: 12px;
+    }
+
+        .details-btn:hover {
+            background: #008ac2;
+        }
+
+    .current-user-section {
+        display: flex;
+        align-items: center;
+        font-size: 32px;
+        border: 1.5px solid #f00;
+        border-radius: 10px;
+        padding: 14px 22px;
+        background: #fff;
+        gap: 14px;
+        flex: 0 0 auto;
+    }
+
+    .current-user-name {
+        font-weight: bold;
+        font-size: 32px;
+    }
+
+    .select-user-btn {
+        padding: 6px 22px;
+        background: #eee;
+        border: 1px solid #aaa;
+        border-radius: 8px;
+        font-size: 24px;
+    }
+
+        .select-user-btn:hover {
+            background: #ddd;
+        }
+
+    .overlay {
+        position: fixed;
+        top: 0;
+        left: 0;
+        width: 100%;
+        height: 100%;
+        background: rgba(0,0,0,.45);
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        z-index: 1000;
+    }
+
+    .popup {
+        background: #fff;
+        padding: 2vh;
+        border: 1px solid #ccc;
+        box-shadow: 0 0 14px rgba(0,0,0,.12);
+        width: 72vw;
+        max-width: 1400px;
+        height: 70vh;
+        font-size: 1.4vw;
+        max-height: 80vh;
+        overflow-y: auto;
+        border-radius: 12px;
+        z-index: 1001;
+    }
+
+    /* 閫変汉寮圭獥鏇村锛屽悕瀛楁洿澶э紝鍏抽棴鎸夐挳鏇村皬 */
+    .user-select-popup {
+        width: 1600px;
+        max-width: 99vw;
+        min-width: 1000px;
+        height: auto;
+        min-height: 520px;
+        padding: 0;
+        display: flex;
+        flex-direction: column;
+        font-size: 32px;
+    }
+
+    .user-search-bar {
+        display: flex;
+        align-items: center;
+        gap: 18px;
+        padding: 24px 64px 0 64px;
+        background: #fff;
+        flex-wrap: wrap;
+    }
+
+    .user-search-input {
+        flex: 1 1 260px;
+        padding: 16px 20px;
+        font-size: 28px;
+        border: 1px solid #bbb;
+        border-radius: 8px;
+        outline: none;
+        height: 54px;
+    }
+
+        .user-search-input:focus {
+            border-color: #007aff;
+            box-shadow: 0 0 0 2px rgba(0,122,255,.15);
+        }
+
+    .user-search-clear {
+        padding: 12px 28px;
+        background: #ff9f43;
+        color: #fff;
+        border: none;
+        border-radius: 8px;
+        font-size: 24px;
+        cursor: pointer;
+    }
+
+        .user-search-clear:hover {
+            background: #ff8920;
+        }
+
+    .user-search-info {
+        font-size: 22px;
+        color: #555;
+    }
+
+    .user-list-scroll {
+        flex: 1 1 auto;
+        overflow-y: auto;
+        padding: 32px 64px 0 64px;
+    }
+
+    .user-list-grid {
+        display: grid;
+        grid-template-columns: repeat(auto-fill,minmax(200px,1fr));
+        gap: 22px 22px;
+    }
+
+    .user-list-btn {
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+        gap: 2px; /* 鍘�8px锛屽噺灏忚闂磋窛 */
+        padding: 10px 10px; /* 閫傚綋鍑忓皬涓婁笅鍐呰竟璺� */
+        height: 100px; /* 鍙�傚綋鍑忓皬楂樺害 */
+        font-size: 30px;
+        background: #00a2e9;
+        color: #fff;
+        border: none;
+        border-radius: 8px;
+        cursor: pointer;
+        box-sizing: border-box;
+        word-break: break-word;
+    }
+
+        .user-list-btn .user-code {
+            font-weight: 700;
+            font-size: 36px;
+            line-height: 1.1; /* 绱у噾涓�鐐� */
+        }
+
+        .user-list-btn .user-name {
+            font-size: 32px;
+            line-height: 1.1; /* 绱у噾涓�鐐� */
+        }
+
+        .user-list-btn.selected {
+            background: #0072c9;
+            box-shadow: 0 0 0 3px rgba(255,255,255,.6) inset;
+        }
+
+        .user-list-btn:hover {
+            background: #008ed0;
+        }
+
+    .no-user-result {
+        padding: 40px 0;
+        text-align: center;
+        font-size: 28px;
+        color: #666;
+    }
+
+    .user-popup-footer {
+        flex-shrink: 0;
+        padding: 24px 64px 32px 64px;
+        background: #fff;
+        text-align: center;
+    }
+
+    .clean-btn {
+        width: 24%;
+        padding: 10px 0;
+        color: #fff;
+        font-size: 20px;
+        border: none;
+        text-align: center;
+        cursor: pointer;
+        border-radius: 0.6vw;
+        background: #007aff;
+    }
+
+        .clean-btn.wide-btn {
+            width: 30%;
+            font-size: 22px;
+            padding: 12px 0;
+        }
+
+        .clean-btn:hover {
+            background: #0062c9;
+        }
+
+    .reason-section {
+        margin: 14px 0 18px;
+    }
+
+    .reason-buttons {
+        display: grid;
+        grid-template-columns: repeat(5,1fr);
+        gap: 12px;
+    }
+
+    .reason-btn {
+        padding: 10px 6px;
+        background: #808080;
+        color: #fff;
+        font-size: 14px;
+        border: none;
+        border-radius: 8px;
+        cursor: pointer;
+    }
+
+        .reason-btn.selected {
+            background: #FFD700;
+            color: #000;
+        }
+
+    .bottom-section {
+        display: flex;
+        justify-content: space-between;
+        margin-top: 16px;
+        gap: 16px;
+    }
+
+    .save-btn, .cancel-btn {
+        flex: 1;
+        padding: 16px 0;
+        background: #00A2E9;
+        color: #fff;
+        font-size: 20px;
+        border: none;
+        border-radius: 10px;
+    }
+
+        .save-btn:hover, .cancel-btn:hover {
+            background: #0086c0;
+        }
+
+    .table1 {
+        width: 100%;
+        border-spacing: 3px;
+    }
+
+    @media (max-width:1400px) {
+        input.highlight {
+            font-size: 16px;
+        }
+
+        .user-list-btn {
+            height: 70px;
+            font-size: 18px;
+        }
+
+            .user-list-btn .user-code {
+                font-size: 18px;
+            }
+
+            .user-list-btn .user-name {
+                font-size: 16px;
+            }
+
+        .reason-btn {
+            font-size: 12px;
+        }
+
+        .refresh-btn-header {
+            font-size: 14px;
+            padding: 6px 16px;
+        }
+
+        .reset-btn-header {
+            font-size: 12px;
+            padding: 6px 12px;
+        }
+    }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3