From 218e046d9339ddf3a729930f6bb7b0b77bbed858 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期五, 19 十二月 2025 20:01:32 +0800
Subject: [PATCH] 新增并板入库

---
 pages/sockroom/sockroom.vue | 1489 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 1,094 insertions(+), 395 deletions(-)

diff --git a/pages/sockroom/sockroom.vue b/pages/sockroom/sockroom.vue
index f5199ee..7d4991d 100644
--- a/pages/sockroom/sockroom.vue
+++ b/pages/sockroom/sockroom.vue
@@ -1,29 +1,32 @@
 <template>
 	<view class="sockpage">
 		<view class="column">
-			<!-- 鎵樼洏缂栫爜鏍忥紙瀵瑰簲鍚庣barcode锛� -->
+			<!-- 鎵樼洏缂栫爜 -->
 			<view class="form-card">
 				<view class="form-row">
 					<view class="label">
 						<text class="required">*</text>鎵樼洏缂栫爜锛�
 					</view>
-					<view class="picker-wrap" @click="scan" hover-class="picker-hover">
+					<view class="picker-wrap">
 						<view class="input-box">
-							<text class="input-placeholder" v-if="!barcode">鐐瑰嚮鎵爜褰曞叆</text>
-							<text class="input-value" v-else>{{barcode}}</text>
+							<input 
+								type="text"
+								v-model="barcode"
+								placeholder="璇锋壂鐮�"
+								placeholder-class="input-placeholder"
+							/>
 						</view>
-						<view class="scan-icon">馃摲</view>
 					</view>
 				</view>
 			</view>
 			
-			<!-- 绠卞瀷鏍忥紙瀵瑰簲鍚庣boxType锛� -->
+			<!-- 绠卞瀷閫夋嫨 -->
 			<view class="form-card">
 				<view class="form-row">
 					<view class="label">
-						<text class="required">*</text>绠�    鍨嬶細
+						<text class="required">*</text>绠卞瀷锛�
 					</view>
-					<view class="picker-wrap" hover-class="picker-hover">
+					<view class="picker-wrap">
 						<picker @change="modePickerChange" :value="index_mode" :range="mode">
 							<view class="input-box">
 								<text class="input-placeholder" v-if="!mode.length || !mode[index_mode]">璇烽�夋嫨绠卞瀷</text>
@@ -34,338 +37,821 @@
 				</view>
 			</view>
 			
-			<!-- 鐗╂枡淇℃伅杈撳叆鏍忥紙瀵瑰簲鍚庣MatList锛� -->
+			<!-- 鐗╂枡鐮佹壂鐮侊紙闅愯棌浣嗗彲鐢級 -->
+			<!-- <view class="form-card" style="height: 0; overflow: hidden; padding: 0; margin: 0;"> -->
+			<view class="form-card" style=" overflow: hidden; padding: 0; margin: 0;">
+				<view class="form-row">
+					<view class="label">
+						<text class="required">*</text>鐗╂枡鐮侊細
+					</view>
+					<view class="picker-wrap">
+						<view class="input-box">
+							<input 
+								type="text"
+								v-model="scanBuffer"
+								placeholder="璇锋壂鐮�"
+								@input="handleMaterialScan"
+								ref="scanInput"
+							/>
+						</view>
+					</view>
+				</view>
+			</view>
+			
+			<!-- 鐗╂枡淇℃伅 -->
 			<view class="form-card material-card">
 				<view class="card-title">鐗╂枡淇℃伅</view>
-				<view class="material-grid">
-					<view class="material-item">
-						<text class="material-label"><text class="required">*</text>鍗峰彿锛�</text>
-						<input 
-							class="material-input" 
-							type="text" 
-							v-model="matList.model"
-							placeholder="璇疯緭鍏ュ嵎鍙�"
-							placeholder-class="input-placeholder"
-						/>
+				
+				<!-- 澶氱墿鏂欏垪琛� -->
+				<view class="material-list" v-if="matList.length > 0">
+					<view class="material-item" v-for="(mat, index) in matList" :key="mat.id">
+						<view class="material-header">
+							<text class="material-title">鐗╂枡 {{ index + 1 }}</text>
+							<view class="material-actions">
+								<view class="action-btn" @click="removeMaterial(index)">鍒犻櫎</view>
+							</view>
+						</view>
+						
+						<view class="material-grid">
+							<view class="material-item">
+								<text class="material-label"><text class="required">*</text>浣嶇疆锛�</text>
+								<input 
+									class="material-input" 
+									type="text" 
+									v-model="mat.position"
+									placeholder="璇烽�夋嫨浣嶇疆"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+							<view class="material-item">
+								<text class="material-label"><text class="required">*</text>绠卞彿锛�</text>
+								<input 
+									class="material-input" 
+									type="text" 
+									v-model="mat.batch"
+									placeholder="璇锋壂鐮佹垨杈撳叆绠卞彿"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+							<view class="material-item">
+								<text class="material-label"><text class="required">*</text>鍗峰彿锛�</text>
+								<input 
+									class="material-input" 
+									type="text" 
+									v-model="mat.model"
+									placeholder="璇锋壂鐮佹垨杈撳叆鍗峰彿"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+							<view class="material-item">
+								<text class="material-label">瑙勬牸锛�</text>
+								<input 
+									class="material-input" 
+									type="text" 
+									v-model="mat.matnr"
+									placeholder="璇疯緭鍏ヨ鏍�"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+							<view class="material-item">
+								<text class="material-label">闀垮害锛�</text>
+								<input 
+									class="material-input" 
+									type="number" 
+									v-model="mat.rollExtent"
+									placeholder="璇疯緭鍏ラ暱搴�"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+							<view class="material-item">
+								<text class="material-label">鍑�閲嶏細</text>
+								<input 
+									class="material-input" 
+									type="number" 
+									v-model="mat.weight"
+									placeholder="璇疯緭鍏ュ噣閲�"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+							<view class="material-item">
+								<text class="material-label">姣涢噸锛�</text>
+								<input 
+									class="material-input" 
+									type="number" 
+									v-model="mat.roughWeight"
+									placeholder="璇疯緭鍏ユ瘺閲�"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+							<view class="material-item">
+								<text class="material-label">鎺ュご锛�</text>
+								<input 
+									class="material-input" 
+									type="number" 
+									v-model="mat.joint"
+									placeholder="璇疯緭鍏ユ帴澶存暟"
+									placeholder-class="input-placeholder"
+								/>
+							</view>
+						</view>
 					</view>
-					<view class="material-item">
-						<text class="material-label"><text class="required">*</text>绠卞彿锛�</text>
-						<input 
-							class="material-input" 
-							type="text" 
-							v-model="matList.batch"
-							placeholder="璇疯緭鍏ョ鍙�"
-							placeholder-class="input-placeholder"
-						/>
-					</view>
-					<view class="material-item">
-						<text class="material-label">瑙勬牸锛�</text>
-						<input 
-							class="material-input" 
-							type="text" 
-							v-model="matList.matnr"
-							placeholder="璇疯緭鍏ヨ鏍�"
-							placeholder-class="input-placeholder"
-						/>
-					</view>
-					<view class="material-item">
-						<text class="material-label">闀垮害锛�</text>
-						<input 
-							class="material-input" 
-							type="number" 
-							v-model="matList.rollExtent"
-							placeholder="璇疯緭鍏ラ暱搴�(m)"
-							placeholder-class="input-placeholder"
-						/>
-					</view>
-					<view class="material-item">
-						<text class="material-label">鍑�閲嶏細</text>
-						<input 
-							class="material-input" 
-							type="number" 
-							v-model="matList.weight"
-							placeholder="璇疯緭鍏ュ噣閲�(kg)"
-							placeholder-class="input-placeholder"
-						/>
-					</view>
-					<view class="material-item">
-						<text class="material-label">姣涢噸锛�</text>
-						<input 
-							class="material-input" 
-							type="number" 
-							v-model="matList.roughWeight"
-							placeholder="璇疯緭鍏ユ瘺閲�(kg)"
-							placeholder-class="input-placeholder"
-						/>
-					</view>
-					<view class="material-item">
-						<text class="material-label">鎺ュご锛�</text>
-						<input 
-							class="material-input" 
-							type="number" 
-							v-model="matList.joint"
-							placeholder="璇疯緭鍏ユ帴澶存暟"
-							placeholder-class="input-placeholder"
-						/>
-					</view>
+				</view>
+				
+				<!-- 绌虹姸鎬佹彁绀� -->
+				<view class="empty-state" v-else>
+					<view class="empty-icon">馃摝</view>
+					<text class="empty-text">鏆傛棤鐗╂枡淇℃伅</text>
+					<text class="empty-tip">璇锋壂鎻忕墿鏂欑爜娣诲姞鐗╂枡</text>
+				</view>
+				
+				<!-- 鎵爜鎸夐挳 -->
+				<view class="scan-btn" @click="focusScanInput">
+					<text class="scan-icon">+</text>
+					<text class="scan-text">鎵爜娣诲姞鐗╂枡</text>
 				</view>
 			</view>
 			
 			<!-- 鎿嶄綔鎸夐挳缁� -->
 			<view class="btn-group">
-				<button class="operate-btn scan-btn" @click="scantwo">鎵揣鐗╃爜</button>
-				<button class="operate-btn submit-btn" @click="submit">鎴愬搧鍏ュ簱</button>
+				<button class="operate-btn submit-btn" @click="submit">缁勬墭</button>
+			</view>
+		</view>
+		
+		<!-- 鎵爜纭寮圭獥 -->
+		<view class="modal-mask" v-if="showScanModal" @click="closeModal">
+			<view class="modal-content" @click.stop>
+				<view class="modal-header">
+					<text class="modal-title">鎵爜纭</text>
+				</view>
+				<view class="modal-body">
+					<view class="scan-preview">
+						<text class="scan-label">鎵弿鍒扮墿鏂欙細</text>
+						<text class="scan-code">{{ tempMaterial.model || '鏈煡鐗╂枡' }}</text>
+					</view>
+
+					<view class="preview-grid">
+						<view class="preview-item">
+							<text class="preview-label">绠卞彿锛�</text>
+							<text class="preview-value">{{ tempMaterial.batch || '鏈瘑鍒�' }}</text>
+						</view>
+						<view class="preview-item">
+							<text class="preview-label">鍗峰彿锛�</text>
+							<text class="preview-value">{{ tempMaterial.model || '鏈瘑鍒�' }}</text>
+						</view>
+						<view class="preview-item">
+							<text class="preview-label">瑙勬牸锛�</text>
+							<text class="preview-value">{{ tempMaterial.matnr || '鏈瘑鍒�' }}</text>
+						</view>
+						<view class="preview-item">
+							<text class="preview-label">闀垮害锛�</text>
+							<text class="preview-value">{{ tempMaterial.rollExtent || '鏈瘑鍒�' }}</text>
+						</view>
+						<view class="preview-item">
+							<text class="preview-label">鍑�閲嶏細</text>
+							<text class="preview-value">{{ tempMaterial.weight || '鏈瘑鍒�' }}</text>
+						</view>
+						<view class="preview-item">
+							<text class="preview-label">姣涢噸锛�</text>
+							<text class="preview-value">{{ tempMaterial.roughWeight || '鏈瘑鍒�' }}</text>
+						</view>
+						<view class="preview-item">
+							<text class="preview-label">鎺ュご锛�</text>
+							<text class="preview-value">{{ tempMaterial.joint || '鏈瘑鍒�' }}</text>
+						</view>
+					
+						<view class="preview-item full-width">
+							<text class="preview-label">鐗╂枡浣嶇疆锛�</text>
+							<view class="position-selector" @click.stop="togglePositionPicker">
+								<view class="position-display">
+									<text v-if="positionIndex >= 0">{{ positionOptions[positionIndex].label }}</text>
+									<text v-else class="placeholder">璇烽�夋嫨浣嶇疆</text>
+									<text class="position-arrow">鈻�</text>
+								</view>
+							</view>
+						</view>
+					
+						<!-- 鏂板锛氳嚜瀹氫箟閫夋嫨鍣ㄥ脊鍑哄眰 -->
+						<view v-if="showPositionPicker" class="custom-picker-overlay" @click.stop="closePositionPicker">
+							<view class="custom-picker-content" @click.stop>
+								<view class="custom-picker-header">
+									<text class="custom-picker-title">閫夋嫨鐗╂枡浣嶇疆</text>
+									<view class="custom-picker-close" @click="closePositionPicker">脳</view>
+								</view>
+								<view class="custom-picker-list">
+									<view 
+										v-for="(item, index) in positionOptions" 
+										:key="index"
+										class="custom-picker-item"
+										:class="{'selected': positionIndex === index}"
+										@click="selectPosition(index)"
+									>
+										<text class="custom-picker-text">{{ item.label }}</text>
+										<text v-if="positionIndex === index" class="custom-picker-check">鉁�</text>
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+				<view class="modal-footer">
+					<button class="modal-btn cancel" @click="cancelAddMaterial">鍙栨秷</button>
+					<button class="modal-btn confirm" @click="confirmAddMaterial">纭畾娣诲姞</button>
+				</view>
 			</view>
 		</view>
 	</view>
 </template>
 
 <script>
-import { onLoad } from '../../uni_modules/uview-ui/libs/mixin/mixin'
-
 export default {
-	onLoad(){
-		// 鍏堣鍙栫紦瀛橈紝鍐嶆墽琛岃姹�
-		this.baseUrl = uni.getStorageSync('baseUrl');
-		this.token = uni.getStorageSync('token');
-		// 椤甸潰鍔犺浇鏃� mode 涓虹┖锛岃皟鐢ㄦ帴鍙e悗鎵嶅~鍏呮暟鎹�
-		this.POSTinfo(); 
+	onLoad(options) {
+		this.checkLoginStatus();
+		this.POSTinfo();
 	},
+
+	onShow() {
+		this.checkLoginStatus();
+	},
+
+	onHide() {
+		if (this.scanTimeout) {
+			clearTimeout(this.scanTimeout);
+			this.scanTimeout = null;
+		}
+	},
+
+	onReady() {
+		// 鍦ㄩ〉闈㈠噯澶囧氨缁悗鍒濆鍖栨壂鐮佺洃鍚�
+		setTimeout(() => {
+			this.initScanListener();
+		}, 500);
+	},
+
 	data() {
 		return {
 			baseUrl: '',
-			barcodeNum:'',
-			barcode: '', // 鎵樼洏鐮�
-			palletizingNo: '1', // 鐮佸灈浣嶇紪鍙�
-			boxType: '', // 鏈ㄧ绫诲瀷
-			matList: {
-				matnr: '', // 瑙勬牸
-				maktx: '', // 鐗╂枡鍚嶇О
-				batch: '', // 鏈ㄧ缂栧彿
-				model: '', // 鍗风紪鍙�
-				position: '1', // 鏈ㄧ鐮佸灈浣嶇疆
-				weight: '', // 鍑�閲�
-				roughWeight: '', // 姣涢噸
-				anfme: 1.0, // 榛樿鍊�1.0
-				rollExtent: '', // 鍗烽暱搴�
-				joint: 0, // 鎺ュご
-				cutting: 2, // 榛樿鈥滃惁鈥�
-				qualified: 0, // 榛樿鈥滃惁鈥�
-				modelFront: '', // 鍒嗗垏鍓嶇缂栧彿
-				batchFront: '' ,// 鍒嗗垏鍓嶅嵎鍙�
-			},
-			// 鍏抽敭1锛氬垵濮嬪寲 mode 涓虹┖鏁扮粍 鈫� 椤甸潰鍔犺浇鏃剁鍨嬫棤鏁版嵁
-			mode: [], 
+			token: '',
+			barcode: '',
+			boxType: '',
+			mode: [],
 			index_mode: 0,
-			index_num: 0,
-			submitData: {} // 鏈�缁堟彁浜ょ粰鍚庣鐨勬暟鎹�
-		}
-	},
-	methods: {
-		POSTinfo(){
-			uni.request({
-				url: this.baseUrl + '/mobile/box/type/complete/auth/v2',
-				method:'POST',
-				header: {
-					'Content-Type': 'application/json'
-				},
-				success:(res)=>{
-					// 鎺ュ彛杩斿洖鍚庢墠濉厖绠卞瀷鏁版嵁
-					this.mode = res.data.data.map(item => item.boxSpecs || '').filter(item => item);
-					console.log('鎻愬彇鐨勭鍨嬫暟鎹�:', this.mode);
-				},
-				fail:(err)=>{
-					console.error('鑾峰彇绠卞瀷澶辫触:', err)
-				}
-			})
-		},
-		modePickerChange(e) {
-			this.index_mode = e.detail.value;
-			this.boxType = this.mode[this.index_mode]; // 鍚屾鍒癰oxType
-		},
-		numPickerChange(e) {
-			this.index_num = e.detail.value
-		},
-		// 鍏抽敭2锛氫慨鏀归噸缃柟娉� 鈫� 娓呯┖ mode 鍙婄浉鍏崇姸鎬�
-		resetForm() {
-			this.barcodeNum = '';
-			this.barcode = ''; 
-			this.boxType = ''; 
-			this.index_mode = 0; 
-			this.index_num = 0; 
-			this.submitData = {}; 
-			// 娓呯┖ mode 鏁扮粍 鈫� 绠卞瀷閫夋嫨鍣ㄦ仮澶嶆棤鏁版嵁鐘舵��
-			this.mode = [];
-			// 閲嶇疆鐗╂枡淇℃伅锛堜繚鐣欓粯璁ゅ�硷級
-			this.matList = {
-				matnr: '',
-				maktx: '',
-				batch: '',
+			
+			// 鎵爜鐩稿叧
+			scanBuffer: '',
+			scanTimeout: null,
+			
+			// 鐗╂枡鍒楄〃
+			matList: [],
+			materialId: 1,
+			
+			// 寮圭獥鐩稿叧
+			showScanModal: false,
+			tempMaterial: {
 				model: '',
-				position: '1', 
+				batch: '',
+				matnr: '',
+				rollExtent: '',
 				weight: '',
 				roughWeight: '',
-				anfme: 1.0, 
-				rollExtent: '',
-				joint: 0, 
-				cutting: 2, 
-				qualified: 0, 
-				modelFront: '',
-				batchFront: ''
-			};
-			// 鍙�夛細閲嶇疆鍚庨噸鏂拌姹傜鍨嬫暟鎹紙鏍规嵁闇�姹傞�夋嫨锛�
-			// this.POSTinfo();
+				joint: 0,
+				position: '1' // 鏂板锛氱墿鏂欎綅缃紝榛樿鍊间负"1"(宸�)
+			},
+			
+			// 鏂板锛氱墿鏂欎綅缃笅鎷夋鐩稿叧鏁版嵁
+			positionIndex: 0, // 榛樿閫変腑绗竴涓�(宸�)
+			
+			// 鏂板锛氭帶鍒惰嚜瀹氫箟閫夋嫨鍣ㄦ樉绀�
+			showPositionPicker: false,
+			positionOptions: [
+				{ label: '1', value: '1' },
+				{ label: '2', value: '2' }
+			]
+		}
+	},
+
+	methods: {
+		// 鏂板锛氬垏鎹綅缃�夋嫨鍣ㄦ樉绀�
+		togglePositionPicker() {
+			this.showPositionPicker = !this.showPositionPicker;
 		},
-		submit(){
-		    // 鏍¢獙蹇呭~椤�
-		    if(!this.barcode) return uni.showToast({title: '璇锋壂鎻忔墭鐩樼紪鐮�', icon: 'none'})
-		    if(!this.boxType) return uni.showToast({title: '璇烽�夋嫨绠卞瀷', icon: 'none'})
-		    if(!this.matList.model || !this.matList.batch) return uni.showToast({title: '璇峰~鍐欏嵎鍙�/绠卞彿', icon: 'none'})
-		    
-		    // 鏁版嵁绫诲瀷杞崲
-		    const matItem = {
-		        ...this.matList,
-		        weight: this.matList.weight ? Number(this.matList.weight) : null,
-		        roughWeight: this.matList.roughWeight ? Number(this.matList.roughWeight) : null,
-		        rollExtent: this.matList.rollExtent ? Number(this.matList.rollExtent) : null,
-		        joint: this.matList.joint ? Number(this.matList.joint) : 0,
-		        anfme: 1.0,
-		        cutting: 2,
-		        qualified: 0
-		    }
-		    
-		    // 缁勮鎻愪氦鏁版嵁
-		    this.submitData = {
-		        barcode: this.barcode,
-		        palletizingNo: this.palletizingNo,
-		        boxType: this.boxType,
-		        matList: [matItem]
-		    }
-		    console.log('淇绫诲瀷鍚庣殑鎻愪氦鏁版嵁锛�', this.submitData)
-		    
-		    // 鎻愪氦璇锋眰
-		    uni.request({
-		        url: this.baseUrl + '/mobile/truss/comd/auth/v2',
-		        method: 'POST',
-		        header: {'Content-Type': 'application/json'},
-		        data: this.submitData,
-		        success: (res) => {
-		            console.log('鍚庣杩斿洖锛�', res)
-		            uni.showToast({title:'鎻愪氦鎴愬姛',icon: 'success'})
-		            // 鎻愪氦鎴愬姛鍚庨噸缃墍鏈夋暟鎹�
-		            this.resetForm();
-		            // 鍙�夛細閲嶇疆鍚庨噸鏂版媺鍙栫鍨嬫暟鎹紝鏂逛究涓嬫鎿嶄綔
-		            // setTimeout(() => {
-		            //     this.POSTinfo();
-		            // }, 300);
-		        },
-		        fail: (err) => {
-		            console.error('璇锋眰澶辫触璇︽儏锛�', err)
-		            uni.showToast({title:'鎻愪氦澶辫触',icon: 'none'})
-		        },
-		        complete: (res) => {
-		            console.log('璇锋眰瀹屾垚鐘舵�侊細', res)
-		        }
-		    })
+		
+		// 鏂板锛氬叧闂綅缃�夋嫨鍣�
+		closePositionPicker() {
+			this.showPositionPicker = false;
 		},
-		scan(){
-			uni.scanCode({
-				autoDecodeCharSet: true,
-				scanType: ['barCode'],
-				onlyFromCamera: true,
-				continuousScan: false,
-				camera: 'back',
-				timeout: 5000,
-				success: (res) => {
-					this.barcodeNum = res.result
-					this.barcode = res.result
-					uni.showToast({title: `鎵樼洏缂栫爜鎵爜鎴愬姛`,icon: 'success'})
-				},
-				fail: (err) => {
-					uni.showToast({title: '鎵爜澶辫触鎴栧彇娑�',icon: 'none'})
-				}
-			})
+		
+		// 鏂板锛氶�夋嫨浣嶇疆
+		selectPosition(index) {
+			this.positionIndex = index;
+			this.tempMaterial.position = this.positionOptions[index].value;
+			this.closePositionPicker();
 		},
-		parseQrCodeText(text) {
-			const result = {};
-			const regMap = {
-				model: /鍗峰彿锛�(.+)/,
-				batch: /绠卞彿锛�(.+)/,
-				matnr: /瑙勬牸锛�(.+)/,
-				rollExtent: /闀垮害锛�(.+?)\s*m/,
-				weight: /鍑�閲嶏細(.+?)\s*kg/,
-				roughWeight: /姣涢噸锛�(.+?)\s*kg/,
-				joint: /鎺ュご锛�(.+?)\s*涓�/
-			};
-			Object.keys(regMap).forEach(key => {
-				const match = text.match(regMap[key]);
-				if (match && match[1]) {
-					result[key] = match[1].trim();
+		
+		// 鍒濆鍖栨壂鐮佺洃鍚�
+		initScanListener() {
+			// 鍦╱ni-app涓紝鍙互閫氳繃ref鑾峰彇DOM鑺傜偣锛屼絾瑕佹敞鎰忓钩鍙板樊寮�
+			// 杩欓噷鎴戜滑閫氳繃涓�涓畨鍏ㄧ殑鏂规硶鏉ヨ仛鐒﹁緭鍏ユ
+			this.$nextTick(() => {
+				const input = this.$refs.scanInput;
+				if (input && typeof input.focus === 'function') {
+					input.focus();
 				}
 			});
-			return result;
 		},
-		scantwo(){
-			uni.scanCode({
-				autoDecodeCharSet:true,
-				scanType: ['qrCode'], 
-				success: (res) => {
-					const qrResult = res.result.trim();
-					this.barcodeNum = qrResult;
-					let parseResult = {};
-					
+		
+		// 鑱氱劍鎵爜杈撳叆妗�
+		focusScanInput() {
+			// 浣跨敤uni-app鐨勫畨鍏ㄦ柟娉�
+			this.$nextTick(() => {
+				const input = this.$refs.scanInput;
+				if (input) {
+					// 鍦╱ni-app涓紝input鍙兘鏄竴涓粍浠跺疄渚�
+					// 鎴戜滑闇�瑕佽幏鍙栧叾DOM鑺傜偣鎴栦娇鐢ㄥ钩鍙扮壒瀹氱殑鏂规硶
+					// 杩欓噷鎴戜滑灏濊瘯璋冪敤focus锛屽鏋滀笉鍙敤鍒欒烦杩�
 					try {
-						parseResult = JSON.parse(qrResult);
-						parseResult = {
-							model: parseResult.鍗峰彿 || '',
-							batch: parseResult.绠卞彿 || '',
-							matnr: parseResult.瑙勬牸 || '',
-							rollExtent: (parseResult.闀垮害 || '').replace(/\s*m/g, '') || '',
-							weight: (parseResult.鍑�閲� || '').replace(/\s*kg/g, '') || '',
-							roughWeight: (parseResult.姣涢噸 || '').replace(/\s*kg/g, '') || '',
-							joint: (parseResult.鎺ュご || '').replace(/\s*涓�/g, '') || ''
-						};
-					} catch (e) {
-						parseResult = this.parseQrCodeText(qrResult);
+						if (typeof input.focus === 'function') {
+							input.focus();
+						} else if (input.$el && typeof input.$el.focus === 'function') {
+							// 濡傛灉鏄疺ue缁勪欢瀹炰緥
+							input.$el.focus();
+						}
+					} catch (error) {
+						console.log('鑱氱劍澶辫触锛屼絾涓嶅奖鍝嶅姛鑳�:', error);
 					}
+				}
+			});
+		},
+		
+		// 澶勭悊鎵爜杈撳叆
+		handleMaterialScan(e) {
+			const value = e.detail ? e.detail.value : e.target.value;
+			
+			// 闃叉姈澶勭悊
+			if (this.scanTimeout) {
+				clearTimeout(this.scanTimeout);
+			}
+			
+			this.scanTimeout = setTimeout(() => {
+				if (value && value.trim()) {
+					this.parseBarcodeContent(value.trim());
+					this.showScanModal = true;
+					this.scanBuffer = ''; // 娓呯┖缂撳啿鍖�
 					
-					this.matList = { ...this.matList, ...parseResult };
-					uni.showToast({title: `鐗╂枡淇℃伅鎵爜鎴愬姛`,icon: 'success'});
+					// 姣忔鎵撳紑寮圭獥鏃堕噸缃綅缃�夋嫨涓洪粯璁ゅ��
+					this.positionIndex = 0;
+					this.tempMaterial.position = '1';
+				}
+			}, 300);
+		},
+		
+		// 瑙f瀽鏉$爜鍐呭
+		parseBarcodeContent(content) {
+		    // const lines = content.split(/\\n/).filter(line => line.trim() !== '');
+			const lines = content.split(' ').filter(line => line.trim().length > 0);
+		    
+		    // 娓呯┖涓存椂鏁版嵁
+		    this.tempMaterial = {
+		        model: '',
+		        batch: '',
+		        matnr: '',
+		        rollExtent: '',
+		        weight: '',
+		        roughWeight: '',
+		        joint: 0,
+				position: '1' // 閲嶇疆浣嶇疆涓洪粯璁ゅ��
+		    };
+		    
+		    // 浣跨敤姝e垯琛ㄨ揪寮忔彁鍙栭敭鍊煎[6,7](@ref)
+		    const extractKeyValue = (line) => {
+		        const match = line.match(/([^锛歖+)锛�(.+)/);
+		        if (match && match.length === 3) {
+		            return {
+		                key: match[1].trim(),
+		                value: match[2].trim()
+		            };
+		        }
+		        return null;
+		    };
+		    
+		    // 鎻愬彇鏁板瓧锛堝寘鎷皬鏁帮級[6,7](@ref)
+		    const extractNumber = (str) => {
+		        const match = str.match(/[\d.]+/);
+		        return match ? match[0] : '';
+		    };
+		    
+		    // 閬嶅巻姣忎竴琛岋紝瑙f瀽閿�煎
+		    lines.forEach(line => {
+		        const keyValue = extractKeyValue(line);
+		        if (keyValue) {
+		            const { key, value } = keyValue;
+		            
+		            switch (key) {
+		                case '鍗峰彿':
+		                    this.tempMaterial.model = value;
+		                    break;
+		                case '绠卞彿':
+		                    this.tempMaterial.batch = value;
+		                    break;
+		                case '瑙勬牸':
+		                    this.tempMaterial.matnr = value;
+		                    break;
+		                case '闀垮害':
+		                    this.tempMaterial.rollExtent = extractNumber(value);
+		                    break;
+		                case '鍑�閲�':
+		                    this.tempMaterial.weight = extractNumber(value);
+		                    break;
+		                case '姣涢噸':
+		                    this.tempMaterial.roughWeight = extractNumber(value);
+		                    break;
+		                case '鎺ュご':
+		                    this.tempMaterial.joint = extractNumber(value) || 0;
+		                    break;
+		                default:
+		                    // 鍙互澶勭悊鏈煡閿垨蹇界暐
+		                    break;
+		            }
+		        }
+		    });
+		},
+		
+		// 纭娣诲姞鐗╂枡
+		confirmAddMaterial() {
+			this.closePositionPicker();
+			if (!this.tempMaterial.model) {
+				uni.showToast({
+					title: '鍗峰彿涓嶈兘涓虹┖',
+					icon: 'none'
+				});
+				return;
+			}
+			
+			// 妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鐗╂枡
+			const exists = this.matList.some(item => 
+				item.model === this.tempMaterial.model && 
+				item.batch === this.tempMaterial.batch
+			);
+			
+			if (exists) {
+				uni.showToast({
+					title: '璇ョ墿鏂欏凡瀛樺湪',
+					icon: 'none'
+				});
+				this.closeModal();
+				return;
+			};
+			
+			// 娣诲姞鍒扮墿鏂欏垪琛�
+			const newMaterial = {
+				id: this.materialId++,
+				...this.tempMaterial,
+				position: (this.matList.length + 1).toString(),
+				cutting: 2,
+				qualified: 0
+			};
+			
+			this.matList.push(newMaterial);
+			
+			uni.showToast({
+				title: '鐗╂枡娣诲姞鎴愬姛',
+				icon: 'success'
+			});
+			
+			this.closeModal();
+		},
+		
+		// 鍙栨秷娣诲姞
+		cancelAddMaterial() {
+			this.closeModal();
+		},
+		
+		// 鍏抽棴寮圭獥
+		closeModal() {
+			this.showPositionPicker = false;
+			this.showScanModal = false;
+			this.tempMaterial = {
+				model: '',
+				batch: '',
+				matnr: '',
+				rollExtent: '',
+				weight: '',
+				roughWeight: '',
+				joint: 0,
+				position: '1' // 閲嶇疆浣嶇疆
+			};
+			
+			// 閲嶇疆浣嶇疆閫夋嫨
+			this.positionIndex = 0;
+			
+			// 閲嶆柊鑱氱劍鍒版壂鐮佽緭鍏ユ
+			setTimeout(() => {
+				this.focusScanInput();
+			}, 100);
+		},
+		
+		// 鍒犻櫎鐗╂枡
+		removeMaterial(index) {
+			uni.showModal({
+				title: '纭鍒犻櫎',
+				content: '纭畾瑕佸垹闄よ繖涓墿鏂欏悧锛�',
+				success: (res) => {
+					if (res.confirm) {
+						this.matList.splice(index, 1);
+						uni.showToast({
+							title: '鍒犻櫎鎴愬姛',
+							icon: 'success'
+						});
+					}
+				}
+			});
+		},
+		
+		// 妫�鏌ョ櫥褰曠姸鎬�
+		checkLoginStatus() {
+			this.token = uni.getStorageSync('token');
+			this.baseUrl = uni.getStorageSync('baseUrl');
+			
+			if (!this.token || !this.baseUrl) {
+				uni.showModal({
+					title: '鎻愮ず',
+					content: '璇峰厛鐧诲綍',
+					showCancel: false,
+					success: (res) => {
+						if (res.confirm) {
+							uni.navigateTo({
+								url: '/pages/login/login'
+							});
+						}
+					}
+				});
+				return false;
+			}
+			return true;
+		},
+		
+		// 鑾峰彇绠卞瀷鏁版嵁
+		POSTinfo() {
+			if (!this.checkLoginStatus()) return;
+			
+			uni.showLoading({
+				title: '鍔犺浇涓�...'
+			});
+			
+			uni.request({
+				url: this.baseUrl + '/mobile/box/type/complete/auth/v2',
+				method: 'POST',
+				header: {
+					'Content-Type': 'application/json',
+					'Authorization': 'Bearer ' + this.token
+				},
+				success: (res) => {
+					uni.hideLoading();
+					
+					if (res.data && res.data.code === 200 && Array.isArray(res.data.data)) {
+						this.mode = res.data.data
+							.map(item => item.boxSpecs || item.boxType || item.typeName || item.name || '')
+							.filter(item => item && item.trim() !== '');
+						if (this.mode.length === 0) {
+							uni.showToast({
+								title: '鏃犲彲鐢ㄧ鍨�',
+								icon: 'none'
+							});
+						}
+					} else {
+						uni.showToast({
+							title: res.data?.message || '鑾峰彇绠卞瀷澶辫触',
+							icon: 'none'
+						});
+					}
 				},
 				fail: (err) => {
-					uni.showToast({title: '鎵爜澶辫触鎴栧彇娑�',icon: 'none'})
+					uni.hideLoading();
+					console.error('鑾峰彇绠卞瀷澶辫触:', err);
+					uni.showToast({
+						title: '缃戠粶閿欒',
+						icon: 'none'
+					});
 				}
-			})
+			});
+		},
+		
+		modePickerChange(e) {
+			this.index_mode = e.detail.value;
+			this.boxType = this.mode[this.index_mode];
+		},
+		
+		// 鎻愪氦鏁版嵁
+		submit() {
+			if (!this.checkLoginStatus()) return;
+			
+			// 楠岃瘉蹇呭~椤�
+			if (!this.barcode) {
+				uni.showToast({title: '璇锋壂鎻忔墭鐩樼紪鐮�', icon: 'none'});
+				return;
+			}
+
+			this.boxType = 999;
+			if (!this.boxType) {
+				uni.showToast({title: '璇烽�夋嫨绠卞瀷', icon: 'none'});
+				return;
+			}
+			
+			if (this.matList.length === 0) {
+				uni.showToast({title: '璇疯嚦灏戞坊鍔犱竴涓墿鏂�', icon: 'none'});
+				return;
+			}
+			
+			// 楠岃瘉姣忎釜鐗╂枡鐨勫繀濉瓧娈�
+			for (let i = 0; i < this.matList.length; i++) {
+				const mat = this.matList[i];
+				if (!mat.model) {
+					uni.showToast({title: `鐗╂枡${i+1}鍗峰彿涓嶈兘涓虹┖`, icon: 'none'});
+					return;
+				}
+				if (!mat.batch) {
+					uni.showToast({title: `鐗╂枡${i+1}绠卞彿涓嶈兘涓虹┖`, icon: 'none'});
+					return;
+				}
+			}
+			
+			// 鍑嗗鎻愪氦鏁版嵁
+			const submitData = {
+				barcode: this.barcode,
+				boxType: this.boxType,
+				matList: this.matList.map(mat => ({
+					...mat,
+					weight: mat.weight ? Number(mat.weight) : null,
+					roughWeight: mat.roughWeight ? Number(mat.roughWeight) : null,
+					rollExtent: mat.rollExtent ? Number(mat.rollExtent) : null,
+					joint: mat.joint ? Number(mat.joint) : 0,
+					position: mat.position // 鍖呭惈浣嶇疆淇℃伅
+				}))
+			};
+			
+			console.log('鎻愪氦鏁版嵁:', submitData);
+			
+			// 鍙戦�佽姹�
+			uni.showLoading({
+				title: '鎻愪氦涓�...',
+				mask: true
+			});
+			
+			uni.request({
+				url: this.baseUrl + '/mobile/truss/comd/auth/v2',
+				method: 'POST',
+				header: {
+					'Content-Type': 'application/json',
+					'Authorization': 'Bearer ' + this.token
+				},
+				data: submitData,
+				success: (res) => {
+					uni.hideLoading();
+					
+					if (res.data.code === 200) {
+						uni.showToast({
+							title: '鎻愪氦鎴愬姛',
+							icon: 'success',
+							duration: 2000
+						});
+						
+						// 娓呯┖琛ㄥ崟
+						setTimeout(() => {
+							this.resetForm();
+						}, 1500);
+					} else {
+						uni.showToast({
+							title: res.data.msg || '鎻愪氦澶辫触',
+							icon: 'none'
+						});
+					}
+				},
+				fail: (err) => {
+					uni.hideLoading();
+					console.error('鎻愪氦澶辫触:', err);
+					uni.showToast({
+						title: '缃戠粶閿欒',
+						icon: 'none'
+					});
+				}
+			});
+		},
+		
+		// 閲嶇疆琛ㄥ崟
+		resetForm() {
+			this.barcode = '';
+			this.boxType = '';
+			this.index_mode = 0;
+			this.matList = [];
+			this.materialId = 1;
 		}
 	}
 }
 </script>
 
 <style scoped>
-/* 鍏ㄥ眬鏍峰紡 */
+
+/* 鐗╂枡浣嶇疆閫夋嫨鍣ㄦ牱寮� */
+.full-width {
+	grid-column: 1 / -1; /* 鍗犳弧鏁磋 */
+	margin-top: 8rpx;
+	position: relative;
+	z-index: 100; /* 纭繚鍦ㄥ脊绐楀唴閮ㄥ眰绾ф甯� */
+}
+
+.position-selector {
+	width: 200rpx;
+	display: flex;
+	justify-content: flex-end;
+}
+
+.position-picker {
+	width: 200rpx;
+}
+
+.position-display {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding: 8rpx 16rpx;
+	border: 1rpx solid #e5e7eb;
+	border-radius: 6rpx;
+	background-color: #ffffff;
+	color: #333;
+	font-size: 28rpx;
+	min-height: 40rpx;
+	width: 100%;
+	box-sizing: border-box;
+}
+
+.placeholder {
+	color: #999;
+}
+
+.position-arrow {
+	font-size: 20rpx;
+	color: #666;
+	margin-left: 8rpx;
+}
+/* 鍏ㄥ眬鏍峰紡 - 淇濇寔鍘熸湁椋庢牸 */
 .sockpage {
 	background-color: #f5f7fa;
-	padding: 24rpx;
+	padding: 20rpx;
 	min-height: 100vh;
 }
 
-/* 琛ㄥ崟鍒楀鍣� */
 .column {
 	display: flex;
 	flex-direction: column;
-	gap: 24rpx;
+	gap: 20rpx;
 }
 
-/* 琛ㄥ崟鍗$墖 */
 .form-card {
 	background: #ffffff;
-	border-radius: 12rpx;
-	box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
-	padding: 24rpx;
-	transition: all 0.2s ease;
+	border-radius: 8rpx;
+	padding: 20rpx;
+	box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
 }
 
-/* 鐗╂枡淇℃伅鍗$墖鐗规畩鏍峰紡 */
+.form-row {
+	display: flex;
+	align-items: center;
+	gap: 20rpx;
+}
+
+.label {
+	font-size: 28rpx;
+	color: #333;
+	font-weight: 500;
+	min-width: 140rpx;
+}
+
+.required {
+	color: #e64340;
+	margin-right: 4rpx;
+}
+
+.picker-wrap {
+	flex: 1;
+}
+
+.input-box {
+	border: 1rpx solid #e5e7eb;
+	border-radius: 6rpx;
+	padding: 16rpx 20rpx;
+	background: #fff;
+}
+
+.input-placeholder {
+	color: #999;
+	font-size: 28rpx;
+}
+
+.input-value {
+	color: #333;
+	font-size: 28rpx;
+}
+
+/* 鐗╂枡淇℃伅鍗$墖 */
 .material-card {
 	padding: 0;
 }
@@ -373,173 +859,386 @@
 .card-title {
 	font-size: 30rpx;
 	font-weight: 500;
-	color: #1f2937;
-	padding: 24rpx 24rpx 16rpx;
+	color: #333;
+	padding: 20rpx 20rpx 16rpx;
 	border-bottom: 1rpx solid #f0f0f0;
 }
 
-/* 琛ㄥ崟琛� */
-.form-row {
+/* 鐗╂枡鍒楄〃 */
+.material-list {
+	padding: 0 20rpx;
+}
+
+.material-item {
+	margin-bottom: 20rpx;
+}
+
+.material-header {
 	display: flex;
-	flex-direction: row;
-	align-items: center;
-	gap: 16rpx;
-}
-
-/* 鏍囩鏍峰紡 */
-.label {
-	font-size: 28rpx;
-	color: #374151;
-	font-weight: 500;
-	min-width: 140rpx;
-}
-
-/* 蹇呭~椤规爣绾� */
-.required {
-	color: #ef4444;
-	margin-right: 4rpx;
-}
-
-/* 閫夋嫨鍣ㄥ鍣� */
-.picker-wrap {
-	flex: 1;
-	display: flex;
-	align-items: center;
 	justify-content: space-between;
+	align-items: center;
+	margin-bottom: 16rpx;
+	padding-bottom: 12rpx;
+	border-bottom: 1rpx solid #f0f0f0;
 }
 
-/* 閫夋嫨鍣╤over鎬� */
-.picker-hover {
-	background-color: #f9fafb;
-	border-radius: 8rpx;
-}
-
-/* 杈撳叆妗嗗鍣� */
-.input-box {
-	flex: 1;
+.material-title {
 	font-size: 28rpx;
-	padding: 16rpx 12rpx;
-	border: 1rpx solid #e5e7eb;
-	border-radius: 8rpx;
-	transition: border-color 0.2s ease;
+	font-weight: 500;
+	color: #333;
 }
 
-.input-box:focus-within {
-	border-color: #f97316;
+.material-actions {
+	display: flex;
+	gap: 20rpx;
 }
 
-/* 鍗犱綅绗︽牱寮� */
-.input-placeholder {
-	color: #9ca3af;
-}
-
-/* 杈撳叆鍊兼牱寮� */
-.input-value {
-	color: #1f2937;
-}
-
-/* 鎵爜鍥炬爣 */
-.scan-icon {
+.action-btn {
 	font-size: 24rpx;
-	margin-left: 8rpx;
-	color: #6b7280;
+	color: #e64340;
+	padding: 6rpx 12rpx;
+	border-radius: 4rpx;
+	background: #fff0f0;
 }
 
-/* 鐗╂枡淇℃伅缃戞牸甯冨眬 */
+/* 鐗╂枡缃戞牸 */
 .material-grid {
 	display: grid;
 	grid-template-columns: repeat(2, 1fr);
-	gap: 20rpx;
-	padding: 24rpx;
+	gap: 16rpx;
 }
 
-/* 鐗╂枡淇℃伅椤� */
 .material-item {
 	display: flex;
 	flex-direction: column;
 	gap: 8rpx;
 }
 
-/* 鐗╂枡鏍囩 */
 .material-label {
 	font-size: 26rpx;
-	color: #4b5563;
+	color: #666;
 }
 
-/* 鐗╂枡杈撳叆妗� */
 .material-input {
 	font-size: 28rpx;
-	color: #1f2937;
-	padding: 16rpx 12rpx;
+	color: #333;
+	padding: 12rpx;
 	border: 1rpx solid #e5e7eb;
-	border-radius: 8rpx;
+	border-radius: 6rpx;
 	background-color: #ffffff;
-	transition: border-color 0.2s ease;
 }
 
-.material-input:focus {
-	border-color: #f97316;
-	outline: none;
+/* 绌虹姸鎬� */
+.empty-state {
+	text-align: center;
+	padding: 40rpx 20rpx;
 }
 
-/* 鎸夐挳缁� */
-.btn-group {
-	display: flex;
-	gap: 20rpx;
-	justify-content: center;
-	margin-top: 16rpx;
-	padding: 8rpx 0;
+.empty-icon {
+	font-size: 60rpx;
+	display: block;
+	margin-bottom: 20rpx;
+	opacity: 0.5;
 }
 
-/* 鎿嶄綔鎸夐挳閫氱敤鏍峰紡 */
-.operate-btn {
-	flex: 1;
-	max-width: 200rpx;
-	height: 80rpx;
-	line-height: 80rpx;
+.empty-text {
+	display: block;
 	font-size: 28rpx;
-	font-weight: 500;
-	border-radius: 12rpx;
-	border: none;
-	transition: all 0.2s ease;
-	display: flex;
-	align-items: center;
-	justify-content: center;
+	color: #999;
+	margin-bottom: 10rpx;
+}
+
+.empty-tip {
+	display: block;
+	font-size: 24rpx;
+	color: #ccc;
 }
 
 /* 鎵爜鎸夐挳 */
 .scan-btn {
-	background-color: #3b82f6;
-	color: #ffffff;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	gap: 10rpx;
+	padding: 20rpx;
+	margin: 20rpx 20rpx 20rpx;
+	background: #f0f7ff;
+	border: 1rpx dashed #1989fa;
+	border-radius: 8rpx;
+	color: #1989fa;
+	font-size: 28rpx;
 }
 
-.scan-btn:active {
-	background-color: #2563eb;
-	transform: scale(0.98);
+.scan-icon {
+	font-size: 36rpx;
+	font-weight: bold;
 }
 
-/* 鎻愪氦鎸夐挳 */
-.submit-btn {
-	background-color: #f97316;
-	color: #ffffff;
+/* 鎸夐挳缁� */
+.btn-group {
+	margin-top: 20rpx;
+	padding: 8rpx 0;
+	text-align: center;
 }
 
-.submit-btn:active {
-	background-color: #ea580c;
-	transform: scale(0.98);
+.operate-btn {
+	width: 200rpx;
+	height: 80rpx;
+	line-height: 80rpx;
+	font-size: 30rpx;
+	font-weight: 500;
+	border-radius: 8rpx;
+	border: none;
+	background: #333;
+	color: #fff;
 }
 
-/* 閫傞厤灏忓睆骞� */
-@media (max-width: 375px) {
+/* 寮圭獥鏍峰紡 */
+.modal-mask {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: rgba(0, 0, 0, 0.5);
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	z-index: 1000;
+}
+
+.modal-content {
+	background: #fff;
+	border-radius: 12rpx;
+	width: 600rpx;
+	max-width: 90%;
+	overflow: hidden;
+}
+
+.modal-header {
+	padding: 30rpx 30rpx 20rpx;
+	border-bottom: 1rpx solid #f0f0f0;
+}
+
+.modal-title {
+	font-size: 32rpx;
+	font-weight: 500;
+	color: #333;
+}
+
+.modal-body {
+	padding: 30rpx;
+}
+
+.scan-preview {
+	margin-bottom: 20rpx;
+	padding-bottom: 20rpx;
+	border-bottom: 1rpx solid #f0f0f0;
+}
+
+.scan-label {
+	font-size: 28rpx;
+	color: #666;
+	display: block;
+	margin-bottom: 10rpx;
+}
+
+.scan-code {
+	font-size: 32rpx;
+	color: #333;
+	font-weight: bold;
+	word-break: break-all;
+}
+
+.preview-grid {
+	display: grid;
+	grid-template-columns: repeat(2, 1fr);
+	gap: 15rpx;
+}
+
+.preview-item {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+}
+
+.preview-label {
+	font-size: 28rpx;
+	color: #666;
+}
+
+.preview-value {
+	font-size: 28rpx;
+	color: #333;
+	font-weight: 500;
+}
+
+.modal-footer {
+	display: flex;
+	border-top: 1rpx solid #f0f0f0;
+}
+
+.modal-btn {
+	flex: 1;
+	height: 90rpx;
+	line-height: 90rpx;
+	font-size: 30rpx;
+	border: none;
+	background: transparent;
+	border-radius: 0;
+}
+
+.modal-btn.cancel {
+	color: #999;
+	border-right: 1rpx solid #f0f0f0;
+}
+
+.modal-btn.confirm {
+	color: #1989fa;
+	font-weight: 500;
+}
+
+/* 鑷畾涔夐�夋嫨鍣ㄦ牱寮� */
+.custom-picker-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background-color: rgba(0, 0, 0, 0.5);
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	z-index: 9999; /* 纭繚鍦ㄦ渶涓婂眰 */
+}
+
+.custom-picker-content {
+	background-color: #ffffff;
+	border-radius: 12rpx;
+	width: 600rpx;
+	max-width: 80%;
+	max-height: 70vh;
+	overflow: hidden;
+	box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.15);
+	animation: fadeIn 0.3s ease;
+}
+
+@keyframes fadeIn {
+	from {
+		opacity: 0;
+		transform: translateY(20rpx);
+	}
+	to {
+		opacity: 1;
+		transform: translateY(0);
+	}
+}
+
+.custom-picker-header {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	padding: 30rpx;
+	border-bottom: 1rpx solid #f0f0f0;
+}
+
+.custom-picker-title {
+	font-size: 32rpx;
+	font-weight: 500;
+	color: #333;
+}
+
+.custom-picker-close {
+	font-size: 40rpx;
+	color: #999;
+	line-height: 1;
+	padding: 0 10rpx;
+	cursor: pointer;
+}
+
+.custom-picker-list {
+	max-height: 50vh;
+	overflow-y: auto;
+	padding: 0;
+}
+
+.custom-picker-item {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	padding: 25rpx 30rpx;
+	border-bottom: 1rpx solid #f5f5f5;
+	cursor: pointer;
+	transition: background-color 0.2s;
+}
+
+.custom-picker-item:last-child {
+	border-bottom: none;
+}
+
+.custom-picker-item:hover {
+	background-color: #f8f9fa;
+}
+
+.custom-picker-item.selected {
+	background-color: #f0f7ff;
+	color: #1989fa;
+}
+
+.custom-picker-text {
+	font-size: 30rpx;
+}
+
+.custom-picker-check {
+	font-size: 28rpx;
+	color: #1989fa;
+	font-weight: bold;
+}
+
+/* 寮圭獥鏍峰紡璋冩暣锛岀‘淇濆眰绾у叧绯� */
+.modal-mask {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background: rgba(0, 0, 0, 0.5);
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	z-index: 1000; /* 寮圭獥鍩虹灞傜骇 */
+}
+
+.modal-content {
+	position: relative; /* 纭繚瀛愬厓绱犵浉瀵瑰畾浣� */
+	z-index: 1001; /* 姣旇挋鐗堥珮涓�绾� */
+	background: #fff;
+	border-radius: 12rpx;
+	width: 600rpx;
+	max-width: 90%;
+	overflow: visible; /* 鏀逛负 visible 鍏佽閫夋嫨鍣ㄥ脊鍑� */
+}
+
+/* 鍝嶅簲寮忛�傞厤 */
+@media (max-width: 750rpx) {
 	.material-grid {
 		grid-template-columns: 1fr;
 	}
 	
-	.operate-btn {
-		max-width: 160rpx;
-		height: 72rpx;
-		line-height: 72rpx;
-		font-size: 26rpx;
+	.preview-grid {
+		grid-template-columns: 1fr;
+	}
+	
+	.modal-content {
+		width: 90%;
+	}
+	.custom-picker-content {
+		width: 90%;
+		max-width: 90%;
+	}
+	
+	.custom-picker-item {
+		padding: 20rpx 25rpx;
 	}
 }
 </style>
\ No newline at end of file

--
Gitblit v1.9.1