From d648edc0b6acaf33dac0030b15e01ae6622d0695 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 22 一月 2026 15:00:38 +0800
Subject: [PATCH] #

---
 pages/listing/matnrPalletising.vue        |   90 ++---
 pages/outbound/orderOut/outLocView.vue    |  325 +++++++++++++++++++++
 pages.json                                |    6 
 static/css/common.css                     |  423 ++++++++++++++++++++++++++++
 pages/outbound/orderOut/orderDetlList.vue |   16 
 5 files changed, 800 insertions(+), 60 deletions(-)

diff --git a/pages.json b/pages.json
index 4ac5867..e97a0c3 100644
--- a/pages.json
+++ b/pages.json
@@ -32,6 +32,12 @@
 			}
 		},
 		{
+			"path": "pages/outbound/orderOut/outLocView",
+			"style": {
+				"navigationBarTitleText": "鍑哄簱搴撲綅瑙嗗浘"
+			}
+		},
+		{
 			"path": "pages/emptyTray/outBound",
 			"style": {
 				"navigationBarTitleText": "绌烘墭鍑哄簱"
diff --git a/pages/listing/matnrPalletising.vue b/pages/listing/matnrPalletising.vue
index db3cc7f..590a77a 100644
--- a/pages/listing/matnrPalletising.vue
+++ b/pages/listing/matnrPalletising.vue
@@ -148,7 +148,7 @@
 					<view class="form-item">
 						<text class="form-label">AGV绔欑偣</text>
 						<view class="input-wrapper">
-							<input class="agv-input" type="text" v-model="agvStationInput" placeholder="璇疯緭鍏GV绔欑偣缂栧彿" />
+							<input class="agv-input" type="text" v-model="agvStationInput" placeholder="璇疯緭鍏GV绔欑偣缂栧彿" @input="checkAgvStation()"/>
 						</view>
 					</view>
 					<view class="form-item">
@@ -199,7 +199,8 @@
 				buttonPermissions: [], // 鎸夐挳鏉冮檺鍒楄〃
 				showAgvModal: false, // AGV纭寮圭獥
 				showAgvInputModal: false, // AGV绔欑偣杈撳叆寮圭獥
-				agvStationInput: '' // AGV绔欑偣杈撳叆鍊�
+				agvStationInput: '' ,// AGV绔欑偣杈撳叆鍊�
+				agvStationName: ''
 			}
 		},
 		computed: {
@@ -222,6 +223,37 @@
 			console.log('褰撳墠椤甸潰鎸夐挳鏉冮檺:', this.buttonPermissions);
 		},
 		methods: {
+			async checkAgvStation(){
+				const that = this;
+				if(this.agvStationInput === '' || this.agvStationInput === null){
+					uni.showToast({
+						title: "瀹瑰櫒鐮佷负绌�",
+						icon: "none",
+						position: 'top'
+					})
+					return ;
+				}
+				const {
+					code,
+					data,
+					msg
+				} = await request('/check/agvStation', {
+					transferStationNo: this.agvStationInput
+				})
+				if (code === 200) {
+					this.agvStationName = data.stationName
+				} else {
+					uni.showToast({
+						title: msg,
+						icon: "none",
+						position: 'top'
+					})
+					setTimeout(function() {
+						that.agvStationName = ''
+						that.agvStationInput = ''
+					}, 200);
+				}
+			},
 			pickerChange(e) {
 				const index = e.detail.value
 				this.whAreaId = this.range[index].value
@@ -257,55 +289,7 @@
 				
 				});
 			},
-			// async getDet() {
-			// 	let that = this;
-			// 	const {
-			// 		code,
-			// 		data,
-			// 		msg
-			// 	} = await request('/asnOrderItem/trackCode', {
-			// 		matnrCode: that.matnrCode,
-			// 		asnCode: that.asnCode
-			// 	}, "post")
-			// 	if (code === 200) {
-			// 		data.map(item => {
-			// 			item.receiptQty = 0;
-			// 			item.selected = false;
-			// 		})
-			// 		// for (var i = 0; i < data.length; i++) {
-			// 		// 	data[i].receiptQty =1;
-			// 		// 	data[i].selected = false;							
-			// 		// }
-			// 		if(data !== [] || data !== null){					
-			// 		uni.navigateTo({
-			// 				url: "../listing/itemSelect",
-			// 				success: function(res) {
-			// 					// 閫氳繃eventChannel鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�   鍚戝彟澶栦竴涓〉闈紶閫掑�肩殑
-			// 					res.eventChannel.emit('data', {
-			// 						item: data
-			// 					})
-			// 				},
-			// 				events: {
-			// 					// 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�佸埌褰撳墠椤甸潰鐨勬暟鎹�  鍙﹀涓�涓〉闈紶杩囨潵鐨�
-			// 					backData: function(data) {									
-			// 						that.showBackData(data.data)
-			// 					},
-			// 				},
-						
-						
-			// 			});
-						
-			// 		}
-						
-			// 		// this.list = data
-			// 	} else {
-			// 		uni.showToast({
-			// 			title: msg,
-			// 			icon: "none",
-			// 			position: 'top'
-			// 		})
-			// 	}
-			// },
+
 			async getList() {
 				if(this.container === '' || this.container === null){
 					uni.showToast({
@@ -447,12 +431,14 @@
 			handleAgvYes() {
 				this.showAgvModal = false;
 				this.agvStationInput = '';
+				this.agvStationName = '';
 				this.showAgvInputModal = true;
 			},
 			// 鍏抽棴AGV绔欑偣杈撳叆寮圭獥
 			closeAgvInputModal() {
 				this.showAgvInputModal = false;
 				this.agvStationInput = '';
+				this.agvStationName = '';
 			},
 			// 纭AGV绔欑偣
 			confirmAgvStation() {
@@ -473,7 +459,7 @@
 					return;
 				}
 				this.showAgvInputModal = false;
-				this.submitConfirm(this.agvStationInput);
+				this.submitConfirm(this.agvStationName);
 			},
 		// 鎻愪氦缁勬墭璇锋眰
 	async submitConfirm(agvStation) {
diff --git a/pages/outbound/orderOut/orderDetlList.vue b/pages/outbound/orderOut/orderDetlList.vue
index d9c6d89..8f845ad 100644
--- a/pages/outbound/orderOut/orderDetlList.vue
+++ b/pages/outbound/orderOut/orderDetlList.vue
@@ -42,7 +42,7 @@
 						</view>
 						<view class="info-item">
 							<text class="info-label">鎵规</text>
-							<text class="info-value">{{item.batch || '-'}}</text>
+							<text class="info-value">{{item.splrBatch || '-'}}</text>
 						</view>
 						<view class="info-item">
 							<text class="info-label">璁㈠崟鏁伴噺</text>
@@ -50,7 +50,7 @@
 						</view>
 						<view class="info-item">
 							<text class="info-label">宸插畬鎴�</text>
-							<text class="info-value">{{item.anfme - item.enableQty}}</text>
+							<text class="info-value">{{item.qty}}</text>
 						</view>
 					</view>
 					
@@ -64,8 +64,8 @@
 				</view>
 				
 				<!-- 鍗$墖搴曢儴 -->
-				<view class="card-footer" v-if="item.enableQty > 0">
-					<text class="action-text">鐐瑰嚮缁勬墭鍏ュ簱</text>
+				<view class="card-footer" v-if="item.ableQty > 0">
+					<text class="action-text">鐐瑰嚮鍑哄簱</text>
 					<uni-icons type="right" size="14" color="#0081ff"></uni-icons>
 				</view>
 				<view class="card-footer card-footer-done" v-else>
@@ -158,8 +158,8 @@
 		methods: {
 			// 璁$畻杩涘害
 			getProgress(item) {
-				if (!item.anfme || item.anfme === 0) return 0;
-				const progress = ((item.anfme - item.enableQty) / item.anfme * 100).toFixed(0);
+				if (!item.qty || item.qty === 0) return 0;
+				const progress = (item.qty  / item.anfme * 100).toFixed(0);
 				return Math.min(100, Math.max(0, progress));
 			},
 			// 鎼滅储
@@ -216,7 +216,7 @@
 					this.loading = false;
 				}
 			},
-			// 閫夋嫨鏄庣粏杩涜缁勬墭
+			// 閫夋嫨鏄庣粏杩涜鍑哄簱
 			chose(item) {
 				if (item.enableQty <= 0) {
 					uni.showToast({ title: '璇ユ槑缁嗗凡瀹屾垚', icon: "none", position: 'top' });
@@ -224,7 +224,7 @@
 				}
 				let that = this;
 				uni.navigateTo({
-					url: "../order/orderPakin2",
+					url: "./outLocView",
 					success: function(res) {
 						res.eventChannel.emit('orderItem', {
 							item: item
diff --git a/pages/outbound/orderOut/outLocView.vue b/pages/outbound/orderOut/outLocView.vue
new file mode 100644
index 0000000..7bf1b10
--- /dev/null
+++ b/pages/outbound/orderOut/outLocView.vue
@@ -0,0 +1,325 @@
+<template>
+	<view class="page-container">
+		<!-- 璁㈠崟淇℃伅澶撮儴 -->
+		<view class="order-header" v-if="orderItem">
+			<view class="header-content">
+				<view class="header-row">
+					<text class="header-label">鐗╂枡缂栫爜</text>
+					<text class="header-value">{{orderItem.matnrCode}}</text>
+				</view>
+				<view class="header-row">
+					<text class="header-label">鐗╂枡鍚嶇О</text>
+					<text class="header-value">{{orderItem.maktx || '-'}}</text>
+				</view>
+				<view class="header-row">
+					<text class="header-label">鎬诲嚭搴撴暟閲�</text>
+					<text class="header-value highlight-white">{{orderItem.anfme || 0}}</text>
+				</view>
+				<view class="header-row">
+					<text class="header-label">宸插畬鎴愭暟閲�</text>
+					<text class="header-value highlight-white">{{orderItem.qty || 0}}</text>
+				</view>
+			</view>
+		</view>
+		
+		<!-- 搴撲綅瑙嗗浘鍒楄〃 -->
+		<view class="loc-list">
+			<view class="loc-card" v-for="(item, index) in locList" :key="index">
+				<!-- 鍗$墖澶撮儴 -->
+				<view class="card-header">
+					<view class="loc-info">
+						<text class="loc-code">{{item.locNo || '-'}}</text>
+						<text class="loc-name">{{item.locName || '搴撲綅'}}</text>
+					</view>
+					<view class="qty-badge">
+						<text class="qty-text">{{item.anfme || 0}}</text>
+					</view>
+				</view>
+				
+				<!-- 鍗$墖鍐呭 -->
+				<view class="card-body">
+					<view class="info-grid">
+						<view class="info-item">
+							<text class="info-label">鎵规</text>
+							<text class="info-value">{{item.batch || '-'}}</text>
+						</view>
+						<view class="info-item">
+							<text class="info-label">搴撳瓨鏁伴噺</text>
+							<text class="info-value highlight">{{item.qty || 0}}</text>
+						</view>
+						<view class="info-item">
+							<text class="info-label">鎵樼洏鍙�</text>
+							<text class="info-value">{{item.zpallet || '-'}}</text>
+						</view>
+						<view class="info-item">
+							<text class="info-label">璐ф灦</text>
+							<text class="info-value">{{item.shelfNo || '-'}}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		
+		<!-- 绌虹姸鎬� -->
+		<view class="empty-state" v-if="locList.length === 0 && !loading">
+			<uni-icons type="info" size="60" color="#CCCCCC"></uni-icons>
+			<text class="empty-text">鏆傛棤搴撲綅鏁版嵁</text>
+		</view>
+		
+		<!-- 缁熻淇℃伅 -->
+		<view class="stats-bar" v-if="locList.length > 0">
+			<view class="stats-item">
+				<text class="stats-value">{{locList.length}}</text>
+				<text class="stats-label">搴撲綅鏁�</text>
+			</view>
+			<view class="stats-divider"></view>
+			<view class="stats-item">
+				<text class="stats-value">{{totalQty}}</text>
+				<text class="stats-label">鎬诲簱瀛�</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { request } from '@/common/request.js'
+	export default {
+		data() {
+			return {
+				orderItem: null,
+				locList: [],
+				loading: false,
+			}
+		},
+		computed: {
+			// 璁$畻鎬诲簱瀛樻暟閲�
+			totalQty() {
+				return this.locList.reduce((sum, item) => sum + (item.qty || 0), 0);
+			}
+		},
+		onLoad() {
+			let that = this;
+			const eventChannel = this.getOpenerEventChannel();
+			if (eventChannel) {
+				eventChannel.on('orderItem', function(data) {
+					that.orderItem = data.item;
+					that.getOutLocView(that.orderItem);
+				});
+			}
+		},
+		methods: {
+			// 鑾峰彇鍑哄簱搴撲綅瑙嗗浘
+			async getOutLocView(item) {
+				if (!item) return;
+				this.loading = true;
+				try {
+					const res = await request('/orderOut/getOutLocView', {
+						orderItemId: item.id						
+					}, 'POST', true);
+					
+					if (res.code === 200) {
+						this.locList = res.data || [];
+					} else if (res.code === 403) {
+						uni.showToast({ title: res.msg, icon: "none", position: 'top' });
+						setTimeout(() => {
+							uni.reLaunch({ url: '../login/login' });
+						}, 1000);
+					} else {
+						uni.showToast({ title: res.msg || '鑾峰彇鏁版嵁澶辫触', icon: "none", position: 'top' });
+					}
+				} catch (err) {
+					// request.js 宸茬粡澶勭悊浜嗛敊璇彁绀�
+				} finally {
+					this.loading = false;
+				}
+			}
+		}
+	}
+</script>
+
+<style>
+	/* 寮曞叆鍏叡鏍峰紡 */
+	@import url('@/static/css/common.scss');
+
+	.page-container {
+		padding-bottom: 120rpx;
+	}
+	
+	/* 璁㈠崟澶撮儴 */
+	.order-header {
+		background: linear-gradient(135deg, #0081ff 0%, #1890ff 100%);
+		padding: 16rpx 20rpx;
+	}
+	
+	.header-content {
+		background: rgba(255, 255, 255, 0.15);
+		border-radius: 10rpx;
+		padding: 12rpx 16rpx;
+	}
+	
+	.header-row {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 4rpx 0;
+	}
+	
+	.header-label {
+		font-size: 24rpx;
+		color: rgba(255, 255, 255, 0.7);
+	}
+	
+	.header-value {
+		font-size: 26rpx;
+		color: #ffffff;
+		font-weight: 500;
+	}
+	
+	.header-value.highlight-white {
+		color: #ffeb3b;
+		font-weight: 600;
+	}
+	
+	/* 搴撲綅鍒楄〃 */
+	.loc-list {
+		padding: 0 20rpx;
+	}
+	
+	.loc-card {
+		background: #ffffff;
+		border-radius: 12rpx;
+		margin-top: 12rpx;
+		box-shadow: 0 2rpx 12rpx rgba(0, 129, 255, 0.08);
+		overflow: hidden;
+		border: 1rpx solid #e4e7ed;
+	}
+	
+	/* 鍗$墖澶撮儴 */
+	.card-header {
+		display: flex;
+		justify-content: space-between;
+		align-items: flex-start;
+		padding: 14rpx 16rpx;
+		border-bottom: 1rpx solid #f0f0f0;
+	}
+	
+	.loc-info {
+		flex: 1;
+		padding-right: 12rpx;
+	}
+	
+	.loc-code {
+		font-size: 26rpx;
+		color: #303133;
+		font-weight: 600;
+		display: block;
+	}
+	
+	.loc-name {
+		font-size: 22rpx;
+		color: #909399;
+		margin-top: 4rpx;
+		display: block;
+	}
+	
+	.qty-badge {
+		padding: 4rpx 12rpx;
+		border-radius: 16rpx;
+		flex-shrink: 0;
+		background: linear-gradient(135deg, #0081ff 0%, #1890ff 100%);
+	}
+	
+	.qty-text {
+		font-size: 20rpx;
+		font-weight: 500;
+		color: #ffffff;
+	}
+	
+	/* 鍗$墖鍐呭 */
+	.card-body {
+		padding: 12rpx 16rpx;
+	}
+	
+	.info-grid {
+		display: flex;
+		flex-wrap: wrap;
+	}
+	
+	.info-item {
+		width: 50%;
+		margin-bottom: 8rpx;
+	}
+	
+	.info-label {
+		font-size: 20rpx;
+		color: #909399;
+		display: block;
+	}
+	
+	.info-value {
+		font-size: 24rpx;
+		color: #303133;
+		font-weight: 500;
+		display: block;
+		margin-top: 2rpx;
+	}
+	
+	.info-value.highlight {
+		color: #0081ff;
+		font-weight: 600;
+	}
+	
+	/* 绌虹姸鎬� */
+	.empty-state {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+		padding: 60rpx 0;
+	}
+	
+	.empty-text {
+		margin-top: 20rpx;
+		font-size: 28rpx;
+		color: #909399;
+	}
+	
+	/* 缁熻鏍� */
+	.stats-bar {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		display: flex;
+		align-items: center;
+		justify-content: space-around;
+		background: #ffffff;
+		padding: 16rpx 0;
+		box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06);
+	}
+	
+	.stats-item {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		flex: 1;
+	}
+	
+	.stats-value {
+		font-size: 32rpx;
+		color: #303133;
+		font-weight: 600;
+	}
+	
+	.stats-label {
+		font-size: 20rpx;
+		color: #909399;
+		margin-top: 4rpx;
+	}
+	
+	.stats-divider {
+		width: 1rpx;
+		height: 50rpx;
+		background: #e8e8e8;
+	}
+</style>
diff --git a/static/css/common.css b/static/css/common.css
new file mode 100644
index 0000000..e3a5591
--- /dev/null
+++ b/static/css/common.css
@@ -0,0 +1,423 @@
+/**
+ * 鍏叡鏍峰紡 - 鍩轰簬 agv_start.vue 鎶界
+ * 閫傜敤浜庯細agv_start.vue, orderPakin2.vue, orderDetlList.vue 绛夐〉闈�
+ */
+
+/* ==================== 椤甸潰鍩虹鏍峰紡 ==================== */
+page {
+	height: 100%;
+	background: #f5f7fa;
+}
+
+.page-container {
+	min-height: 100vh;
+	background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);
+	padding-bottom: 110rpx;
+	box-sizing: border-box;
+}
+
+/* ==================== 琛ㄥ崟鍖哄煙鏍峰紡 ==================== */
+.form-section {
+	background: #ffffff;
+	padding: 12rpx 20rpx;
+	box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
+}
+
+.form-item {
+	display: flex;
+	align-items: center;
+	padding: 12rpx 0;
+	border-bottom: 1rpx solid #f0f0f0;
+}
+
+.form-item:last-child {
+	border-bottom: none;
+}
+
+.form-label {
+	display: flex;
+	align-items: center;
+	flex-shrink: 0;
+	white-space: nowrap;
+	margin-right: 16rpx;
+}
+
+.label-text {
+	font-size: 26rpx;
+	color: #303133;
+	margin-left: 6rpx;
+}
+
+.form-input-wrap {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	background: #f5f7fa;
+	border-radius: 6rpx;
+	padding: 0 16rpx;
+	height: 60rpx;
+}
+
+.form-input {
+	flex: 1;
+	height: 60rpx;
+	font-size: 26rpx;
+	color: #303133;
+}
+
+/* Picker 鏍峰紡 */
+.picker-full {
+	flex: 1;
+	width: 100%;
+}
+
+.picker-value {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	height: 60rpx;
+	font-size: 26rpx;
+	color: #303133;
+}
+
+.picker-value text {
+	flex: 1;
+}
+
+/* ==================== 鍒楄〃澶撮儴鏍峰紡 ==================== */
+.list-header {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	padding: 16rpx 20rpx;
+	background: #ffffff;
+	margin-top: 12rpx;
+	box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
+}
+
+.header-left {
+	display: flex;
+	align-items: center;
+}
+
+.header-title {
+	font-size: 28rpx;
+	color: #303133;
+	font-weight: 600;
+}
+
+.count-badge {
+	background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+	border-radius: 16rpx;
+	padding: 2rpx 12rpx;
+	margin-left: 12rpx;
+}
+
+.count-text {
+	font-size: 20rpx;
+	color: #ffffff;
+	font-weight: 500;
+}
+
+/* ==================== 鍟嗗搧鍗$墖鏍峰紡 ==================== */
+.list-container {
+	padding: 0 20rpx;
+}
+
+.mat-card {
+	background: #ffffff;
+	border-radius: 12rpx;
+	margin-top: 12rpx;
+	box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
+	overflow: hidden;
+}
+
+.card-top {
+	display: flex;
+	align-items: center;
+	padding: 14rpx 16rpx;
+	background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+}
+
+.card-index {
+	width: 36rpx;
+	height: 36rpx;
+	background: rgba(255, 255, 255, 0.25);
+	border-radius: 50%;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	font-size: 22rpx;
+	color: #ffffff;
+	font-weight: 600;
+	margin-right: 12rpx;
+}
+
+.mat-code-wrap {
+	flex: 1;
+}
+
+.mat-code {
+	font-size: 26rpx;
+	color: #ffffff;
+	font-weight: 600;
+}
+
+.qty-badge {
+	background: rgba(255, 255, 255, 0.3);
+	padding: 4rpx 14rpx;
+	border-radius: 16rpx;
+}
+
+.qty-text {
+	font-size: 24rpx;
+	color: #ffffff;
+	font-weight: 600;
+}
+
+/* ==================== 鍗$墖鍐呭鏍峰紡 ==================== */
+.card-content {
+	padding: 12rpx 16rpx;
+}
+
+.info-row {
+	display: flex;
+	margin-bottom: 8rpx;
+}
+
+.info-row:last-child {
+	margin-bottom: 0;
+}
+
+.info-col {
+	flex: 1;
+}
+
+.info-col.half {
+	width: 50%;
+	flex: none;
+}
+
+.info-label {
+	font-size: 20rpx;
+	color: #909399;
+	display: block;
+}
+
+.info-value {
+	font-size: 24rpx;
+	color: #303133;
+	display: block;
+	margin-top: 2rpx;
+}
+
+.info-value.highlight {
+	color: #667eea;
+	font-weight: 500;
+}
+
+.info-value.qty {
+	font-size: 28rpx;
+	color: #303133;
+	font-weight: 600;
+}
+
+/* ==================== 鍗$墖鎿嶄綔鎸夐挳鏍峰紡 ==================== */
+.card-actions {
+	display: flex;
+	border-top: 1rpx solid #f0f0f0;
+}
+
+.action-btn {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	padding: 14rpx 0;
+}
+
+.edit-btn {
+	border-right: 1rpx solid #f0f0f0;
+}
+
+.action-text {
+	font-size: 24rpx;
+	color: #667eea;
+	margin-left: 6rpx;
+}
+
+.delete-text {
+	color: #f56c6c;
+}
+
+/* ==================== 绌虹姸鎬佹牱寮� ==================== */
+.empty-state {
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	padding: 80rpx 0;
+}
+
+.empty-text {
+	font-size: 26rpx;
+	color: #909399;
+	margin-top: 16rpx;
+}
+
+.empty-hint {
+	font-size: 22rpx;
+	color: #c0c4cc;
+	margin-top: 8rpx;
+}
+
+.bottom-placeholder {
+	height: 20rpx;
+}
+
+/* ==================== 搴曢儴鎿嶄綔鏍忔牱寮� ==================== */
+.bottom-bar {
+	position: fixed;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	display: flex;
+	padding: 16rpx 20rpx;
+	background: #ffffff;
+	box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06);
+}
+
+.btn-reset {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	width: 160rpx;
+	height: 72rpx;
+	background: #f5f7fa;
+	border-radius: 36rpx;
+	margin-right: 16rpx;
+}
+
+.btn-reset .btn-text {
+	font-size: 26rpx;
+	color: #909399;
+	margin-left: 6rpx;
+}
+
+.btn-submit {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	height: 72rpx;
+	background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+	border-radius: 36rpx;
+}
+
+.btn-submit .btn-text {
+	font-size: 28rpx;
+	color: #ffffff;
+	font-weight: 500;
+	margin-left: 6rpx;
+}
+
+.btn-disabled {
+	background: #c0c4cc;
+	opacity: 0.6;
+}
+
+/* ==================== 寮圭獥鏍峰紡 ==================== */
+.popup-card {
+	width: 600rpx;
+	background: #ffffff;
+	border-radius: 16rpx;
+	overflow: hidden;
+}
+
+.popup-header {
+	padding: 24rpx;
+	text-align: center;
+	border-bottom: 1rpx solid #f0f0f0;
+	background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+}
+
+.popup-title {
+	font-size: 30rpx;
+	color: #ffffff;
+	font-weight: 600;
+}
+
+.popup-body {
+	padding: 24rpx;
+}
+
+.popup-row {
+	display: flex;
+	align-items: center;
+	margin-bottom: 20rpx;
+	height: 70rpx;
+}
+
+.popup-row:last-child {
+	margin-bottom: 0;
+}
+
+.popup-label {
+	width: 80rpx;
+	font-size: 26rpx;
+	color: #606266;
+	flex-shrink: 0;
+}
+
+.popup-value {
+	flex: 1;
+	height: 70rpx;
+	background: #f5f7fa;
+	border-radius: 8rpx;
+	padding: 0 16rpx;
+	font-size: 26rpx;
+	color: #303133;
+	display: flex;
+	align-items: center;
+	box-sizing: border-box;
+}
+
+.popup-value.disabled {
+	color: #909399;
+	background: #f0f0f0;
+}
+
+.popup-value.input {
+	padding: 0 16rpx;
+}
+
+.popup-value.number {
+	justify-content: center;
+	background: transparent;
+	padding: 0;
+}
+
+.popup-footer {
+	display: flex;
+	border-top: 1rpx solid #f0f0f0;
+}
+
+.popup-btn {
+	flex: 1;
+	height: 90rpx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	font-size: 28rpx;
+}
+
+.popup-btn.cancel {
+	color: #909399;
+	border-right: 1rpx solid #f0f0f0;
+}
+
+.popup-btn.confirm {
+	color: #667eea;
+	font-weight: 600;
+}

--
Gitblit v1.9.1