From 4a9c0f7ddb5eae77b1f833bd2223e33fe6bb2918 Mon Sep 17 00:00:00 2001
From: xwt <2740516069@qq.com>
Date: 星期四, 30 十月 2025 12:41:24 +0800
Subject: [PATCH] XJ,SJ,RKJ序号排序,LLJ单个检验项目FTP附件

---
 pages/QC/LLJ/Add.vue | 2477 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 2,182 insertions(+), 295 deletions(-)

diff --git a/pages/QC/LLJ/Add.vue b/pages/QC/LLJ/Add.vue
index 4492c63..a53dc0a 100644
--- a/pages/QC/LLJ/Add.vue
+++ b/pages/QC/LLJ/Add.vue
@@ -1,14 +1,14 @@
 <template>
 	<view class="inspection-sheet">
-		<!-- 澶撮儴淇℃伅 -->
-		<view class="sheet-header">
-			<h1>鏉ユ枡妫�楠屽崟</h1>
-			<view class="inspection-number">妫�楠屽崟鍙凤細{{formData.releaseNo}}</view>
-			<!--瀹為獙瀹ら�佹 -->
-			<view style="text-align: right;" class="action-buttons">
-				<a class="sysLike" v-if="this.current" @click="toSysSubmitFrom(formData.releaseNo)">瀹為獙瀹ら�佹</a>
+			<!-- 澶撮儴淇℃伅 -->
+			<view class="sheet-header">
+				<h1>鏉ユ枡妫�楠屽崟</h1>
+				<view class="inspection-number">妫�楠屽崟鍙凤細{{formData.releaseNo}}</view>
+				<!--瀹為獙瀹ら�佹 -->
+				<view style="text-align: right;" class="action-buttons">
+					<a class="sysLike" v-if="this.current" @click="toSysSubmitFrom(formData.releaseNo)">瀹為獙瀹ら�佹</a>
+				</view>
 			</view>
-		</view>
 
 		<!-- 鍩烘湰淇℃伅鍖� -->
 		<view class="basic-info">
@@ -56,10 +56,6 @@
 				<view class="info-label">涓嶈壇鎻忚堪锛�</view>
 				<view class="info-value">{{formData.fngDesc}}</view>
 			</view>
-			<view class="info-block" v-if="formData.newFngDesc!=null">
-				<view class="info-label">涓婃涓嶈壇锛�</view>
-				<view class="info-value">{{formData.newFngDesc}}</view>
-			</view>
 		</view>
 		<view class="dropdown-row">
 			<view class="info-label">涓嶈壇鍘熷洜锛�</view>
@@ -86,16 +82,17 @@
 		    <view class="info-label">澶囨敞锛�</view>
 		    <input type="text" id="lotNo1" v-model="formData.lotNo1" 
 		                       placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�" 
-		                       style="color: red; font-weight: bold;"/> 
+		                       style="color: red; font-weight: bold; background-color: #fff !important; -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; pointer-events: auto !important; opacity: 1 !important; z-index: 1 !important;"/> 
 		</view>
 		<view class="info-block" style="margin-top: 10px;">   
 		    <view class="info-label">鐮村潖瀹為獙鏁伴噺锛�</view>
-		    <view class="info-value highlight">{{formData.phsy}}</view>
+		    <view class="info-value highlight">{{formData.PHSY || formData.phsy || ''}}</view>
 		</view>
 
 		<!-- 琛ㄥ崟涓婃柟鎿嶄綔鎸夐挳鍖� -->
 		<view class="top-action-buttons">
 			<button class="action-btn" @click="getInspectionItems" v-if="this.current">鑾峰彇妫�楠岄」鐩�</button>
+			<button class="action-btn" @click="openGlobalBlockHoleDialog" v-if="this.current">鍫电┐璁剧疆</button>
 			<button class="action-btn" @click="handleEmergencyRelease" v-if="this.current">绱ф�ユ斁琛�</button>
 			<button class="action-btn" @click="handleWithdraw" v-if="this.current">鎾ゅ洖</button>
 		</view>
@@ -150,7 +147,7 @@
 				<form>
 					<view class="form-group">
 						<label class="form-label">涓嶅悎鏍兼弿杩�:</label>
-						<input class="form-input" type="text" v-model="remarks" />
+						<input class="info-input" type="text" v-model="remarks" placeholder="璇疯緭鍏ヤ笉鍚堟牸鎻忚堪" />
 					</view>
 
 				</form>
@@ -160,19 +157,190 @@
 		</view>
 		
 		<view v-if="destructionPopup" class="overlay">
-			<view class="popup">
-				<h3>鐮村潖瀹為獙鏁伴噺</h3>
-				<form>
-					<view class="form-group">
-						<label class="form-label">鐮村潖瀹為獙鏁伴噺:</label>
-						<input class="form-input" type="text" v-model="PHSY" placeholder="鐣欑┖琛ㄧず娓呴櫎鏁伴噺" />
+			<view class="popup destruction-popup">
+				<h3>鐮村潖瀹為獙</h3>
+				
+				<!-- 绗竴姝ワ細鎵弿浜岀淮鐮侊紙鏃犺褰曟椂鏄剧ず锛� -->
+				<view v-if="!hasExistingRecord && !scannedMaterialInfo" class="scan-step">
+					<view class="scan-icon">馃摲</view>
+					<view class="scan-title">鎵弿鐗╂枡浜岀淮鐮�</view>
+					<view class="scan-description">璇锋壂鎻忚鐢ㄤ簬鐮村潖瀹為獙鐨勭墿鏂欐潯鐮�</view>
+					<view class="scan-actions">
+						<button class="scan-btn" @click="scanQRCode">寮�濮嬫壂鎻�</button>
+						<button class="destruction-btn cancel-btn" @click="closeDestructionPopup">杩斿洖</button>
 					</view>
-				</form>
-				<div v-if="!isInteger" class="error-message">璇疯緭鍏ユ暣鏁板�兼垨鐣欑┖</div>
-				<button class="updateBut" @click="editDestruction">淇敼</button>
-				<button @click="clearDestruction">娓呴櫎</button>
-				<button @click="destructionPopup = !destructionPopup">鍙栨秷</button>
+				</view>
+				
+				<!-- 绗簩姝ワ細鏄剧ず鎵弿缁撴灉鍜岃緭鍏ユ暟閲忥紙鏃犺褰曟椂鎵弿鍚庢樉绀猴級 -->
+				<view v-if="!hasExistingRecord && scannedMaterialInfo" class="result-step">
+					<view class="scan-success-icon">鉁�</view>
+					<view class="scan-success-title">鎵弿鎴愬姛</view>
+					
+					<!-- 鏄剧ず鎵弿鍒扮殑鐗╂枡淇℃伅 -->
+					<view class="material-info-display">
+						<view class="material-detail">
+							<view class="detail-row">
+								<span class="detail-label">鎵弿鏉$爜:</span>
+								<span class="detail-value barcode-value">{{ scannedMaterialInfo.itemBarcode || scannedMaterialInfo.itemNo }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鐗╂枡缂栫爜:</span>
+								<span class="detail-value">{{ scannedMaterialInfo.itemNo }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鐗╂枡鍚嶇О:</span>
+								<span class="detail-value">{{ scannedMaterialInfo.itemName }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">瑙勬牸鍨嬪彿:</span>
+								<span class="detail-value">{{ scannedMaterialInfo.itemModel }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鍒拌揣鍗曞彿:</span>
+								<span class="detail-value">{{ scannedMaterialInfo.billNo }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鍙敤鏁伴噺:</span>
+								<span class="detail-value">{{ scannedMaterialInfo.oldQty }}</span>
+							</view>
+						</view>
+					</view>
+					
+					<!-- 閲嶆柊璁捐鐨勮緭鍏ュ尯鍩� -->
+					<view class="input-section">
+						<view class="input-title">鐮村潖瀹為獙鏁伴噺</view>
+						<view class="input-container">
+							<view class="input-box" @click="focusInput">
+								<text v-if="destructionQuantity" class="input-value">{{ destructionQuantity }}</text>
+								<text v-else class="input-placeholder">鐐瑰嚮杈撳叆鏁伴噺</text>
+							</view>
+						</view>
+						<view v-if="!isInteger && destructionQuantity" class="error-tip">璇疯緭鍏ユ湁鏁堢殑姝f暣鏁�</view>
+					</view>
+					
+					<!-- 鎿嶄綔鎸夐挳 -->
+					<view class="destruction-actions">
+						<!-- 鏃犺褰曟椂鏄剧ず锛氱‘璁ゃ�佷慨鏀广�佸垹闄ゃ�佽繑鍥� -->
+						<template v-if="!hasExistingRecord">
+							<button class="destruction-btn confirm-btn" @click="confirmDestruction" :disabled="!isInteger || !destructionQuantity">纭</button>
+							<button class="destruction-btn modify-btn" @click="modifyDestruction">淇敼</button>
+							<button class="destruction-btn delete-btn" @click="deleteDestruction">鍒犻櫎</button>
+							<button class="destruction-btn cancel-btn" @click="resetDestruction">杩斿洖</button>
+						</template>
+						<!-- 鏈夎褰曟椂鏄剧ず锛氫慨鏀广�佸垹闄ゃ�佽繑鍥� -->
+						<template v-else>
+							<button class="destruction-btn modify-btn" @click="modifyDestruction">淇敼</button>
+							<button class="destruction-btn delete-btn" @click="deleteDestruction">鍒犻櫎</button>
+							<button class="destruction-btn cancel-btn" @click="resetDestruction">杩斿洖</button>
+						</template>
+					</view>
+				</view>
+				
+				<!-- 绗笁姝ワ細鏄剧ず宸叉湁璁板綍淇℃伅锛堟湁璁板綍鏃舵樉绀猴紝澶嶇敤鎵弿缁撴灉鐣岄潰锛� -->
+				<view v-if="hasExistingRecord" class="result-step">
+					<view class="scan-success-icon">鉁�</view>
+					<view class="scan-success-title">鎵弿鎴愬姛</view>
+					
+					<!-- 鏄剧ず鎵弿鍒扮殑鐗╂枡淇℃伅 -->
+					<view class="material-info-display">
+						<view class="material-detail">
+							<view class="detail-row">
+								<span class="detail-label">鎵弿鏉$爜:</span>
+								<span class="detail-value barcode-value">{{ (scannedMaterialInfo && scannedMaterialInfo.itemBarcode) || (scannedMaterialInfo && scannedMaterialInfo.itemNo) || '' }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鐗╂枡缂栫爜:</span>
+								<span class="detail-value">{{ (scannedMaterialInfo && scannedMaterialInfo.itemNo) || '' }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鐗╂枡鍚嶇О:</span>
+								<span class="detail-value">{{ (scannedMaterialInfo && scannedMaterialInfo.itemName) || '' }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">瑙勬牸鍨嬪彿:</span>
+								<span class="detail-value">{{ (scannedMaterialInfo && scannedMaterialInfo.itemModel) || '' }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鍒拌揣鍗曞彿:</span>
+								<span class="detail-value">{{ (scannedMaterialInfo && scannedMaterialInfo.billNo) || formData.lotNo }}</span>
+							</view>
+							<view class="detail-row">
+								<span class="detail-label">鍙敤鏁伴噺:</span>
+								<span class="detail-value">{{ (scannedMaterialInfo && scannedMaterialInfo.oldQty) || '0' }}</span>
+							</view>
+						</view>
+					</view>
+					
+					<!-- 閲嶆柊璁捐鐨勮緭鍏ュ尯鍩� -->
+					<view class="input-section">
+						<view class="input-title">鐮村潖瀹為獙鏁伴噺</view>
+						<view class="input-container">
+							<view class="input-box" @click="focusInput">
+								<text v-if="destructionQuantity" class="input-value">{{ destructionQuantity }}</text>
+								<text v-else class="input-placeholder">鐐瑰嚮杈撳叆鏁伴噺</text>
+							</view>
+						</view>
+						<view v-if="!isInteger && destructionQuantity" class="error-tip">璇疯緭鍏ユ湁鏁堢殑姝f暣鏁�</view>
+					</view>
+					
+					<!-- 鎿嶄綔鎸夐挳 -->
+					<view class="destruction-actions">
+						<button class="destruction-btn modify-btn" @click="modifyDestruction">淇敼</button>
+						<button class="destruction-btn delete-btn" @click="deleteDestruction">鍒犻櫎</button>
+						<button class="destruction-btn cancel-btn" @click="resetDestruction">杩斿洖</button>
+					</view>
+				</view>
 			</view>
+		</view>
+		
+		<!-- 鍏ㄥ眬鍫电┐璁剧疆瀵硅瘽妗� -->
+		<view v-if="globalBlockHolePopup" class="overlay">
+			<view class="popup global-block-hole-popup">
+				<h3>鍏ㄥ眬鍫电┐璁剧疆</h3>
+				<view class="block-hole-content">
+					<view class="hole-info">
+						<view class="info-label">妫�楠屽崟鍙凤細{{ formData.releaseNo }}</view>
+						<view class="info-label">灏嗗簲鐢ㄤ簬鎵�鏈夋湁寮�绌存暟鐨勬楠岄」鐩�</view>
+					</view>
+					<view class="input-section">
+						<view class="input-label">鍫电┐鏁伴噺锛�</view>
+						<input class="info-input" type="text" v-model="globalBlockHoleInput" 
+							placeholder="璇疯緭鍏�1,2,3" @input="onGlobalBlockHoleInput" />
+						<view v-if="globalBlockHoleError" class="error-message">{{ globalBlockHoleError }}</view>
+					</view>
+					<view class="block-hole-actions">
+						<button class="block-hole-btn confirm" @click="confirmGlobalBlockHole" 
+							:disabled="!isGlobalBlockHoleValid">纭璁剧疆</button>
+						<button class="block-hole-btn cancel" @click="closeGlobalBlockHoleDialog">鍙栨秷</button>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+		<view class="barcode">
+			<u-modal :show="itemShow" title="鐗╂枡鏄庣粏" @confirm="drawingConfirm" @cancel="drawingCancel"
+				showCancelButton :z-index="1000">
+				<uni-table border stripe emptyText="鏆傛棤鏇村鏁版嵁" style="margin-left: 5px;margin-right: 5px;height: 400px;max-height: 60vh;overflow-y: auto;">
+					<uni-tr>
+						<uni-th align="center">鏂欏彿</uni-th>
+						<uni-th align="center" width="90">鍚嶇О</uni-th>
+						<uni-th align="center" width="90">瑙勬牸鍨嬪彿</uni-th>
+						<uni-th align="center" width="150">璋冨彇PLM鍥剧焊</uni-th>
+					</uni-tr>
+					<uni-tr v-for="(item,index) in (drawing || [])" style="height: 100px;">
+						<uni-td align="center">{{item.itemNo}}</uni-td>
+						<uni-td align="center" style="font-size:25px;">
+							<div >{{item.itemName}}</div>
+						</uni-td>
+						<uni-td align="center" style="font-size:25px;">
+							<div>{{item.itemModel}}</div>
+						</uni-td>
+						<uni-td align="center" class="click-wd">
+							<div @click="fetchDrawingNumber">璋冨彇鍥剧焊</div>
+						</uni-td>
+					</uni-tr>
+				</uni-table>
+			</u-modal>
 		</view>
 		
 		<view class="barcode">
@@ -205,57 +373,119 @@
 		<!-- 闄勪欢璇︽儏寮圭獥 -->
 		<view v-if="showAttachmentDetail" class="overlay">
 			<view class="popup attachment-detail-popup">
-				<h3 class="attachment-popup-title">闄勪欢璇︽儏</h3>
-				<div class="attachment-popup-divider"></div>
-				<div v-if="selectedAttachment" class="attachment-detail-content">
-					<div class="attachment-detail-row"><span class="attachment-label">ID锛�</span><span>{{ Math.trunc(selectedAttachment.id) }}</span></div>
-					<div class="attachment-detail-row"><span class="attachment-label">闄勪欢鍚嶏細</span><span>{{ selectedAttachment.fattach }}</span></div>
-					<div class="attachment-detail-row"><span class="attachment-label">绫诲瀷锛�</span><span>{{ selectedAttachment.ftype }}</span></div>
-					<div class="attachment-detail-row"><span class="attachment-label">鐗堟湰锛�</span><span>{{ selectedAttachment.fversion }}</span></div>
-					<div class="attachment-detail-row"><span class="attachment-label">鍙楁帶鏃ユ湡锛�</span><span>{{ selectedAttachment.fdate }}</span></div>
-					<div class="attachment-detail-row"><span class="attachment-label">涓婁紶浜猴細</span><span>{{ selectedAttachment.createBy }}</span></div>
-					<div class="attachment-detail-row"><span class="attachment-label">涓婁紶鏃堕棿锛�</span><span>{{ selectedAttachment.createDate }}</span></div>
-					<div class="attachment-actions-detail">
-						<button class="attachment-action-btn preview-btn" 
-							@click="previewFtpFile(selectedAttachment)" 
-							v-if="isPreviewable(selectedAttachment.fattach)">
-							馃攳 鍦ㄧ嚎棰勮
-						</button>
-						<button class="attachment-action-btn download-btn" 
-							@click="downloadAttachment(selectedAttachment)">
-							馃摜 涓嬭浇鏂囦欢
-						</button>
+				<div class="attachment-popup-header">
+					<h3 class="attachment-popup-title">闄勪欢璇︽儏</h3>
+					<button class="attachment-close-btn" @click="closeAttachmentDetail">杩斿洖</button>
+				</div>
+				
+				<div class="attachment-popup-content">
+					<div v-if="selectedAttachment" class="attachment-detail-content">
+						<div class="attachment-detail-header">
+							<div class="file-type-badge large" :class="getFileTypeClass(selectedAttachment.fattach)">
+								{{ getFileTypeIcon(selectedAttachment.fattach) }}
+							</div>
+							<div class="attachment-detail-title">
+								{{ selectedAttachment.fattach }}
+							</div>
+						</div>
+						
+						<div class="attachment-detail-info">
+							<div class="info-row">
+								<div class="info-item">
+									<text class="info-label">ID</text>
+									<text class="info-content">{{ Math.trunc(selectedAttachment.id) }}</text>
+								</div>
+								<div class="info-item">
+									<text class="info-label">绫诲瀷</text>
+									<text class="info-content">{{ selectedAttachment.ftype || '鏈煡绫诲瀷' }}</text>
+								</div>
+							</div>
+							
+							<div class="info-row" v-if="selectedAttachment.fversion">
+								<div class="info-item">
+									<text class="info-label">鐗堟湰</text>
+									<text class="info-content">{{ selectedAttachment.fversion }}</text>
+								</div>
+								<div class="info-item" v-if="selectedAttachment.fdate">
+									<text class="info-label">鍙楁帶鏃ユ湡</text>
+									<text class="info-content">{{ formatDate(selectedAttachment.fdate) }}</text>
+								</div>
+							</div>
+							
+							<div class="info-row" v-if="selectedAttachment.createBy">
+								<div class="info-item">
+									<text class="info-label">涓婁紶浜�</text>
+									<text class="info-content">{{ selectedAttachment.createBy }}</text>
+								</div>
+								<div class="info-item" v-if="selectedAttachment.createDate">
+									<text class="info-label">涓婁紶鏃堕棿</text>
+									<text class="info-content">{{ formatDate(selectedAttachment.createDate) }}</text>
+								</div>
+							</div>
+						</div>
+						
+						<div class="attachment-detail-actions">
+							<button v-if="isPreviewable(selectedAttachment.fattach)" 
+								class="btn-primary" 
+								@click="previewFtpFile(selectedAttachment)">棰勮</button>
+							<button class="btn-success" @click="downloadAttachment(selectedAttachment)">涓嬭浇</button>
+						</div>
+					</div>
+					<div v-else class="attachment-detail-empty">
+						<div class="empty-icon">鉂�</div>
+						<div class="empty-text">鏆傛棤闄勪欢淇℃伅</div>
 					</div>
 				</div>
-				<div v-else class="attachment-detail-empty">鏆傛棤闄勪欢淇℃伅</div>
-				<button class="attachment-popup-close" @click="closeAttachmentDetail">杩斿洖闄勪欢鍒楄〃</button>
 			</view>
 		</view>
 		<!-- 闄勪欢鍒楄〃寮圭獥 -->
 		<view v-if="showAttachmentPopup" class="overlay">
-			<view class="popup" style="width: 60vw; max-width: 500px;">
-				<h3>闄勪欢鍒楄〃</h3>
-				<div v-if="attachmentsLoading">鍔犺浇涓�...</div>
-				<div v-else-if="attachments.length === 0">鏆傛棤闄勪欢</div>
-				<ul class="attachment-list" v-else>
-					<li v-for="item in attachments" :key="item.id">
-						<div class="attachment-info">
-							<span class="attachment-name" @click="showAttachmentDetailDialog(item)">
-								{{ item.fattach }}
-							</span>
-							<div class="attachment-meta">
-								<span class="attachment-type">{{ item.ftype || '鏈煡绫诲瀷' }}</span>
+			<view class="popup attachment-list-popup">
+				<div class="attachment-popup-header">
+					<h3 class="attachment-popup-title">闄勪欢鍒楄〃</h3>
+					<button class="attachment-close-btn" @click="closeAttachmentPopup">鍏抽棴</button>
+				</div>
+				
+				<div class="attachment-popup-content">
+					<div v-if="attachmentsLoading" class="attachment-loading">
+						<div class="loading-spinner"></div>
+						<span class="loading-text">姝e湪鍔犺浇闄勪欢...</span>
+					</div>
+					
+					<div v-else-if="attachments.length === 0" class="attachment-empty">
+						<div class="empty-icon">馃搧</div>
+						<div class="empty-text">鏆傛棤闄勪欢</div>
+						<div class="empty-hint">璇ョ墿鏂欐殏鏈笂浼犱换浣曢檮浠�</div>
+					</div>
+					
+					<div v-else class="attachment-list">
+						<div v-for="item in attachments" :key="item.id" class="attachment-item">
+							<div class="attachment-info">
+								<div class="file-type-badge" :class="getFileTypeClass(item.fattach)">
+									{{ getFileTypeIcon(item.fattach) }}
+								</div>
+								<div class="attachment-details">
+									<div class="attachment-name" @click="showAttachmentDetailDialog(item)">
+										{{ item.fattach }}
+									</div>
+									<div class="attachment-meta">
+										<span class="meta-type">{{ item.ftype || '鏈煡绫诲瀷' }}</span>
+										<span v-if="item.fversion" class="meta-version">v{{ item.fversion }}</span>
+										<span v-if="item.fdate" class="meta-date">{{ formatDate(item.fdate) }}</span>
+									</div>
+								</div>
+							</div>
+							
+							<div class="attachment-actions">
+								<button class="btn-secondary" @click="showAttachmentDetailDialog(item)">璇︽儏</button>
+								<button v-if="isPreviewable(item.fattach)" 
+									class="btn-primary" 
+									@click="previewFtpFile(item)">棰勮</button>
+								<button class="btn-success" @click="downloadAttachment(item)">涓嬭浇</button>
 							</div>
 						</div>
-						<div class="attachment-actions">
-							<button class="secondary-btn" @click="showAttachmentDetailDialog(item)">璇︽儏</button>
-							<button class="secondary-btn preview-btn" @click="previewFtpFile(item)" 
-								v-if="isPreviewable(item.fattach)">棰勮</button>
-							<button class="secondary-btn" @click="downloadAttachment(item)">涓嬭浇</button>
-						</div>
-					</li>
-				</ul>
-				<button class="attachment-popup-close" @click="closeAttachmentPopup">鍏抽棴</button>
+					</div>
+				</div>
 			</view>
 		</view>
 		
@@ -342,12 +572,13 @@
 				current: true,
 				drawing: [],
 				drawingShow: false,
+				itemShow: false,
 				badreason: '',
 				PSTYPE: '',
 				WORKSHOP: '',
 				REMARK: '',
 				// picker 閫夐」鍜岀储寮�
-				badreasonOptions: ['', '澶栬涓嶈壇', '灏哄涓嶈壇', '鍖呰涓嶈壇', '鎬ц兘涓嶈壇', '瑁呴厤涓嶈壇', '瀹夎涓嶈壇'],
+				badreasonOptions: ['', '澶栬涓嶈壇', '灏哄涓嶈壇', '鍖呰涓嶈壇', '鎬ц兘涓嶈壇', '瑁呴厤涓嶈壇', '瀹夎涓嶈壇','鍥剧焊涓嶈壇'],
 				badreasonIndex: 0,
 				workshopOptions: ['', '鐢熶骇涓�閮�', '鐢熶骇浜岄儴', '娉ㄥ杞﹂棿', '鍏朵粬'],
 				workshopIndex: 0,
@@ -361,6 +592,10 @@
 				destructionPopup: false,
 				PHSY: '',
 				isInteger: true,
+				scannedMaterialInfo: null, // 鎵弿鍒扮殑鐗╂枡淇℃伅
+				destructionQuantity: '', // 鐮村潖瀹為獙鏁伴噺杈撳叆
+				inputFocus: false, // 杈撳叆妗嗙劍鐐圭姸鎬�
+				hasExistingRecord: false, // 鏄惁鏈夊凡瀛樺湪鐨勭牬鍧忓疄楠岃褰�
 				attachments: [],
 				showAttachmentPopup: false,
 				attachmentsLoading: false,
@@ -372,6 +607,25 @@
 				previewItemNo: '',
 				previewType: '', // 'text', 'image', 'excel', 'unsupported'
 				
+				// 鍏ㄥ眬鍫电┐鐩稿叧鏁版嵁
+				globalBlockHolePopup: false,
+				globalBlockHoleInput: '',
+				globalBlockHoleError: '',
+				isGlobalBlockHoleValid: false,
+				
+			}
+		},
+		computed: {
+			isUnmaintainedAndNotEmergency() {
+				// 鍒ゆ柇琛ㄥ崟鏄惁鏈淮鎶や笖涓嶆槸绱ф�ユ斁琛�
+				// 鏈淮鎶ょ殑鏉′欢锛歵ableData涓虹┖鎴栨墍鏈夋楠岄」鐩兘鏈畬鎴�
+				const isUnmaintained = this.tableData.length === 0 || 
+					this.tableData.every(item => item.fcheckResu === null || item.fcheckResu === '');
+				
+				// 涓嶆槸绱ф�ユ斁琛岀殑鏉′欢锛歟mergencyStatus涓篺alse
+				const isNotEmergency = !this.formData.emergencyStatus;
+				
+				return isUnmaintained && isNotEmergency;
 			}
 		},
 		onLoad(options) {
@@ -487,6 +741,7 @@
 				this.remarks = this.formData.remarks || this.remarks || '';
 				console.log('鎵撳紑寮圭獥鏃剁殑remarks鍊�:', this.remarks);
 			},
+			
 			// picker 浜嬩欢澶勭悊鏂规硶
 			onBadreasonChange(e) {
 				const index = e.detail.value;
@@ -575,42 +830,26 @@
 						}).then(res => {
 							if (res.status == 0) {
 
-								if(this.$loginInfo.account == 'PL017'){
-									this.QcIssueResultDetailes = {
-										fbatchQty: this.formData.fbatchQty,
-										itemName: this.formData.itemName,
-										itemNo: this.formData.itemNo,
-										suppName: this.formData.suppName,
-										appicationReason: this.formData.fngDesc,
-										badReason: this.badreason,
-										remark: this.remarks || '',
-										workShop: this.WORKSHOP,
-										releaseNo: this.formData.releaseNo,
-										staffNo: 'HMCS',
-										// staffNo: this.$loginInfo.account,
-										iqcStatus: this.PSTYPE,
-										department: this.WORKSHOP, // 浣跨敤WORKSHOP鏇夸唬鏈畾涔夌殑DEPARTMENT
-										EMERGENCY: this.formData.emergencyStatus ? "1" : "0" // 纭繚绱ф�ユ斁琛岀姸鎬佹纭紶閫�
-									};
-								}
-								else{
-									this.QcIssueResultDetailes = {
-										fbatchQty: this.formData.fbatchQty,
-										itemName: this.formData.itemName,
-										itemNo: this.formData.itemNo,
-										suppName: this.formData.suppName,
-										appicationReason: this.formData.fngDesc,
-										badReason: this.badreason,
-										remark: this.remarks || '',
-										workShop: this.WORKSHOP,
-										releaseNo: this.formData.releaseNo,
-										// staffNo: 'HMCS',
-										staffNo: this.$loginInfo.account,
-										iqcStatus: this.PSTYPE,
-										department: this.WORKSHOP, // 浣跨敤WORKSHOP鏇夸唬鏈畾涔夌殑DEPARTMENT
-										EMERGENCY: this.formData.emergencyStatus ? "1" : "0" // 纭繚绱ф�ユ斁琛岀姸鎬佹纭紶閫�
-									};
-								}
+								// 缁熶竴鎺ㄩ�佺粰HMCS锛屼笉绠″摢涓处鍙�
+								this.QcIssueResultDetailes = {
+									fbatchQty: this.formData.fcovertQty,
+									itemName: (() => {
+									        const combined = `${this.formData.itemName || ''} ${this.formData.itemModel || ''}`.trim();
+									        // 鎴柇澶勭悊锛氳秴杩�1000瀛楃淇濈暀鍓�1000浣�
+									        return combined.length > 1000 ? combined.substring(0, 1000) : combined;
+									    })(),
+									itemNo: this.formData.itemNo,
+									suppName: this.formData.suppName,
+									appicationReason: this.formData.fngDesc,
+									badReason: this.badreason,
+									remark: this.remarks || '',
+									workShop: this.WORKSHOP,
+									releaseNo: this.formData.releaseNo,
+									staffNo: 'HMCS', // 缁熶竴鎺ㄩ�佺粰HMCS
+									iqcStatus: this.PSTYPE,
+									department: this.WORKSHOP, // 浣跨敤WORKSHOP鏇夸唬鏈畾涔夌殑DEPARTMENT
+									EMERGENCY: this.formData.emergencyStatus ? "1" : "0" // 纭繚绱ф�ユ斁琛岀姸鎬佹纭紶閫�
+								};
 
 								console.log("鎻愪氦鐨勭揣鎬ユ斁琛岀姸鎬侊細", this.formData.emergencyStatus ? "1" : "0");
 								console.log("瀹屾暣鐨勬彁浜ゆ暟鎹細", this.QcIssueResultDetailes);
@@ -745,9 +984,9 @@
 						this.pstypeIndex = this.pstypeOptions.indexOf(this.PSTYPE);
 
 						
-						// 纭繚PHSY瀛楁琚纭缃�
-						this.formData.PHSY = data.PHSY;
-						this.PHSY = data.PHSY || ''; // 鍚屾椂璁剧疆椤甸潰缁戝畾鐨凱HSY鍙橀噺
+						// 纭繚PHSY瀛楁琚纭缃紙鍏煎澶у皬鍐欙級
+						this.formData.PHSY = data.PHSY || data.phsy;
+						this.PHSY = (data.PHSY || data.phsy || '').toString(); // 鍚屾椂璁剧疆椤甸潰缁戝畾鐨凱HSY鍙橀噺
 						
 						console.log("鍔犺浇鐨勭揣鎬ユ斁琛岀姸鎬�:", this.formData.emergencyStatus);
 						this.$post({
@@ -760,6 +999,16 @@
 							let tableData = res1.data.tbBillList
 							//褰撳凡妫�楠屼釜鏁伴兘涓嶄负绌烘椂鎸夌収妫�娴嬬粨鏋勬帓搴�
 							tableData.sort((a, b) => {
+								// 棣栧厛鎸塅stand鎺掑簭锛欶stand涓嶄负绌虹殑鎺掑湪鍓嶉潰
+								const aHasFstand = a.fstand !== null && a.fstand !== undefined;
+								const bHasFstand = b.fstand !== null && b.fstand !== undefined;
+								if (aHasFstand && !bHasFstand) {
+									return -1;
+								} else if (!aHasFstand && bHasFstand) {
+									return 1;
+								}
+								
+								// 鐒跺悗鎸夋楠岀粨鏋滄帓搴�
 								if (a.result === '鍚堟牸' && b.result === '鏈畬鎴�') {
 									return -1;
 								} else if (a.result === '鏈畬鎴�' && b.result === '鍚堟牸') {
@@ -807,11 +1056,13 @@
 				this.drawingShow = false
 				this.imageShow = false
 				this.productionShow = false
+				this.itemShow=false
 			},
 			drawingCancel() {
 				this.drawingShow = false
 				this.imageShow = false
 				this.productionShow = false
+				this.itemShow=false
 			},
 
 			fetchDrawingNumber() {
@@ -861,7 +1112,7 @@
 				});
 				this.drawingShow = true
 			},
-
+			
 
 			//鍥剧焊鐩稿叧鏂囨。
 			openDrawings(item) {
@@ -1306,20 +1557,571 @@
 					},
 			addDestruction() {
 				// 娣诲姞鐮村潖瀹為獙鐨勯�昏緫
-				this.destructionPopup = !this.destructionPopup;
-				this.PHSY = this.formData.PHSY || '';
+				this.destructionPopup = true;
+				
+				// 姣忔鐐瑰嚮閮芥煡璇㈡槸鍚﹀凡鏈夌牬鍧忓疄楠岃褰�
+				this.checkPhsyRecord();
+			},
+			
+			// 鏌ヨ鐮村潖瀹為獙璁板綍鏄惁瀛樺湪
+			checkPhsyRecord() {
+				uni.showLoading({
+					title: '鏌ヨ鐮村潖瀹為獙璁板綍...'
+				});
+				
+				this.$post({
+					url: "/LLJ/CheckPhsyRecord",
+					data: {
+						billNo: this.formData.lotNo, // 浣跨敤鍒拌揣鍗曞彿
+						releaseNo: this.formData.releaseNo // 浣跨敤妫�楠屽崟鍙�
+					}
+				}).then(res => {
+					uni.hideLoading();
+					if (res.status === 0) {
+						const hasRecord = res.data.exists;
+						if (hasRecord) {
+							// 鏈夎褰曪紝鏄剧ず鐗╂枡淇℃伅锛屽彧鏄剧ず淇敼銆佸垹闄ゃ�佽繑鍥炴寜閽�
+							this.showExistingRecord();
+						} else {
+							// 鏃犺褰曪紝鏄剧ず鎵弿鐣岄潰
+							this.showScanInterface();
+						}
+					} else {
+						uni.showToast({
+							title: res.message || '鏌ヨ澶辫触',
+							icon: 'none'
+						});
+						this.destructionPopup = false;
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					console.error('鏌ヨ鐮村潖瀹為獙璁板綍澶辫触:', err);
+					uni.showToast({
+						title: '鏌ヨ澶辫触锛岃閲嶈瘯',
+						icon: 'none'
+					});
+					this.destructionPopup = false;
+				});
+			},
+			
+			// 鏄剧ず宸叉湁璁板綍
+			showExistingRecord() {
+				// 璁剧疆宸叉湁璁板綍鐘舵��
+				this.hasExistingRecord = true;
+				// 鑾峰彇鐮村潖瀹為獙璁板綍涓殑鐗╂枡淇℃伅
+				this.getPhsyRecordInfo();
+			},
+			
+			// 鑾峰彇鐮村潖瀹為獙璁板綍淇℃伅
+			getPhsyRecordInfo() {
+				uni.showLoading({
+					title: '鑾峰彇鐮村潖瀹為獙璁板綍...'
+				});
+				
+				this.$post({
+					url: "/LLJ/GetPhsyRecordInfo",
+					data: {
+						billNo: this.formData.lotNo, // 浣跨敤鍒拌揣鍗曞彿
+						releaseNo: this.formData.releaseNo // 浣跨敤妫�楠屽崟鍙�
+					}
+				}).then(res => {
+					uni.hideLoading();
+					if (res.status === 0 && res.data && res.data.tbBillList && res.data.tbBillList.length > 0) {
+						// 鑾峰彇鍒扮牬鍧忓疄楠岃褰曪紝璁剧疆鐗╂枡淇℃伅
+						const record = res.data.tbBillList[0];
+						this.scannedMaterialInfo = {
+							itemBarcode: record.itemBarcode,
+							itemNo: record.itemNo,
+							itemName: record.itemName,
+							itemModel: record.itemModel,
+							billNo: record.billNo,
+							oldQty: record.yqty
+						};
+						// 璁剧疆鐮村潖瀹為獙鏁伴噺
+						this.destructionQuantity = record.cqty ? record.cqty.toString() : '';
+					} else {
+						// 濡傛灉娌℃湁鑾峰彇鍒拌缁嗕俊鎭紝鏄剧ず鎻愮ず
+						uni.showToast({
+							title: '宸插瓨鍦ㄧ牬鍧忓疄楠岃褰�',
+							icon: 'none',
+							duration: 1500
+						});
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					console.error('鑾峰彇鐮村潖瀹為獙璁板綍澶辫触:', err);
+					uni.showToast({
+						title: '鑾峰彇璁板綍澶辫触锛岃閲嶈瘯',
+						icon: 'none'
+					});
+				});
+			},
+			
+			// 鏄剧ず鎵弿鐣岄潰
+			showScanInterface() {
+				// 璁剧疆鏃犺褰曠姸鎬�
+				this.hasExistingRecord = false;
+				// 濡傛灉宸茬粡鏈夋壂鎻忕殑鐗╂枡淇℃伅锛岀洿鎺ユ樉绀虹粨鏋滄楠�
+				if (this.scannedMaterialInfo) {
+					// 淇濇寔褰撳墠鎵弿淇℃伅锛屼笉閲嶇疆
+					return;
+				}
+				
+				// 濡傛灉娌℃湁鎵弿淇℃伅锛岄噸缃墍鏈夌浉鍏虫暟鎹�
+				this.scannedMaterialInfo = null;
+				this.destructionQuantity = '';
 				this.isInteger = true;
 			},
+			
+			// 鎵弿浜岀淮鐮�
+			scanQRCode() {
+				// #ifdef APP-PLUS
+				// APP鐜浣跨敤uni.scanCode
+				uni.scanCode({
+					success: (res) => {
+						console.log('鎵弿缁撴灉:', res.result);
+						this.processQRCodeResult(res.result);
+					},
+					fail: (err) => {
+						console.error('鎵弿澶辫触:', err);
+						uni.showToast({
+							title: '鎵弿澶辫触锛岃閲嶈瘯',
+							icon: 'none'
+						});
+					}
+				});
+				// #endif
+				
+				// #ifdef H5
+				// H5鐜鎻愮ず鐢ㄦ埛鎵嬪姩杈撳叆
+				uni.showModal({
+					title: '浜岀淮鐮佹壂鎻�',
+					content: 'H5鐜鏆備笉鏀寔鎽勫儚澶存壂鎻忥紝璇疯緭鍏ヤ簩缁寸爜鍐呭',
+					editable: true,
+					placeholderText: '璇疯緭鍏ヤ簩缁寸爜鍐呭',
+					success: (res) => {
+						if (res.confirm && res.content) {
+							this.processQRCodeResult(res.content);
+						}
+					}
+				});
+				// #endif
+				
+				// #ifdef MP
+				// 灏忕▼搴忕幆澧冧娇鐢╳x.scanCode
+				wx.scanCode({
+					success: (res) => {
+						console.log('鎵弿缁撴灉:', res.result);
+						this.processQRCodeResult(res.result);
+					},
+					fail: (err) => {
+						console.error('鎵弿澶辫触:', err);
+						uni.showToast({
+							title: '鎵弿澶辫触锛岃閲嶈瘯',
+							icon: 'none'
+						});
+					}
+				});
+				// #endif
+			},
+			
+			// 澶勭悊浜岀淮鐮佹壂鎻忕粨鏋�
+			processQRCodeResult(qrCodeResult) {
+				if (!qrCodeResult) {
+					uni.showToast({
+						title: '浜岀淮鐮佸唴瀹逛负绌�',
+						icon: 'none'
+					});
+					return;
+				}
+				
+				// 鏄剧ず鍔犺浇鎻愮ず
+				uni.showLoading({
+					title: '鏌ヨ鐗╂枡淇℃伅...'
+				});
+				
+				// 璋冪敤鍚庣鎺ュ彛鏌ヨ鐗╂枡淇℃伅
+				this.$post({
+					url: "/LLJ/GetMaterialByBarcode",
+					data: {
+						itemBarcode: qrCodeResult,
+						currentBillNo: this.formData.lotNo  // 浼犻�掑綋鍓嶆楠屽崟鐨勫埌璐у崟鍙�
+					}
+				}).then(res => {
+					uni.hideLoading();
+					if (res.status === 0 && res.data && res.data.tbBillList && res.data.tbBillList.length > 0) {
+						// 鏌ヨ鎴愬姛锛岄獙璇佺墿鏂橧D鏄惁涓庢楠屽崟涓�鑷�
+						const scannedMaterial = res.data.tbBillList[0];
+						
+						// 妫�鏌ユ壂鎻忕殑鐗╂枡ID鏄惁涓庡綋鍓嶆楠屽崟鐨勭墿鏂橧D涓�鑷�
+						if (this.formData.itemId && scannedMaterial.itemId && 
+							this.formData.itemId.toString() !== scannedMaterial.itemId.toString()) {
+							// 鐗╂枡ID涓嶄竴鑷达紝鏄剧ず閿欒淇℃伅
+							this.scannedMaterialInfo = null;
+							uni.showModal({
+								title: '鐗╂枡涓嶅尮閰�',
+								content: '鎵鐨勬潯鐮佷笉涓鸿妫�楠屽崟鐗╂枡锛岃閲嶆柊鎵弿',
+								showCancel: false
+							});
+							return;
+						}
+						
+						// 鐗╂枡ID楠岃瘉閫氳繃锛屾樉绀虹墿鏂欎俊鎭�
+						this.scannedMaterialInfo = scannedMaterial;
+						// 淇濆瓨鎵弿鍒扮殑鏉$爜鍊硷紝鐢ㄤ簬鍚庣画璋冪敤瀛樺偍杩囩▼
+						this.scannedMaterialInfo.itemBarcode = qrCodeResult;
+						uni.showToast({
+							title: '鏌ヨ鎴愬姛',
+							icon: 'success'
+						});
+					} else {
+						// 鏌ヨ澶辫触锛屾樉绀洪敊璇俊鎭�
+						this.scannedMaterialInfo = null;
+						uni.showModal({
+							title: '鏌ヨ澶辫触',
+							content: res.message || '鏈壘鍒板搴旂殑鐗╂枡淇℃伅锛岃妫�鏌ヤ簩缁寸爜鏄惁姝g‘',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					console.error('鏌ヨ鐗╂枡淇℃伅澶辫触:', err);
+					this.scannedMaterialInfo = null;
+					uni.showModal({
+						title: '鏌ヨ澶辫触',
+						content: '缃戠粶閿欒锛岃妫�鏌ョ綉缁滆繛鎺ュ悗閲嶈瘯',
+						showCancel: false
+					});
+				});
+			},
+			
+			// 娴嬭瘯杈撳叆
+			testInput() {
+				this.destructionQuantity = '5';
+				this.validateInteger();
+				uni.showToast({
+					title: '娴嬭瘯杈撳叆瀹屾垚',
+					icon: 'success'
+				});
+			},
+			
+			// 鐐瑰嚮杈撳叆妗�
+			focusInput() {
+				// 浣跨敤uni-app鐨勮緭鍏ュ脊绐�
+				uni.showModal({
+					title: '杈撳叆鐮村潖瀹為獙鏁伴噺',
+					content: `鍙敤鏁伴噺: ${this.scannedMaterialInfo.oldQty}`,
+					editable: true,
+					placeholderText: '璇疯緭鍏ユ暟閲�',
+					success: (res) => {
+						if (res.confirm && res.content) {
+							this.destructionQuantity = res.content;
+							this.validateInteger();
+						}
+					}
+				});
+			},
+			
+			// 楠岃瘉杈撳叆鏄惁涓烘暣鏁�
+			validateInteger() {
+				if (!this.destructionQuantity) {
+					this.isInteger = true;
+					return;
+				}
+				
+				const value = this.destructionQuantity.toString().trim();
+				// 鍙厑璁告鏁存暟
+				this.isInteger = /^[1-9]\d*$/.test(value);
+			},
+			
+			// 纭鐮村潖瀹為獙
+			confirmDestruction() {
+				if (!this.isInteger || !this.destructionQuantity) {
+					uni.showToast({
+						title: '璇疯緭鍏ユ湁鏁堢殑鏁存暟鏁伴噺',
+						icon: 'none'
+					});
+					return;
+				}
+				
+				// 妫�鏌ユ壂鎻忕殑鐗╂枡淇℃伅鏄惁瀛樺湪
+				if (!this.scannedMaterialInfo) {
+					uni.showToast({
+						title: '璇峰厛鎵弿鐗╂枡浜岀淮鐮�',
+						icon: 'none'
+					});
+					return;
+				}
+				
+				// 楠岃瘉鐮村潖瀹為獙鏁伴噺涓嶈兘澶т簬鍙敤鏁伴噺
+				const destructionQty = parseInt(this.destructionQuantity);
+				const availableQty = parseInt(this.scannedMaterialInfo.oldQty);
+				
+				if (destructionQty > availableQty) {
+					uni.showModal({
+						title: '鏁伴噺閿欒',
+						content: `鐮村潖瀹為獙鏁伴噺(${destructionQty})涓嶈兘澶т簬鍙敤鏁伴噺(${availableQty})锛岃閲嶆柊濉啓鎴栭噸鏂版壂鐮侊紒`,
+						showCancel: false
+					});
+					return;
+				}
+				
+				// 鏄剧ず鍔犺浇鎻愮ず
+				uni.showLoading({
+					title: '璋冪敤瀛樺偍杩囩▼涓�...'
+				});
+				
+				// 璋冪敤鐮村潖瀹為獙瀛樺偍杩囩▼
+				this.$post({
+					url: "/LLJ/CallPhsyUpdateProcedure",
+					data: {
+						itemBarcode: this.scannedMaterialInfo.itemBarcode || this.scannedMaterialInfo.itemNo, // 浣跨敤鎵弿鐨勬潯鐮�
+						yqty: availableQty, // 鎵爜鏌ヨ鍑烘潵鐨勬潯鐮佹暟閲�
+						cqty: destructionQty, // 濉啓鐨勭牬鍧忓疄楠屾暟閲�
+						billNo: this.scannedMaterialInfo.billNo, // 鏌ヨ鍒扮殑鍒拌揣鍗曞彿
+						lx: 1, // 鎿嶄綔绫诲瀷锛�1鏂板
+						releaseNo: this.formData.releaseNo, // 妫�楠屽崟鍙�
+						itemId: this.formData.itemId // 妫�楠屽崟鐨勭墿鏂橧D
+					}
+				}).then(res => {
+					uni.hideLoading();
+					
+					// 妫�鏌ュ瓨鍌ㄨ繃绋嬭繑鍥炵殑缁撴灉
+					if (res.status === 0) {
+						// 瀛樺偍杩囩▼鎵ц鎴愬姛
+						this.formData.PHSY = this.destructionQuantity;
+						this.destructionPopup = false;
+						this.hasExistingRecord = true; // 璁剧疆涓烘湁璁板綍鐘舵��
+						uni.showToast({
+							title: '鐮村潖瀹為獙璁板綍淇濆瓨鎴愬姛',
+							icon: 'success',
+							duration: 2000
+						});
+						// 绔嬪嵆閲嶆柊鍔犺浇鏁版嵁纭繚鍚屾
+						setTimeout(() => {
+							this.init();
+						}, 500);
+					} else {
+						// 瀛樺偍杩囩▼鎵ц澶辫触锛屾樉绀洪敊璇俊鎭�
+						uni.showModal({
+							title: '鎿嶄綔澶辫触',
+							content: res.message || '鐮村潖瀹為獙璁板綍淇濆瓨澶辫触',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					console.error('璋冪敤瀛樺偍杩囩▼澶辫触锛�', err);
+					uni.showModal({
+						title: '缃戠粶閿欒',
+						content: '璋冪敤瀛樺偍杩囩▼澶辫触锛岃妫�鏌ョ綉缁滆繛鎺ュ悗閲嶈瘯',
+						showCancel: false
+					});
+				});
+			},
+			
+			// 淇敼鐮村潖瀹為獙锛堝彧淇敼鏁伴噺锛�
+			modifyDestruction() {
+				// 鏄剧ず鏁伴噺杈撳叆鐣岄潰
+				uni.showModal({
+					title: '淇敼鐮村潖瀹為獙鏁伴噺',
+					content: '璇疯緭鍏ユ柊鐨勭牬鍧忓疄楠屾暟閲�',
+					editable: true,
+					placeholderText: '璇疯緭鍏ユ暟閲�',
+					success: (res) => {
+						if (res.confirm && res.content) {
+							const newQuantity = parseInt(res.content);
+							if (isNaN(newQuantity) || newQuantity <= 0) {
+								uni.showToast({
+									title: '璇疯緭鍏ユ湁鏁堢殑姝f暣鏁�',
+									icon: 'none'
+								});
+								return;
+							}
+							
+							// 璋冪敤淇敼瀛樺偍杩囩▼
+							this.callModifyProcedure(newQuantity);
+						}
+					}
+				});
+			},
+			
+			// 璋冪敤淇敼瀛樺偍杩囩▼
+			callModifyProcedure(newQuantity) {
+				uni.showLoading({
+					title: '淇敼涓�...'
+				});
+				
+				// 鑾峰彇褰撳墠鎵弿鐨勭墿鏂欎俊鎭�
+				const itemBarcode = (this.scannedMaterialInfo && this.scannedMaterialInfo.itemBarcode) || 
+								   (this.scannedMaterialInfo && this.scannedMaterialInfo.itemNo) || '';
+				const yqty = (this.scannedMaterialInfo && this.scannedMaterialInfo.oldQty) || 0;
+				
+				this.$post({
+					url: "/LLJ/CallPhsyUpdateProcedure",
+					data: {
+						itemBarcode: itemBarcode, // 浣跨敤鎵弿鐨勬潯鐮�
+						yqty: yqty, // 浣跨敤鎵爜鏌ヨ鍑烘潵鐨勬潯鐮佹暟閲�
+						cqty: newQuantity, // 鏂扮殑鐮村潖瀹為獙鏁伴噺
+						billNo: this.formData.lotNo, // 鍒拌揣鍗曞彿
+						lx: 2, // 鎿嶄綔绫诲瀷锛�2淇敼
+						releaseNo: this.formData.releaseNo, // 妫�楠屽崟鍙�
+						itemId: this.formData.itemId // 妫�楠屽崟鐨勭墿鏂橧D
+					}
+				}).then(res => {
+					uni.hideLoading();
+					
+					if (res.status === 0) {
+						// 淇敼鎴愬姛
+						this.formData.PHSY = newQuantity.toString();
+						this.PHSY = newQuantity.toString();
+						this.destructionPopup = false;
+						
+						uni.showToast({
+							title: '淇敼鎴愬姛',
+							icon: 'success',
+							duration: 2000
+						});
+						
+						// 閲嶆柊鍔犺浇鏁版嵁
+						setTimeout(() => {
+							this.init();
+						}, 500);
+					} else {
+						uni.showModal({
+							title: '淇敼澶辫触',
+							content: res.message || '淇敼澶辫触',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					console.error('淇敼澶辫触锛�', err);
+					uni.showModal({
+						title: '缃戠粶閿欒',
+						content: '淇敼澶辫触锛岃妫�鏌ョ綉缁滆繛鎺ュ悗閲嶈瘯',
+						showCancel: false
+					});
+				});
+			},
+			
+			// 鍒犻櫎鐮村潖瀹為獙
+			deleteDestruction() {
+				uni.showModal({
+					title: '纭鍒犻櫎',
+					content: '纭畾瑕佸垹闄ゅ綋鍓嶇殑鐮村潖瀹為獙璁板綍鍚楋紵',
+					success: (res) => {
+						if (res.confirm) {
+							// 璋冪敤瀛樺偍杩囩▼鍒犻櫎璁板綍
+							this.callDeleteProcedure();
+						}
+					}
+				});
+			},
+			
+			// 璋冪敤鍒犻櫎瀛樺偍杩囩▼
+			callDeleteProcedure() {
+				uni.showLoading({
+					title: '鍒犻櫎涓�...'
+				});
+				
+				// 鑾峰彇褰撳墠鎵弿鐨勭墿鏂欎俊鎭�
+				const itemBarcode = (this.scannedMaterialInfo && this.scannedMaterialInfo.itemBarcode) || 
+								   (this.scannedMaterialInfo && this.scannedMaterialInfo.itemNo) || '';
+				const yqty = (this.scannedMaterialInfo && this.scannedMaterialInfo.oldQty) || 0;
+				const cqty = parseFloat(this.destructionQuantity) || 0; // 浣跨敤褰撳墠璁板綍鐨勭牬鍧忔暟閲�
+				
+				this.$post({
+					url: "/LLJ/CallPhsyUpdateProcedure",
+					data: {
+						itemBarcode: itemBarcode, // 浣跨敤鎵弿鐨勬潯鐮�
+						yqty: yqty, // 浣跨敤鎵爜鏌ヨ鍑烘潵鐨勬潯鐮佹暟閲�
+						cqty: cqty, // 浣跨敤褰撳墠璁板綍鐨勭牬鍧忔暟閲�
+						billNo: this.formData.lotNo, // 鍒拌揣鍗曞彿
+						lx: 3, // 鎿嶄綔绫诲瀷锛�3鍒犻櫎
+						releaseNo: this.formData.releaseNo, // 妫�楠屽崟鍙�
+						itemId: this.formData.itemId // 妫�楠屽崟鐨勭墿鏂橧D
+					}
+				}).then(res => {
+					uni.hideLoading();
+					
+					if (res.status === 0) {
+						// 鍒犻櫎鎴愬姛
+						this.scannedMaterialInfo = null;
+						this.destructionQuantity = '';
+						this.isInteger = true;
+						this.formData.PHSY = '';
+						this.PHSY = '';
+						this.hasExistingRecord = false;
+						this.destructionPopup = false;
+						
+						uni.showToast({
+							title: '鍒犻櫎鎴愬姛',
+							icon: 'success',
+							duration: 2000
+						});
+						
+						// 閲嶆柊鍔犺浇鏁版嵁
+						setTimeout(() => {
+							this.init();
+						}, 500);
+					} else {
+						uni.showModal({
+							title: '鍒犻櫎澶辫触',
+							content: res.message || '鍒犻櫎澶辫触',
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					console.error('鍒犻櫎澶辫触锛�', err);
+					uni.showModal({
+						title: '缃戠粶閿欒',
+						content: '鍒犻櫎澶辫触锛岃妫�鏌ョ綉缁滆繛鎺ュ悗閲嶈瘯',
+						showCancel: false
+					});
+				});
+			},
+			
+			// 閲嶇疆鐮村潖瀹為獙锛堣繑鍥炰笂涓�姝ワ級
+			resetDestruction() {
+				this.scannedMaterialInfo = null;
+				this.destructionQuantity = '';
+				this.isInteger = true;
+				this.hasExistingRecord = false;
+				this.destructionPopup = false; // 鐩存帴鍏抽棴寮圭獥锛岃繑鍥炲埌琛ㄥ崟
+			},
+			
+			// 鍏抽棴鐮村潖瀹為獙寮圭獥
+			closeDestructionPopup() {
+				this.destructionPopup = false;
+				// 閲嶇疆鎵�鏈夌浉鍏虫暟鎹�
+				this.scannedMaterialInfo = null;
+				this.destructionQuantity = '';
+				this.isInteger = true;
+			},
+			
 			editDestruction() {
+				// 楠岃瘉杈撳叆鏄惁涓烘暣鏁版垨绌哄瓧绗︿覆
 				if(this.PHSY === '') {
 					this.isInteger = true;
 				} else {
 					const isInteger = /^-?\d+$/.test(this.PHSY);
 					this.isInteger = isInteger;
 					if (!isInteger) {
+						uni.showToast({
+							title: '璇疯緭鍏ユ暣鏁板�兼垨鐣欑┖',
+							icon: 'none',
+							duration: 2000
+						});
 						return;
 					}
 				}
+			
+				// 鏄剧ず鍔犺浇鎻愮ず
+				uni.showLoading({
+					title: '淇濆瓨涓�...'
+				});
 			
 				this.$post({
 					url: "/LLJ/savePhsyGid",
@@ -1329,20 +2131,42 @@
 						PHSY: this.PHSY
 					}
 				}).then(res => {
-					if (res.data.tbBillList > 0) {
+					uni.hideLoading();
+					if (res.data && res.data.tbBillList > 0) {
 						this.formData.PHSY = this.PHSY === '' ? null : this.PHSY;
 						this.destructionPopup = false;
+						uni.showToast({
+							title: '淇濆瓨鎴愬姛',
+							icon: 'success',
+							duration: 2000
+						});
 						// 绔嬪嵆閲嶆柊鍔犺浇鏁版嵁纭繚鍚屾
 						setTimeout(() => {
 							this.init();
 						}, 500);
+					} else {
+						uni.showToast({
+							title: '淇濆瓨澶辫触',
+							icon: 'none',
+							duration: 2000
+						});
 					}
 				}).catch(err => {
+					uni.hideLoading();
 					console.error('淇濆瓨澶辫触锛�', err);
+					uni.showToast({
+						title: '淇濆瓨澶辫触锛岃閲嶈瘯',
+						icon: 'none',
+						duration: 2000
+					});
 				})
 			},
 			clearDestruction() {
-				this.PHSY = '';
+				// 鏄剧ず鍔犺浇鎻愮ず
+				uni.showLoading({
+					title: '娓呴櫎涓�...'
+				});
+				
 				this.$post({
 					url: "/LLJ/savePhsyGid",
 					data: {
@@ -1351,16 +2175,35 @@
 						PHSY: ''
 					}
 				}).then(res => {
-					if (res.data.tbBillList > 0) {
+					uni.hideLoading();
+					if (res.data && res.data.tbBillList > 0) {
 						this.formData.PHSY = null;
+						this.PHSY = '';
 						this.destructionPopup = false;
+						uni.showToast({
+							title: '娓呴櫎鎴愬姛',
+							icon: 'success',
+							duration: 2000
+						});
 						// 绔嬪嵆閲嶆柊鍔犺浇鏁版嵁纭繚鍚屾
 						setTimeout(() => {
 							this.init();
 						}, 500);
+					} else {
+						uni.showToast({
+							title: '娓呴櫎澶辫触',
+							icon: 'none',
+							duration: 2000
+						});
 					}
 				}).catch(err => {
+					uni.hideLoading();
 					console.error('娓呴櫎澶辫触锛�', err);
+					uni.showToast({
+						title: '娓呴櫎澶辫触锛岃閲嶈瘯',
+						icon: 'none',
+						duration: 2000
+					});
 				})
 			},
 			viewAttachmentInfo() {
@@ -1420,6 +2263,59 @@
 					'ppt', 'pptx',   // PowerPoint婕旂ず鏂囩
 					'csv'            // CSV鏂囦欢
 				].includes(ext);
+			},
+			
+			// 鑾峰彇鏂囦欢绫诲瀷鍥炬爣
+			getFileTypeIcon(filename) {
+				if (!filename) return '馃搫';
+				const ext = filename.trim().split('.').pop().toLowerCase();
+				const iconMap = {
+					'pdf': '馃摃',
+					'jpg': '馃柤锔�', 'jpeg': '馃柤锔�', 'png': '馃柤锔�', 'gif': '馃柤锔�', 'bmp': '馃柤锔�', 'webp': '馃柤锔�',
+					'txt': '馃摑', 'log': '馃摑', 'md': '馃摑',
+					'doc': '馃摌', 'docx': '馃摌',
+					'xls': '馃搳', 'xlsx': '馃搳',
+					'ppt': '馃摍', 'pptx': '馃摍',
+					'csv': '馃搳',
+					'zip': '馃摝', 'rar': '馃摝', '7z': '馃摝',
+					'dwg': '馃彈锔�', 'dxf': '馃彈锔�'
+				};
+				return iconMap[ext] || '馃搫';
+			},
+			
+			// 鑾峰彇鏂囦欢绫诲瀷CSS绫�
+			getFileTypeClass(filename) {
+				if (!filename) return 'file-unknown';
+				const ext = filename.trim().split('.').pop().toLowerCase();
+				const classMap = {
+					'pdf': 'file-pdf',
+					'jpg': 'file-image', 'jpeg': 'file-image', 'png': 'file-image', 'gif': 'file-image', 'bmp': 'file-image', 'webp': 'file-image',
+					'txt': 'file-text', 'log': 'file-text', 'md': 'file-text',
+					'doc': 'file-word', 'docx': 'file-word',
+					'xls': 'file-excel', 'xlsx': 'file-excel',
+					'ppt': 'file-powerpoint', 'pptx': 'file-powerpoint',
+					'csv': 'file-excel',
+					'zip': 'file-archive', 'rar': 'file-archive', '7z': 'file-archive',
+					'dwg': 'file-cad', 'dxf': 'file-cad'
+				};
+				return classMap[ext] || 'file-unknown';
+			},
+			
+			// 鏍煎紡鍖栨棩鏈�
+			formatDate(dateString) {
+				if (!dateString) return '';
+				try {
+					const date = new Date(dateString);
+					return date.toLocaleDateString('zh-CN', {
+						year: 'numeric',
+						month: '2-digit',
+						day: '2-digit',
+						hour: '2-digit',
+						minute: '2-digit'
+					});
+				} catch (e) {
+					return dateString;
+				}
 			},
 			// 澶勭悊闄勪欢涓嬭浇閿欒
 			handleAttachmentError(item) {
@@ -1571,7 +2467,7 @@
 			showFilePreview(content, fileName) {
 				this.previewContent = content;
 				this.previewTitle = fileName;
-				this.previewItemNo = this.selectedAttachment?.itemNo || '';
+				this.previewItemNo = (this.selectedAttachment && this.selectedAttachment.itemNo) || '';
 				this.previewType = this.getFileType(fileName);
 				this.showFilePreviewPopup = true;
 			},
@@ -1929,6 +2825,163 @@
 				// #endif
 			},
 			
+			
+			// 鍏ㄥ眬鍫电┐鐩稿叧鏂规硶
+			// 妫�鏌ユ楠岄」鐩槸鍚︽湁绌存暟
+			hasHoleCount(fcheckItem) {
+				if (!fcheckItem) return false;
+				const match = fcheckItem.match(/[锛�(](\d+)绌碵锛�)]/);
+				return match ? true : false;
+			},
+			
+			// 鑾峰彇绌存暟
+			getHoleCount(fcheckItem) {
+				if (!fcheckItem) return 0;
+				const match = fcheckItem.match(/[锛�(](\d+)绌碵锛�)]/);
+				return match ? parseInt(match[1]) : 0;
+			},
+			
+			// 鎵撳紑鍏ㄥ眬鍫电┐瀵硅瘽妗�
+			openGlobalBlockHoleDialog() {
+				console.log('鐐瑰嚮鍫电┐璁剧疆鎸夐挳');
+				console.log('tableData:', this.tableData);
+				
+				// 妫�鏌ユ槸鍚︽湁鏈夊紑绌存暟鐨勬楠岄」鐩�
+				const hasHoleItems = this.tableData.some(item => this.hasHoleCount(item.fcheckItem));
+				console.log('hasHoleItems:', hasHoleItems);
+				
+				if (!hasHoleItems) {
+					uni.showModal({
+						title: '鎻愮ず',
+						content: '褰撳墠妫�楠屽崟娌℃湁鏈夊紑绌存暟鐨勬楠岄」鐩�',
+						showCancel: false
+					});
+					return;
+				}
+				
+				this.globalBlockHoleInput = '';
+				this.globalBlockHolePopup = true;
+				console.log('璁剧疆globalBlockHolePopup涓簍rue');
+				this.validateGlobalBlockHoleInput();
+			},
+			
+			// 鍏抽棴鍏ㄥ眬鍫电┐瀵硅瘽妗�
+			closeGlobalBlockHoleDialog() {
+				this.globalBlockHolePopup = false;
+				this.globalBlockHoleInput = '';
+				this.globalBlockHoleError = '';
+				this.isGlobalBlockHoleValid = false;
+			},
+			
+			
+			// 澶勭悊鍏ㄥ眬鍫电┐杈撳叆锛堜繚鐣欏師鏂规硶浠ラ槻鍏朵粬鍦版柟璋冪敤锛�
+			onGlobalBlockHoleInput(e) {
+				console.log('杈撳叆浜嬩欢瑙﹀彂:', e);
+				// 鍏煎涓嶅悓鐨勪簨浠舵牸寮�
+				const value = e.detail ? e.detail.value : e.target ? e.target.value : e;
+				console.log('杈撳叆鍊�:', value);
+				this.globalBlockHoleInput = value;
+				this.validateGlobalBlockHoleInput();
+			},
+			
+			// 楠岃瘉鍏ㄥ眬鍫电┐杈撳叆
+			validateGlobalBlockHoleInput() {
+				const input = this.globalBlockHoleInput.trim();
+				if (!input) {
+					this.globalBlockHoleError = '';
+					this.isGlobalBlockHoleValid = false;
+					return;
+				}
+				
+				// 楠岃瘉鏍煎紡锛�1,2,3 鎴� 1锛�2锛�3
+				const blockedHoles = input.split(/[,锛宂/).map(s => s.trim()).filter(s => s);
+				
+				// 妫�鏌ユ槸鍚﹂兘鏄湁鏁堟暟瀛�
+				const isValid = blockedHoles.every(hole => {
+					const num = parseInt(hole);
+					return !isNaN(num) && num > 0;
+				});
+				
+				if (!isValid) {
+					this.globalBlockHoleError = '璇疯緭鍏ユ湁鏁堢殑绌村彿锛岀敤閫楀彿鍒嗛殧';
+					this.isGlobalBlockHoleValid = false;
+					return;
+				}
+				
+				// 妫�鏌ユ槸鍚︽湁閲嶅
+				const uniqueHoles = [...new Set(blockedHoles.map(h => parseInt(h)))];
+				if (uniqueHoles.length !== blockedHoles.length) {
+					this.globalBlockHoleError = '涓嶈兘杈撳叆閲嶅鐨勭┐鍙�';
+					this.isGlobalBlockHoleValid = false;
+					return;
+				}
+				
+				this.globalBlockHoleError = '';
+				this.isGlobalBlockHoleValid = true;
+			},
+			
+			// 纭鍏ㄥ眬鍫电┐
+			confirmGlobalBlockHole() {
+				if (!this.isGlobalBlockHoleValid) return;
+				
+				uni.showLoading({
+					title: '璁剧疆鍫电┐涓�...'
+				});
+				
+				// 鑾峰彇鎵�鏈夋湁寮�绌存暟鐨勬楠岄」鐩�
+				const holeItems = this.tableData.filter(item => this.hasHoleCount(item.fcheckItem));
+				
+				// 鎵归噺璋冪敤鍚庣鎺ュ彛璁剧疆鍫电┐
+				const promises = holeItems.map(item => {
+					return this.$post({
+						url: "/LLJ/SetBlockedHoles",
+						data: {
+							releaseNo: this.formData.releaseNo,
+							blockedHoles: this.globalBlockHoleInput,
+							itemId: item.id
+						}
+					});
+				});
+				
+				Promise.all(promises).then(results => {
+					uni.hideLoading();
+					
+					// 妫�鏌ユ墍鏈夎姹傛槸鍚︽垚鍔�
+					const failedCount = results.filter(res => res.status !== 0).length;
+					
+					if (failedCount === 0) {
+						uni.showToast({
+							title: `鎴愬姛涓�${holeItems.length}涓楠岄」鐩缃牭绌碻,
+							icon: 'success',
+							duration: 2000
+						});
+						
+						// 绔嬪嵆鍏抽棴瀵硅瘽妗�
+						this.closeGlobalBlockHoleDialog();
+						
+						// 绔嬪嵆閲嶆柊鍔犺浇鏁版嵁纭繚鍚屾
+						setTimeout(() => {
+							this.init();
+						}, 500);
+					} else {
+						uni.showModal({
+							title: '閮ㄥ垎璁剧疆澶辫触',
+							content: `${failedCount}涓楠岄」鐩缃け璐ワ紝璇烽噸璇昤,
+							showCancel: false
+						});
+					}
+				}).catch(err => {
+					uni.hideLoading();
+					console.error('鍏ㄥ眬鍫电┐璁剧疆澶辫触:', err);
+					uni.showModal({
+						title: '缃戠粶閿欒',
+						content: '鍫电┐璁剧疆澶辫触锛岃妫�鏌ョ綉缁滆繛鎺ュ悗閲嶈瘯',
+						showCancel: false
+					});
+				});
+			},
+			
+			
 		}
 	}
 </script>
@@ -1944,6 +2997,39 @@
 		box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
 		min-height: 100vh;
 		position: relative;
+		transition: all 0.3s ease;
+	}
+
+	/* 鏈淮鎶や笖闈炵揣鎬ユ斁琛岃〃鍗曠殑绱壊鏍峰紡 */
+	.inspection-sheet.unmaintained-form {
+		background: linear-gradient(135deg, #f8f4ff 0%, #f0e6ff 100%);
+		border: 2px solid #9c27b0;
+		box-shadow: 0 0 20px rgba(156, 39, 176, 0.2);
+	}
+
+	.inspection-sheet.unmaintained-form .sheet-header {
+		border-bottom: 2px solid #9c27b0;
+	}
+
+	.inspection-sheet.unmaintained-form .sheet-header h1 {
+		color: #6a1b9a;
+	}
+
+	.inspection-sheet.unmaintained-form .inspection-number {
+		color: #9c27b0;
+	}
+
+	.inspection-sheet.unmaintained-form .material-info {
+		border: 1px solid #e1bee7;
+		background-color: rgba(156, 39, 176, 0.05);
+	}
+
+	.inspection-sheet.unmaintained-form .info-label {
+		color: #6a1b9a;
+	}
+
+	.inspection-sheet.unmaintained-form .info-value {
+		color: #4a148c;
 	}
 
 	/* 澶撮儴鏍峰紡 */
@@ -2266,9 +3352,14 @@
 		align-items: center;
 		z-index: 1000; /* 鎻愰珮灞傜骇锛岀‘淇濆湪鍥哄畾鎸夐挳涓婃柟 */
 	}
+	
+	/* 鍏ㄥ眬鍫电┐璁剧疆瀵硅瘽妗嗛渶瑕佹洿楂樼殑z-index */
+	.global-block-hole-popup {
+		z-index: 1001;
+	}
 
 	/* 寮圭獥鏁翠綋缇庡寲 */
-	.popup, .attachment-detail-popup {
+	.popup {
 		background: #fff;
 		border-radius: 16px;
 		box-shadow: 0 8px 32px rgba(60,60,60,0.18);
@@ -2280,123 +3371,9 @@
 		max-height: 80vh; /* 闄愬埗鏈�澶ч珮搴︼紝閬垮厤琚簳閮ㄦ寜閽伄鎸� */
 		overflow-y: auto; /* 鍐呭杩囧鏃跺彲婊氬姩 */
 	}
-	.attachment-popup-title {
-		font-size: 22px;
-		font-weight: 700;
-		color: #222;
-		margin-bottom: 8px;
-		letter-spacing: 1px;
-		text-align: center;
-	}
-	.attachment-popup-divider {
-		height: 1px;
-		background: linear-gradient(90deg,#e0e7ef 0%,#f5f7fa 100%);
-		margin-bottom: 18px;
-	}
+	
 	.attachment-detail-content {
 		margin-bottom: 18px;
-	}
-	.attachment-detail-row {
-		display: flex;
-		align-items: center;
-		margin-bottom: 8px;
-		font-size: 15px;
-	}
-	.attachment-label {
-		min-width: 80px;
-		color: #1976d2;
-		font-weight: 500;
-		margin-right: 8px;
-	}
-	.attachment-preview-area {
-		margin: 18px 0 8px 0;
-		border-radius: 10px;
-		background: #f8fafc;
-		padding: 10px;
-		box-shadow: 0 2px 8px rgba(60,60,60,0.06);
-	}
-	.attachment-download-area {
-		margin: 18px 0 8px 0;
-		text-align: center;
-	}
-	.attachment-download-link {
-		display: inline-block;
-		padding: 7px 18px;
-		background: linear-gradient(90deg,#4f8cff 0%,#1976d2 100%);
-		color: #fff;
-		border-radius: 6px;
-		font-weight: 500;
-		text-decoration: none;
-		transition: background 0.2s;
-		box-shadow: 0 2px 8px rgba(60,60,60,0.08);
-	}
-	.attachment-download-link:hover {
-		background: linear-gradient(90deg,#1976d2 0%,#4f8cff 100%);
-	}
-	.attachment-detail-empty {
-		color: #888;
-		text-align: center;
-		margin: 30px 0;
-		font-size: 16px;
-	}
-	.attachment-popup-close {
-		margin-top: 18px;
-		width: 100%;
-		background: linear-gradient(90deg,#e0e0e0 0%,#f5f7fa 100%);
-		color: #444;
-		border-radius: 8px;
-		font-size: 16px;
-		padding: 10px 0;
-		border: none;
-		font-weight: 600;
-		letter-spacing: 1px;
-		transition: background 0.2s, color 0.2s;
-		box-shadow: 0 2px 8px rgba(60,60,60,0.06);
-	}
-	.attachment-popup-close:hover {
-		background: linear-gradient(90deg,#bdbdbd 0%,#e0e0e0 100%);
-		color: #1976d2;
-	}
-	
-	/* 闄勪欢璇︽儏椤甸潰鐨勬搷浣滄寜閽� */
-	.attachment-actions-detail {
-		margin: 20px 0;
-		display: flex;
-		gap: 12px;
-		justify-content: center;
-		flex-wrap: wrap;
-	}
-	.attachment-action-btn {
-		padding: 10px 20px;
-		border: none;
-		border-radius: 8px;
-		font-size: 14px;
-		font-weight: 600;
-		cursor: pointer;
-		transition: all 0.3s ease;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		min-width: 120px;
-		box-shadow: 0 2px 4px rgba(0,0,0,0.1);
-	}
-	.attachment-action-btn.preview-btn {
-		background: linear-gradient(135deg, #4CAF50, #45a049);
-		color: white;
-	}
-	.attachment-action-btn.preview-btn:hover {
-		background: linear-gradient(135deg, #45a049, #3d8b40);
-		transform: translateY(-1px);
-		box-shadow: 0 4px 8px rgba(0,0,0,0.15);
-	}
-	.attachment-action-btn.download-btn {
-		background: linear-gradient(135deg, #2196F3, #1976D2);
-		color: white;
-	}
-	.attachment-action-btn.download-btn:hover {
-		background: linear-gradient(135deg, #1976D2, #1565C0);
-		transform: translateY(-1px);
-		box-shadow: 0 4px 8px rgba(0,0,0,0.15);
 	}
 	
 	/* 鏂囦欢棰勮寮圭獥鏍峰紡 */
@@ -2515,84 +3492,321 @@
 		background: linear-gradient(135deg, #bdbdbd, #9e9e9e);
 		transform: translateY(-1px);
 	}
-	/* 鍒楄〃寮圭獥缇庡寲锛堜繚鐣欏師鏈夛級 */
-	.attachment-list {
-		padding: 0;
+	/* 闄勪欢鐩稿叧鏍峰紡 */
+	.attachment-list-popup {
+		width: 80vw;
+		max-width: 800px;
+		max-height: 85vh;
+	}
+	
+	.attachment-detail-popup {
+		width: 70vw;
+		max-width: 600px;
+	}
+	
+	.attachment-popup-header {
+		padding: 16px;
+		border-bottom: 1px solid #eee;
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		background-color: white;
+	}
+	
+	.attachment-popup-title {
+		font-size: 16px;
+		font-weight: 600;
+		color: #2c3e50;
 		margin: 0;
-		list-style: none;
-		max-height: 300px;
+	}
+	
+	.attachment-close-btn {
+		padding: 8px 16px;
+		border: 1px solid #ddd;
+		border-radius: 4px;
+		background-color: white;
+		font-size: 14px;
+		transition: all 0.2s;
+		color: #2c3e50;
+	}
+	
+	.attachment-close-btn:hover {
+		background-color: #f8f9fa;
+	}
+	
+	.attachment-popup-content {
+		padding: 16px;
+		max-height: 60vh;
 		overflow-y: auto;
 	}
-	.attachment-list li {
+	
+	/* 鍔犺浇鐘舵�� */
+	.attachment-loading {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		padding: 40px 20px;
+		gap: 16px;
+	}
+	
+	.loading-spinner {
+		width: 32px;
+		height: 32px;
+		border: 3px solid #f3f3f3;
+		border-top: 3px solid #3498db;
+		border-radius: 50%;
+		animation: spin 1s linear infinite;
+	}
+	
+	@keyframes spin {
+		0% { transform: rotate(0deg); }
+		100% { transform: rotate(360deg); }
+	}
+	
+	.loading-text {
+		font-size: 14px;
+		color: #7f8c8d;
+	}
+	
+	/* 绌虹姸鎬� */
+	.attachment-empty {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		padding: 40px 20px;
+		gap: 12px;
+		text-align: center;
+	}
+	
+	.empty-icon {
+		font-size: 36px;
+		opacity: 0.6;
+	}
+	
+	.empty-text {
+		font-size: 16px;
+		color: #7f8c8d;
+		font-weight: 500;
+	}
+	
+	.empty-hint {
+		font-size: 14px;
+		color: #95a5a6;
+	}
+	
+	/* 闄勪欢鍒楄〃甯冨眬 */
+	.attachment-list {
+		display: flex;
+		flex-direction: column;
+		gap: 16px;
+	}
+	
+	.attachment-item {
+		background-color: white;
+		border-radius: 8px;
+		box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
+		overflow: hidden;
+		transition: all 0.3s;
+		border: 1px solid #eee;
+	}
+	
+	.attachment-item:hover {
+		box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
+	}
+	
+	.attachment-info {
+		padding: 16px;
+		border-bottom: 1px solid #eee;
 		display: flex;
 		align-items: center;
-		justify-content: space-between;
-		padding: 12px 0;
-		border-bottom: 1px solid #f0f0f0;
+		gap: 16px;
 	}
-	.attachment-info {
-		flex: 1;
-		margin-right: 10px;
-	}
-	.attachment-name {
-		color: #3498db;
-		cursor: pointer;
-		font-weight: 500;
-		transition: color 0.2s;
-		display: block;
-		margin-bottom: 4px;
-	}
-	.attachment-name:hover {
-		color: #217dbb;
-		text-decoration: underline;
-	}
-	.attachment-meta {
-		font-size: 12px;
-	}
-	.attachment-type {
-		color: #7f8c8d;
-		font-style: italic;
-	}
-	.attachment-actions {
+	
+	.file-type-badge {
+		width: 40px;
+		height: 40px;
+		border-radius: 8px;
 		display: flex;
-		gap: 8px;
+		align-items: center;
+		justify-content: center;
+		font-size: 20px;
+		background: #f8f9fa;
+		border: 2px solid #e9ecef;
 		flex-shrink: 0;
 	}
-	.attachment-list .secondary-btn {
-		padding: 4px 10px;
-		font-size: 13px;
-		border-radius: 3px;
-		background: #f5f7fa;
-		color: #333;
-		border: 1px solid #dbe2ea;
-		transition: background 0.2s, color 0.2s;
+	
+	.file-type-badge.large {
+		width: 56px;
+		height: 56px;
+		font-size: 28px;
 	}
-	.attachment-list .secondary-btn:hover {
-		background: #e6f0fa;
-		color: #1976d2;
+	
+	.file-type-badge.file-pdf { background: #ffe6e6; border-color: #ffcccc; }
+	.file-type-badge.file-image { background: #e6f3ff; border-color: #cce7ff; }
+	.file-type-badge.file-text { background: #e6ffe6; border-color: #ccffcc; }
+	.file-type-badge.file-word { background: #e6f0ff; border-color: #cce0ff; }
+	.file-type-badge.file-excel { background: #e6ffe6; border-color: #ccffcc; }
+	.file-type-badge.file-powerpoint { background: #fff0e6; border-color: #ffe0cc; }
+	.file-type-badge.file-archive { background: #f0e6ff; border-color: #e0ccff; }
+	.file-type-badge.file-cad { background: #e6fff0; border-color: #ccffe0; }
+	.file-type-badge.file-unknown { background: #f5f5f5; border-color: #e0e0e0; }
+	
+	.attachment-details {
+		flex: 1;
+		min-width: 0;
 	}
-	.preview-btn {
-		background: #e8f5e8 !important;
-		color: #2e7d2e !important;
-		border-color: #a5d6a5 !important;
+	
+	.attachment-name {
+		font-size: 16px;
+		font-weight: 600;
+		color: #2c3e50;
+		cursor: pointer;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+		margin-bottom: 8px;
+		transition: color 0.2s;
 	}
-	.preview-btn:hover {
-		background: #d4eecc !important;
-		color: #1e5f1e !important;
+	
+	.attachment-name:hover {
+		color: #3498db;
 	}
-	.attachment-popup-close {
-		margin-top: 18px;
-		width: 100%;
-		background: #e0e0e0;
-		color: #444;
+	
+	.attachment-meta {
+		display: flex;
+		gap: 16px;
+		font-size: 12px;
+		color: #95a5a6;
+	}
+	
+	.meta-type {
+		background-color: #ecf0f1;
+		padding: 2px 6px;
+		border-radius: 10px;
+		color: #7f8c8d;
+	}
+	
+	.meta-version {
+		background-color: #e8f5e8;
+		padding: 2px 6px;
+		border-radius: 10px;
+		color: #2e7d32;
+	}
+	
+	.meta-date {
+		background-color: #fff3e0;
+		padding: 2px 6px;
+		border-radius: 10px;
+		color: #f57c00;
+	}
+	
+	.attachment-actions {
+		padding: 12px 16px;
+		border-top: 1px solid #eee;
+		display: flex;
+		gap: 8px;
+		background-color: #f8f9fa;
+	}
+	
+	/* 鎸夐挳鏍峰紡 */
+	.btn-secondary {
+		padding: 8px 16px;
+		border: 1px solid #ddd;
 		border-radius: 4px;
-		font-size: 15px;
-		padding: 8px 0;
-		border: none;
-		transition: background 0.2s;
+		background-color: white;
+		font-size: 14px;
+		transition: all 0.2s;
+		color: #2c3e50;
+		flex: 1;
 	}
-	.attachment-popup-close:hover {
-		background: #bdbdbd;
+	
+	.btn-secondary:hover {
+		background-color: #f8f9fa;
+	}
+	
+	.btn-primary {
+		padding: 8px 16px;
+		border: 1px solid #3498db;
+		border-radius: 4px;
+		background-color: #3498db;
+		color: white;
+		font-size: 14px;
+		transition: all 0.2s;
+		flex: 1;
+	}
+	
+	.btn-primary:hover {
+		background-color: #2980b9;
+	}
+	
+	.btn-success {
+		padding: 8px 16px;
+		border: 1px solid #2ecc71;
+		border-radius: 4px;
+		background-color: #2ecc71;
+		color: white;
+		font-size: 14px;
+		transition: all 0.2s;
+		flex: 1;
+	}
+	
+	.btn-success:hover {
+		background-color: #27ae60;
+	}
+	
+	/* 闄勪欢璇︽儏鏍峰紡 */
+	.attachment-detail-header {
+		display: flex;
+		align-items: center;
+		gap: 20px;
+		margin-bottom: 20px;
+		padding-bottom: 16px;
+		border-bottom: 1px solid #eee;
+	}
+	
+	.attachment-detail-title {
+		font-size: 18px;
+		font-weight: 600;
+		color: #2c3e50;
+		flex: 1;
+		word-break: break-all;
+	}
+	
+	.attachment-detail-info {
+		margin-bottom: 20px;
+	}
+	
+	.info-row {
+		display: flex;
+		margin-bottom: 12px;
+		gap: 16px;
+	}
+	
+	.info-item {
+		flex: 1;
+	}
+	
+	.info-label {
+		display: block;
+		font-size: 12px;
+		color: #7f8c8d;
+		margin-bottom: 4px;
+	}
+	
+	.info-content {
+		font-size: 14px;
+		color: #2c3e50;
+		line-height: 1.5;
+	}
+	
+	.attachment-detail-actions {
+		padding: 12px 16px;
+		border-top: 1px solid #eee;
+		display: flex;
+		gap: 8px;
+		background-color: #f8f9fa;
 	}
 
 	/* 鍝嶅簲寮忚璁� */
@@ -2670,4 +3884,677 @@
 		flex-direction: column;
 		align-items: center;
 	}
+	
+	/* 鎵弿鎸夐挳鏍峰紡 */
+	.scan-btn {
+		background: linear-gradient(135deg, #4CAF50, #45a049);
+		color: white;
+		border: none;
+		border-radius: 8px;
+		padding: 12px 20px;
+		font-size: 14px;
+		font-weight: 600;
+		cursor: pointer;
+		transition: all 0.3s ease;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		gap: 8px;
+		box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+	}
+	
+	.scan-btn:hover {
+		background: linear-gradient(135deg, #45a049, #3d8b40);
+		transform: translateY(-1px);
+		box-shadow: 0 4px 8px rgba(0,0,0,0.15);
+	}
+	
+	/* 鐗╂枡淇℃伅鏄剧ず鏍峰紡 */
+	.material-info-display {
+		margin-top: 16px;
+		padding: 16px;
+		background: linear-gradient(135deg, #f8f9fa, #e9ecef);
+		border-radius: 8px;
+		border: 1px solid #dee2e6;
+		box-shadow: 0 2px 4px rgba(0,0,0,0.05);
+	}
+	
+	.material-info-display h4 {
+		margin: 0 0 12px 0;
+		color: #495057;
+		font-size: 16px;
+		font-weight: 600;
+		text-align: center;
+	}
+	
+	.material-detail {
+		display: flex;
+		flex-direction: column;
+		gap: 8px;
+	}
+	
+	.detail-row {
+		display: flex;
+		align-items: center;
+		padding: 6px 0;
+		border-bottom: 1px solid #e9ecef;
+	}
+	
+	.detail-row:last-child {
+		border-bottom: none;
+	}
+	
+	.detail-label {
+		min-width: 80px;
+		font-weight: 600;
+		color: #6c757d;
+		font-size: 14px;
+	}
+	
+	.detail-value {
+		flex: 1;
+		color: #212529;
+		font-size: 14px;
+		font-weight: 500;
+		word-break: break-all;
+	}
+	
+	.detail-value.barcode-value {
+		font-family: 'Courier New', monospace;
+		font-weight: 600;
+		color: #2c3e50;
+		background-color: #f8f9fa;
+		padding: 4px 8px;
+		border-radius: 4px;
+		border: 1px solid #dee2e6;
+		font-size: 13px;
+		letter-spacing: 0.5px;
+	}
+	
+	/* 鐮村潖瀹為獙寮圭獥鏍峰紡 */
+	.destruction-popup {
+		width: 90vw;
+		max-width: 500px;
+		min-height: 300px;
+	}
+	
+	/* 鎵弿姝ラ鏍峰紡 */
+	.scan-step {
+		text-align: center;
+		padding: 40px 20px;
+	}
+	
+	/* 宸叉湁璁板綍姝ラ鏍峰紡 */
+	.existing-record-step {
+		padding: 20px;
+		text-align: center;
+	}
+	
+	.existing-icon {
+		font-size: 48px;
+		text-align: center;
+		margin-bottom: 16px;
+	}
+	
+	.existing-title {
+		font-size: 18px;
+		font-weight: 600;
+		color: #2c3e50;
+		text-align: center;
+		margin-bottom: 12px;
+	}
+	
+	.existing-description {
+		font-size: 14px;
+		color: #7f8c8d;
+		text-align: center;
+		margin-bottom: 20px;
+	}
+	
+	/* 褰撳墠鐮村潖瀹為獙鏁伴噺鏄剧ず */
+	.current-phsy-display {
+		margin: 20px 0;
+		padding: 16px;
+		background: linear-gradient(135deg, #f8f9fa, #e9ecef);
+		border-radius: 8px;
+		border: 1px solid #dee2e6;
+		box-shadow: 0 2px 4px rgba(0,0,0,0.05);
+	}
+	
+	.phsy-info {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		gap: 8px;
+	}
+	
+	.phsy-label {
+		font-size: 16px;
+		font-weight: 600;
+		color: #495057;
+	}
+	
+	.phsy-value {
+		font-size: 18px;
+		font-weight: 700;
+		color: #e74c3c;
+		background-color: #fff;
+		padding: 4px 12px;
+		border-radius: 4px;
+		border: 1px solid #e74c3c;
+	}
+	
+	.scan-icon {
+		font-size: 64px;
+		margin-bottom: 20px;
+		opacity: 0.8;
+	}
+	
+	.scan-title {
+		font-size: 20px;
+		font-weight: 600;
+		color: #2c3e50;
+		margin-bottom: 12px;
+	}
+	
+	.scan-description {
+		font-size: 14px;
+		color: #7f8c8d;
+		margin-bottom: 30px;
+		line-height: 1.5;
+	}
+	
+	/* 鎵弿姝ラ鎸夐挳甯冨眬 */
+	.scan-actions {
+		display: flex;
+		gap: 12px;
+		justify-content: center;
+		align-items: center;
+	}
+	
+	/* 缁撴灉姝ラ鏍峰紡 */
+	.result-step {
+		padding: 20px;
+	}
+	
+	.scan-success-icon {
+		font-size: 48px;
+		text-align: center;
+		margin-bottom: 16px;
+	}
+	
+	.scan-success-title {
+		font-size: 18px;
+		font-weight: 600;
+		color: #27ae60;
+		text-align: center;
+		margin-bottom: 20px;
+	}
+	
+	/* 鐮村潖瀹為獙鎿嶄綔鎸夐挳鏍峰紡 */
+	.destruction-actions {
+		display: flex;
+		gap: 8px;
+		margin-top: 24px;
+		justify-content: center;
+		flex-wrap: wrap;
+	}
+	
+	.destruction-btn {
+		padding: 10px 16px;
+		border: none;
+		border-radius: 8px;
+		font-size: 14px;
+		font-weight: 600;
+		cursor: pointer;
+		transition: all 0.3s ease;
+		min-width: 80px;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex: 1;
+		max-width: 120px;
+	}
+	
+	.destruction-btn.confirm-btn {
+		background: linear-gradient(135deg, #27ae60, #2ecc71);
+		color: white;
+		box-shadow: 0 2px 8px rgba(39, 174, 96, 0.3);
+	}
+	
+	.destruction-btn.confirm-btn:hover:not(:disabled) {
+		background: linear-gradient(135deg, #229954, #27ae60);
+		transform: translateY(-1px);
+		box-shadow: 0 4px 12px rgba(39, 174, 96, 0.4);
+	}
+	
+	.destruction-btn.confirm-btn:disabled {
+		background: #bdc3c7;
+		color: #7f8c8d;
+		cursor: not-allowed;
+		transform: none;
+		box-shadow: none;
+	}
+	
+	.destruction-btn.cancel-btn {
+		background: linear-gradient(135deg, #95a5a6, #7f8c8d);
+		color: white;
+		box-shadow: 0 2px 8px rgba(149, 165, 166, 0.3);
+	}
+	
+	.destruction-btn.cancel-btn:hover {
+		background: linear-gradient(135deg, #7f8c8d, #6c7b7d);
+		transform: translateY(-1px);
+		box-shadow: 0 4px 12px rgba(149, 165, 166, 0.4);
+	}
+	
+	.destruction-btn.modify-btn {
+		background: linear-gradient(135deg, #f39c12, #e67e22);
+		color: white;
+		box-shadow: 0 2px 8px rgba(243, 156, 18, 0.3);
+	}
+	
+	.destruction-btn.modify-btn:hover {
+		background: linear-gradient(135deg, #e67e22, #d35400);
+		transform: translateY(-1px);
+		box-shadow: 0 4px 12px rgba(243, 156, 18, 0.4);
+	}
+	
+	.destruction-btn.delete-btn {
+		background: linear-gradient(135deg, #e74c3c, #c0392b);
+		color: white;
+		box-shadow: 0 2px 8px rgba(231, 76, 60, 0.3);
+	}
+	
+	.destruction-btn.delete-btn:hover {
+		background: linear-gradient(135deg, #c0392b, #a93226);
+		transform: translateY(-1px);
+		box-shadow: 0 4px 12px rgba(231, 76, 60, 0.4);
+	}
+	
+	/* 琛ㄥ崟杈撳叆妗嗘牱寮忎紭鍖� */
+	.form-input {
+		width: 100%;
+		padding: 12px 16px;
+		border: 2px solid #e9ecef;
+		border-radius: 8px;
+		font-size: 16px;
+		transition: border-color 0.3s ease;
+		box-sizing: border-box;
+		background-color: #fff !important;
+		color: #333 !important;
+		-webkit-appearance: none;
+		-moz-appearance: none;
+		appearance: none;
+		-webkit-user-select: text !important;
+		-moz-user-select: text !important;
+		-ms-user-select: text !important;
+		user-select: text !important;
+		pointer-events: auto !important;
+		opacity: 1 !important;
+		z-index: 1 !important;
+	}
+	
+	.form-input:focus {
+		border-color: #3498db;
+		outline: none;
+		box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
+		background-color: #fff;
+	}
+	
+	/* 绠�鍗曡緭鍏ユ鏍峰紡 - 鍙傝�僑J.vue */
+	.info-input {
+		flex: 1;
+		padding: 12px 16px;
+		border: 2px solid #ddd;
+		border-radius: 6px;
+		background-color: white;
+		font-size: 16px;
+		width: 100%;
+		box-sizing: border-box;
+		min-height: 44px;
+		line-height: 1.4;
+	}
+	
+	.info-input:focus {
+		border-color: #3498db;
+		outline: none;
+		box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
+	}
+	
+	/* 杈撳叆妗嗗寘瑁呭櫒 */
+	.input-wrapper {
+		position: relative;
+		width: 100%;
+	}
+	
+	/* 鐮村潖瀹為獙杈撳叆妗嗙壒娈婃牱寮� */
+	.destruction-input {
+		background-color: #fff !important;
+		border: 2px solid #e9ecef !important;
+		color: #333 !important;
+		font-size: 16px !important;
+		padding: 12px 16px !important;
+		width: 100% !important;
+		box-sizing: border-box !important;
+		-webkit-user-select: text !important;
+		-moz-user-select: text !important;
+		-ms-user-select: text !important;
+		user-select: text !important;
+		-webkit-appearance: none !important;
+		-moz-appearance: none !important;
+		appearance: none !important;
+		pointer-events: auto !important;
+		opacity: 1 !important;
+		z-index: 1 !important;
+	}
+	
+	.destruction-input:focus {
+		border-color: #3498db !important;
+		background-color: #fff !important;
+		outline: none !important;
+		box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1) !important;
+	}
+	
+	.destruction-input:disabled {
+		background-color: #f5f5f5 !important;
+		color: #999 !important;
+		cursor: not-allowed !important;
+	}
+	
+	/* uni-easyinput 鏍峰紡 */
+	.destruction-input-uni {
+		width: 100% !important;
+	}
+	
+	.destruction-input-uni .uni-easyinput__content {
+		border: 2px solid #e9ecef !important;
+		border-radius: 8px !important;
+		background-color: #fff !important;
+	}
+	
+	.destruction-input-uni .uni-easyinput__content-input {
+		font-size: 16px !important;
+		color: #333 !important;
+		padding: 12px 16px !important;
+	}
+	
+	/* 妯℃嫙杈撳叆妗嗘牱寮� */
+	.fake-input {
+		width: 100%;
+		padding: 12px 16px;
+		border: 2px solid #e9ecef;
+		border-radius: 8px;
+		background-color: #fff;
+		font-size: 16px;
+		color: #333;
+		cursor: pointer;
+		transition: border-color 0.3s ease;
+		box-sizing: border-box;
+		min-height: 44px;
+		display: flex;
+		align-items: center;
+	}
+	
+	.fake-input:hover {
+		border-color: #3498db;
+	}
+	
+	.fake-input.error {
+		border-color: #e74c3c;
+	}
+	
+	.fake-input .placeholder {
+		color: #999;
+	}
+	
+	/* 绠�鍖栫殑杈撳叆妗嗘牱寮� */
+	.simple-input {
+		width: 100%;
+		padding: 12px 16px;
+		border: 2px solid #e9ecef;
+		border-radius: 8px;
+		font-size: 16px;
+		color: #333;
+		background-color: #fff;
+		box-sizing: border-box;
+		outline: none;
+		-webkit-appearance: none;
+		-moz-appearance: none;
+		appearance: none;
+		-webkit-user-select: text;
+		-moz-user-select: text;
+		-ms-user-select: text;
+		user-select: text;
+		-webkit-tap-highlight-color: transparent;
+	}
+	
+	.simple-input:focus {
+		border-color: #3498db;
+		-webkit-user-select: text;
+		-moz-user-select: text;
+		-ms-user-select: text;
+		user-select: text;
+	}
+	
+	/* 閲嶆柊璁捐鐨勮緭鍏ュ尯鍩熸牱寮� */
+	.input-section {
+		margin: 20px 0;
+		padding: 20px;
+		background: #f8f9fa;
+		border-radius: 12px;
+		border: 1px solid #e9ecef;
+	}
+	
+	.input-title {
+		font-size: 16px;
+		font-weight: 600;
+		color: #2c3e50;
+		margin-bottom: 12px;
+		text-align: center;
+	}
+	
+	.input-container {
+		display: flex;
+		justify-content: center;
+		margin-bottom: 8px;
+	}
+	
+	.input-box {
+		width: 200px;
+		height: 50px;
+		border: 2px solid #3498db;
+		border-radius: 8px;
+		background-color: #fff;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		cursor: pointer;
+		transition: all 0.3s ease;
+		box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+	}
+	
+	.input-box:hover {
+		border-color: #2980b9;
+		box-shadow: 0 4px 8px rgba(0,0,0,0.15);
+		transform: translateY(-1px);
+	}
+	
+	.input-box:active {
+		transform: translateY(0);
+		box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+	}
+	
+	.input-value {
+		font-size: 18px;
+		font-weight: 600;
+		color: #2c3e50;
+	}
+	
+	.input-placeholder {
+		font-size: 16px;
+		color: #7f8c8d;
+		font-style: italic;
+	}
+	
+	.error-tip {
+		text-align: center;
+		color: #e74c3c;
+		font-size: 14px;
+		margin-top: 8px;
+	}
+	
+	.form-label {
+		display: block;
+		font-weight: 600;
+		color: #2c3e50;
+		margin-bottom: 8px;
+		font-size: 14px;
+	}
+	
+	.form-group {
+		margin-bottom: 20px;
+	}
+	
+	/* 閿欒淇℃伅鏍峰紡 */
+	.error-message {
+		color: #e74c3c;
+		font-size: 12px;
+		margin-top: 4px;
+		text-align: center;
+	}
+	
+	/* 鍫电┐鐩稿叧鏍峰紡 */
+	.block-hole-btn {
+		background-color: #f39c12;
+		color: white;
+		padding: 6px 12px;
+		border: none;
+		border-radius: 4px;
+		cursor: pointer;
+		font-size: 12px;
+		transition: all 0.3s ease;
+	}
+	
+	.block-hole-btn:hover:not(.disabled) {
+		background-color: #e67e22;
+		transform: translateY(-1px);
+	}
+	
+	.block-hole-btn.disabled {
+		background-color: #bdc3c7;
+		color: #7f8c8d;
+		cursor: not-allowed;
+	}
+	
+	.blocked-info {
+		color: #e74c3c;
+		font-size: 12px;
+		margin-left: 8px;
+		font-weight: bold;
+	}
+	
+	.block-hole-popup,
+	.global-block-hole-popup {
+		width: 80vw;
+		max-width: 500px;
+		min-height: 300px;
+	}
+	
+	.block-hole-content {
+		padding: 20px;
+	}
+	
+	.hole-info {
+		margin-bottom: 20px;
+		padding: 15px;
+		background-color: #f8f9fa;
+		border-radius: 8px;
+		border: 1px solid #e9ecef;
+	}
+	
+	.hole-info .info-label {
+		font-weight: 600;
+		color: #495057;
+		margin-bottom: 8px;
+		display: block;
+	}
+	
+	.input-section {
+		margin-bottom: 20px;
+	}
+	
+	.input-label {
+		font-weight: 600;
+		color: #495057;
+		margin-bottom: 8px;
+		display: block;
+	}
+	
+	.block-hole-input {
+		width: 100%;
+		padding: 12px 16px;
+		border: 2px solid #e9ecef;
+		border-radius: 8px;
+		font-size: 16px;
+		transition: border-color 0.3s ease;
+		box-sizing: border-box;
+		background-color: #fff !important;
+		color: #333 !important;
+		-webkit-user-select: text !important;
+		-moz-user-select: text !important;
+		-ms-user-select: text !important;
+		user-select: text !important;
+		pointer-events: auto !important;
+		opacity: 1 !important;
+		/* 绉婚櫎z-index锛岄伩鍏嶉伄鎸″脊绐� */
+	}
+	
+	.block-hole-input:focus {
+		border-color: #3498db;
+		outline: none;
+		box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
+	}
+	
+	.block-hole-actions {
+		display: flex;
+		gap: 12px;
+		justify-content: center;
+		margin-top: 20px;
+	}
+	
+	.block-hole-btn.confirm {
+		background: linear-gradient(135deg, #27ae60, #2ecc71);
+		color: white;
+		padding: 12px 24px;
+		min-width: 100px;
+	}
+	
+	.block-hole-btn.confirm:hover:not(:disabled) {
+		background: linear-gradient(135deg, #229954, #27ae60);
+	}
+	
+	.block-hole-btn.confirm:disabled {
+		background: #bdc3c7;
+		color: #7f8c8d;
+		cursor: not-allowed;
+	}
+	
+	.block-hole-btn.cancel {
+		background: linear-gradient(135deg, #95a5a6, #7f8c8d);
+		color: white;
+		padding: 12px 24px;
+		min-width: 100px;
+	}
+	
+	.block-hole-btn.cancel:hover {
+		background: linear-gradient(135deg, #7f8c8d, #6c7b7d);
+	}
+	
+	
+	.blocked-holes-info {
+		color: #e74c3c;
+		font-weight: bold;
+		margin-left: 8px;
+	}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3