From 20e6520be621221456a3ef4260401dd96e28fa4a Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期四, 22 一月 2026 16:55:21 +0800
Subject: [PATCH] 1

---
 pages/AGV/CollectionPakinT.vue |  613 +++++++++++++++++++++++++++++++++++++++++++++++++++
 pages/AGV/CollectionPakin.vue  |   94 +++++--
 2 files changed, 680 insertions(+), 27 deletions(-)

diff --git a/pages/AGV/CollectionPakin.vue b/pages/AGV/CollectionPakin.vue
index f3c8270..fa04e86 100644
--- a/pages/AGV/CollectionPakin.vue
+++ b/pages/AGV/CollectionPakin.vue
@@ -5,6 +5,10 @@
 				<view class="code-decs">婧愭墭鐩�:</view>
 				<input type="text" placeholder=" 鎵爜 / 杈撳叆" v-model="orgBarcode" :focus="orgBarcodeFocus" />
 			</view>
+			<view class="item">
+				<view class="code-decs">鍑哄簱绔欏彿:</view>
+				<input type="text" placeholder=" 鎵爜 / 杈撳叆" v-model="devNo" />
+			</view>
 			<view class="item" style="display: none;">
 				<view class="code-decs">鍙拌溅鐮�:</view>
 				<input type="text" placeholder=" 鎵爜 / 杈撳叆" v-model="barcode" :focus="barcodeFocus" />
@@ -484,42 +488,78 @@
 						return;
 					}
 				}
+				
 				uni.request({
-					url: that.baseUrl + '/mobile/comb/auth',
-					data: JSON.stringify({
-						orderNo: that.orderNo,
-						barcode: that.barcode,
-						boxType1: that.boxType1,
-						combMats: that.dataList,
-						type: '1'
-					}),
+					url: `${this.baseUrl}/mobile/agv/collectionPakin/auth`,
 					method: 'POST',
+					data: JSON.stringify({
+						orgBarcode: that.orgBarcode,
+						tarBarcode: that.barcode,
+						devNo: that.devNo,
+						combMats: that.dataList
+					}),
 					header: {
-						'token': uni.getStorageSync('token')
+						token: that.token
 					},
-					success(result) {
-						var res = result.data
+					success: (result) => {
+						const res = result.data
 						if (res.code === 200) {
-							that.resst();
-							that.messageText = "缁勬墭鎴愬姛"
-							that.messageToggle('success')
-							const innerAudioContext = uni.createInnerAudioContext();
-							innerAudioContext.src = '/static/music/pakinOk.mp3';
-							innerAudioContext.play()
-						} else if (res.code == 403) {
-							that.messageText = res.msg
-							that.messageToggle('error')
-							setTimeout(() => {
-								uni.reLaunch({
-									url: '../login/login'
-								});
-							}, 1000);
+							that.clearAll()
+							that.showMessage(res.msg, 'success')
+							// this.showMessage('缁勬墭鎴愬姛')
+							// // 鎾斁鎴愬姛鎻愮ず闊�
+							// const audio = uni.createInnerAudioContext()
+							// audio.src = '/static/music/pakinOk.mp3'
+							// audio.play()
+						} else if (res.code === 403) {
+							that.handleAuthError(res.msg)
 						} else {
-							that.messageText = res.msg
-							that.messageToggle('error')
+							that.showMessage(res.msg, 'error')
 						}
+					},
+					complete: () => {
+						// 璇锋眰瀹屾垚鍚庤В闄ら槻鎶栭攣瀹�
+						setTimeout(() => {
+							that.isCombing = false
+						}, 500)
 					}
 				});
+				// uni.request({
+				// 	url: that.baseUrl + '/mobile/comb/auth',
+				// 	data: JSON.stringify({
+				// 		orderNo: that.orderNo,
+				// 		barcode: that.barcode,
+				// 		boxType1: that.boxType1,
+				// 		combMats: that.dataList,
+				// 		type: '1'
+				// 	}),
+				// 	method: 'POST',
+				// 	header: {
+				// 		'token': uni.getStorageSync('token')
+				// 	},
+				// 	success(result) {
+				// 		var res = result.data
+				// 		if (res.code === 200) {
+				// 			that.resst();
+				// 			that.messageText = "缁勬墭鎴愬姛"
+				// 			that.messageToggle('success')
+				// 			const innerAudioContext = uni.createInnerAudioContext();
+				// 			innerAudioContext.src = '/static/music/pakinOk.mp3';
+				// 			innerAudioContext.play()
+				// 		} else if (res.code == 403) {
+				// 			that.messageText = res.msg
+				// 			that.messageToggle('error')
+				// 			setTimeout(() => {
+				// 				uni.reLaunch({
+				// 					url: '../login/login'
+				// 				});
+				// 			}, 1000);
+				// 		} else {
+				// 			that.messageText = res.msg
+				// 			that.messageToggle('error')
+				// 		}
+				// 	}
+				// });
 			},
 			reset(type) {
 				this.msgType = type
diff --git a/pages/AGV/CollectionPakinT.vue b/pages/AGV/CollectionPakinT.vue
new file mode 100644
index 0000000..d38c4ee
--- /dev/null
+++ b/pages/AGV/CollectionPakinT.vue
@@ -0,0 +1,613 @@
+<template>
+	<view>
+		<view class="code">
+			<view class="item">
+				<view class="code-decs">婧愭墭鐩�:</view>
+				<input type="text" placeholder=" 鎵爜 / 杈撳叆" v-model="orgBarcode" :focus="orgBarcodeFocus"
+					@input="barcodeInput()" />
+			</view>
+			<!-- // style="display: none;" -->
+			<view class="item" style="display: none;">
+				<view class="code-decs">鍙拌溅鐮�:</view>
+				<input type="text" placeholder=" 鎵爜 / 杈撳叆" v-model="tarBarcode" :focus="tarBarcodeFocus" />
+			</view>
+			<view class="item">
+				<view class="code-decs">鏍煎眰缂栫爜:</view>
+				<input type="text" placeholder=" 鎵爜 / 杈撳叆" v-model="boxType1" :focus="boxType1Focus"
+					@input="boxType1Input()">
+			</view>
+			<view class="item">
+				<view class="code-decs">绔欑偣鍙�:</view>
+				<input type="text" placeholder=" 鎵爜 / 杈撳叆" v-model="devNo" />
+			</view>
+		</view>
+		<view class="mat-list-title">鍟嗗搧鍒楄〃</view>
+		<scroll-view scroll-y>
+			<view class="list" v-for="(item, index) in dataList" :key="index">
+				<view class="list-left">
+					<view class="list-left-item">
+						<view class="desc">No锛�</view>
+						<view class="left-item">{{ index + 1 }}</view>
+					</view>
+					<view class="list-left-item">
+						<view class="desc">缂栫爜锛�</view>
+						<view class="left-item">
+							<uni-tag :text="item.matnr" type="primary"></uni-tag>
+						</view>
+					</view>
+					<view class="list-left-item">
+						<view class="desc">鍝佸悕锛�</view>
+						<uni-tooltip class="left-item" :content="item.maktx" placement="bottom">
+							<view class="left-item tip" style="">
+								{{ item.maktx }}
+							</view>
+						</uni-tooltip>
+					</view>
+					<view class="list-left-item">
+						<view class="desc">瑙勬牸锛�</view>
+						<view class="left-item">{{ item.specs }}</view>
+					</view>
+					<view class="popup-item">
+						<view class="desc">鏍煎眰缂栫爜锛�</view>
+						<view class="left-item">{{ item.boxType1 }}</view>
+					</view>
+					<view class="list-left-item">
+						<view class="desc">渚涘簲鍟嗭細</view>
+						<view class="left-item">
+							<uni-tag :text="item.standby1" type="warning"></uni-tag>
+						</view>
+					</view>
+					<view class="list-left-item">
+						<view class="desc">鏁伴噺锛�</view>
+						<view class="left-item">{{ item.anfme }}</view>
+					</view>
+					<view class="list-left-item">
+						<view class="desc">鎷h揣鏁伴噺:</view>
+						<view class="left-item" style="border: none; justify-content: center">
+							<uni-number-box disabled="true" v-model="item.workQty" :max="item.anfme" color="#747474" />
+						</view>
+					</view>
+				</view>
+				<view class="list-right">
+					<uni-icons type="compose" color="#9add8b" size="24" @click="revise(item, index)"></uni-icons>
+					<uni-icons type="trash" color="#f58a8a" size="24" @click="remove(index)"></uni-icons>
+				</view>
+			</view>
+			<!-- 绌虹姸鎬佹彁绀� -->
+			<view v-if="dataList.length === 0" class="empty-tips">
+				鏆傛棤鍟嗗搧锛岃鎵爜娣诲姞
+			</view>
+		</scroll-view>
+		<!-- 搴曢儴鎿嶄綔鎸夐挳 -->
+		<view class="buttom">
+			<button size="mini" @click="reset">
+				閲嶇疆
+			</button>
+			<button size="mini" type="primary" @click="combConfirm">
+				缁勬墭
+			</button>
+		</view>
+
+		<!-- 淇敼鏁伴噺寮圭獥 -->
+		<uni-popup ref="revise" type="dialog">
+			<view class="popup">
+				<view class="title">淇敼</view>
+				<view class="popup-item">
+					<view class="popup-item-left">缂栫爜:</view>
+					<view class="popup-item-right">
+						<input type="text" v-model="editForm.matnr" disabled style="
+								background-color: #f7f7f7;
+								padding: 0;
+								color: #d5d5d5;
+							" />
+					</view>
+				</view>
+				<view class="popup-item">
+					<view class="popup-item-left">渚涘簲鍟�:</view>
+					<view class="popup-item-right">
+						<input type="text" v-model="editForm.standby1" />
+					</view>
+				</view>
+				<view class="popup-item">
+					<view class="popup-item-left">鏍煎眰缂栫爜:</view>
+					<view class="popup-item-right">
+						<input type="text" v-model="tempBoxType" 
+							style="padding: 0;color: #d5d5d5;">
+					</view>
+				</view>
+				<view class="popup-item">
+					<view class="popup-item-left">鏁伴噺:</view>
+					<view class="popup-item-right" style="border: none; justify-content: center">
+						<uni-number-box :value="editForm.count" :step="0.01" :max="9999999" color="#747474"
+							@change="changeValue" />
+					</view>
+				</view>
+				<view class="btn">
+					<view class="btn-left" @click="reviseClose">
+						鍙栨秷
+					</view>
+					<view class="btn-right" @click="reviseConfirm">
+						淇敼
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+
+		<!-- 绉婚櫎纭寮圭獥 -->
+		<uni-popup ref="removeDialog" type="dialog">
+			<uni-popup-dialog type="warn" confirmText="绉婚櫎" title="璀﹀憡" content="鏄惁绉婚櫎褰撳墠鍟嗗搧!" @confirm="removeConfirm"
+				@close="removeClose"></uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 娑堟伅鎻愮ず -->
+		<uni-popup ref="message" type="message">
+			<uni-popup-message :type="msgType" :message="messageText" :duration="2000"></uni-popup-message>
+		</uni-popup>
+
+		<!-- 纭缁勬墭寮圭獥 -->
+		<uni-popup ref="combDialog" type="dialog">
+			<uni-popup-dialog type="warn" cancelText="鍙栨秷" confirmText="纭" title="璀﹀憡" content="鏄惁鐜板湪缁勬墭!" @confirm="comb"
+				@close="combClose"></uni-popup-dialog>
+		</uni-popup>
+
+		<!-- 纭閲嶇疆寮圭獥 -->
+		<uni-popup ref="resetDialog" type="dialog">
+			<uni-popup-dialog type="warn" cancelText="鍙栨秷" confirmText="纭" title="璀﹀憡" content="鏄惁閲嶇疆!"
+				@confirm="resetConfirm" @close="resetClose"></uni-popup-dialog>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				baseUrl: '',
+				token: '',
+				orgBarcode: '',
+				tarBarcode: '',
+				dataList: [],
+				orgBarcodeFocus: false,
+				tarBarcodeFocus: false,
+				boxType1Focus: true,
+				tempBoxType: '',
+				devNo: '',
+				// 缂栬緫琛ㄥ崟
+				editForm: {
+					index: -1,
+					matnr: '',
+					standby1: '',
+					weight: '',
+					count: 0
+				},
+				// 寰呯Щ闄ら」绱㈠紩
+				removeIndex: -1,
+				// 娑堟伅鎻愮ず
+				msgType: 'success',
+				messageText: '',
+				// 缁勬墭鎸夐挳闃叉姈
+				isCombing: false
+			}
+		},
+
+		onShow() {
+			this.baseUrl = uni.getStorageSync('baseUrl')
+			this.token = uni.getStorageSync('token')
+		},
+
+		methods: {
+			itemWorkQtyChange(item) {},
+			// 鏄剧ず娑堟伅鎻愮ず
+			showMessage(text, type = 'success') {
+				this.msgType = type
+				this.messageText = text
+				this.$refs.message.open()
+			},
+
+			boxType1Input() {
+				let bcode = this.boxType1.split("-")[0];
+				if (this.tarBarcode != null && this.tarBarcode != undefined && this.tarBarcode != '') {
+					if (this.tarBarcode != bcode && this.dataList.length > 0) {
+						this.messageText = "澶氭缁勬墭鍙拌溅涓嶄竴鑷达紝璇锋鏌ュ悗鍐嶆搷浣滐紒锛�"
+						this.messageToggle('error')
+						this.dataList = [];
+						return;
+					}
+				}
+				this.tarBarcode = bcode;
+			},
+
+
+			// 閲嶇疆鍏夋爣鐒︾偣
+			resetFocus(field) {
+				this[field] = false
+				setTimeout(() => {
+					this[field] = true
+				}, 100)
+			},
+
+			// 澶勭悊鎺堟潈閿欒
+			handleAuthError(msg) {
+				this.showMessage(msg, 'error')
+				setTimeout(() => {
+					uni.reLaunch({
+						url: '../login/login'
+					})
+				}, 1000)
+			},
+
+			// 婧愭墭鐩樿緭鍏ヤ簨浠�
+			barcodeInput() {
+				setTimeout(() => {
+					const len = this.orgBarcode.length
+					if (len > 0 && len < 8) {
+						uni.showToast({
+							title: '鎵樼洏鐮佹湁璇閲嶈瘯',
+							icon: 'none',
+							position: 'top'
+						})
+						this.orgBarcode = ''
+						this.resetFocus('orgBarcodeFocus')
+						return
+					}
+					this.resetFocus('tarBarcodeFocus')
+				}, 200)
+				this.search()
+			},
+			search() {
+				let that = this
+				uni.request({
+					url: that.baseUrl + '/mobile/agv/collectionPakin/view',
+					header: {
+						token: uni.getStorageSync('token')
+					},
+					data: JSON.stringify({
+						orgBarcode: that.orgBarcode
+					}),
+					method: 'POST',
+					success(res) {
+						res = res.data
+						if (res.code === 200) {
+							that.dataList = res.data.map((item) => ({
+								...item,
+								workQty: item.anfme
+							}))
+						} else if (res.code == 403) {
+							that.messageText = res.msg
+							that.messageToggle('error')
+							setTimeout(() => {
+								uni.reLaunch({
+									url: '../login/login'
+								})
+							}, 1000)
+						} else {
+							that.showMessage(res.msg, 'error')
+						}
+					}
+				})
+			},
+			// 鎼滅储鐗╂枡
+			findMat() {
+				if (!this.tarBarcode) return
+				setTimeout(() => {
+					uni.request({
+						url: `${this.baseUrl}/mat/auth`,
+						data: {
+							matnr: this.tarBarcode
+						},
+						header: {
+							token: this.token
+						},
+						success: (result) => {
+							const res = result.data
+							if (res.code === 200 && res.data) {
+								this.navigateToMatSelect(res.data)
+							} else if (res.code === 403) {
+								this.handleAuthError(res.msg)
+							} else {
+								uni.showToast({
+									title: res.msg,
+									icon: 'none',
+									position: 'top'
+								})
+							}
+						}
+					})
+				}, 200)
+			},
+
+			// 璺宠浆鐗╂枡閫夋嫨椤�
+			navigateToMatSelect(matData) {
+				matData.batch = ''
+				uni.navigateTo({
+					url: '../mat/matSelected',
+					success: (res) => {
+						res.eventChannel.emit('mat', {
+							data: [matData]
+						})
+					},
+					events: {
+						matList: (data) => {
+							this.checkMat(data.data)
+							this.tarBarcode = ''
+							this.resetFocus('tarBarcodeFocus')
+						}
+					}
+				})
+			},
+
+			// 閫夋嫨鐗╂枡
+			selectMat() {
+				uni.navigateTo({
+					url: '../mat/matQuery',
+					success: (res) => {
+						res.eventChannel.emit('commonUrl', {
+							commonUrl: ''
+						})
+					},
+					events: {
+						acceptDataFromOpenedPage: (data) => {
+							this.tarBarcode = data.data
+							this.findMat()
+						}
+					}
+				})
+			},
+
+			// 妫�鏌ュ苟娣诲姞鐗╂枡
+			checkMat(mat) {
+				const existIndex = this.dataList.findIndex(
+					(item) => item.matnr === mat.matnr && item.batch === mat.batch
+				)
+
+				if (existIndex > -1) {
+					// 鐩稿悓鐗╂枡鐩稿悓鎵瑰彿锛屾暟閲忕疮鍔�
+					this.dataList[existIndex].anfme += mat.anfme
+					this.$forceUpdate()
+				} else {
+					// 鏂板鍒板垪琛ㄥご閮�
+					this.dataList.unshift(mat)
+				}
+				if (this.dataList[existIndex].boxType1 != null && this.dataList[existIndex].boxType1 == "1") {
+					this.dataList[existIndex].boxType1 = this.boxType1;
+				}
+			},
+
+			// 鎵撳紑淇敼寮圭獥
+			revise(item, index) {
+				// const item = this.dataList[index]
+				console.log(item);
+				this.editForm = {
+					index,
+					matnr: item.matnr,
+					standby1: item.standby1,
+					weight: item.weight,
+					count: item.anfme
+				}
+				this.$refs.revise.open()
+			},
+
+			// 鏁伴噺鍙樻洿
+			changeValue(value) {
+				this.editForm.count = value
+			},
+
+			// 纭淇敼
+			reviseConfirm() {
+				const {
+					index,
+					count,
+					standby1,
+					weight,
+				} = this.editForm
+				this.dataList[index].anfme = count
+				this.dataList[index].standby1 = standby1
+				this.dataList[index].weight = weight
+				this.dataList[index].boxType1 = this.tempBoxType
+				this.$refs.revise.close()
+			
+				let bcode = this.tempBoxType.split("-")[0];
+				if (this.tarBarcode != null && this.tarBarcode != undefined && this.tarBarcode != '') {
+					if (this.tarBarcode != bcode && this.dataList.length > 0) {
+						this.messageText = "澶氭缁勬墭鍙拌溅涓嶄竴鑷达紝璇锋鏌ュ悗鍐嶆搷浣滐紒锛�"
+						this.messageToggle('error')
+						return;
+					}
+				}
+				this.tarBarcode = bcode;
+				
+				this.showMessage('淇敼鎴愬姛')
+			},
+
+			// 鍏抽棴淇敼寮圭獥
+			reviseClose() {
+				this.$refs.revise.close()
+			},
+
+			// 鎵撳紑绉婚櫎纭寮圭獥
+			remove(index) {
+				this.removeIndex = index
+				this.$refs.removeDialog.open()
+			},
+
+			// 纭绉婚櫎
+			removeConfirm() {
+				this.dataList.splice(this.removeIndex, 1)
+				this.showMessage('绉婚櫎鎴愬姛')
+			},
+
+			// 鍏抽棴绉婚櫎寮圭獥
+			removeClose() {
+				this.$refs.removeDialog.close()
+			},
+
+			// 鎵撳紑缁勬墭纭寮圭獥
+			combConfirm() {
+				if (!this.orgBarcode) {
+					this.showMessage('璇锋壂鎻忔簮鎵樼洏鏉$爜', 'error')
+					return
+				}
+				if (this.dataList.length === 0) {
+					this.showMessage('璇锋坊鍔犲晢鍝佸垪琛�', 'error')
+					return
+				}
+				if (!this.tarBarcode) {
+					this.showMessage('璇锋壂鎻忕洰鏍囨墭鐩樻潯鐮�', 'error')
+					return
+				}
+				const invalidItem = this.dataList.find(
+					(item) => !item.anfme || item.anfme === 0
+				)
+				if (invalidItem) {
+					this.showMessage(
+						`${invalidItem.matnr} 缁勬墭鏁伴噺涓嶈兘涓�0`,
+						'error'
+					)
+					return
+				}
+				this.$refs.combDialog.open()
+			},
+
+			// 鍏抽棴缁勬墭寮圭獥
+			combClose() {
+				this.$refs.combDialog.close()
+			},
+
+			// 鎵ц缁勬墭
+			comb() {
+				if (this.isCombing) return
+				this.isCombing = true
+				uni.vibrateShort()
+
+				uni.request({
+					url: `${this.baseUrl}/mobile/agv/collectionPakin/auth`,
+					method: 'POST',
+					data: JSON.stringify({
+						orgBarcode: this.orgBarcode,
+						tarBarcode: this.tarBarcode,
+						devNo: this.devNo,
+						combMats: this.dataList
+					}),
+					header: {
+						token: this.token
+					},
+					success: (result) => {
+						const res = result.data
+						if (res.code === 200) {
+							this.clearAll()
+							this.showMessage(res.msg, 'success')
+							// this.showMessage('缁勬墭鎴愬姛')
+							// // 鎾斁鎴愬姛鎻愮ず闊�
+							// const audio = uni.createInnerAudioContext()
+							// audio.src = '/static/music/pakinOk.mp3'
+							// audio.play()
+						} else if (res.code === 403) {
+							this.handleAuthError(res.msg)
+						} else {
+							this.showMessage(res.msg, 'error')
+						}
+					},
+					complete: () => {
+						// 璇锋眰瀹屾垚鍚庤В闄ら槻鎶栭攣瀹�
+						setTimeout(() => {
+							this.isCombing = false
+						}, 500)
+					}
+				})
+			},
+
+			// 鎵撳紑閲嶇疆纭寮圭獥
+			reset() {
+				this.$refs.resetDialog.open()
+			},
+
+			// 纭閲嶇疆
+			resetConfirm() {
+				this.clearAll()
+				this.showMessage('閲嶇疆瀹屾垚')
+			},
+
+			// 鍏抽棴閲嶇疆寮圭獥
+			resetClose() {
+				this.$refs.resetDialog.close()
+			},
+
+			// 娓呯┖鎵�鏈夋暟鎹�
+			clearAll() {
+				this.dataList = []
+				this.orgBarcode = ''
+				this.tarBarcode = ''
+				this.devNo = ''
+				this.resetFocus('orgBarcodeFocus')
+			}
+		}
+	}
+</script>
+
+<style>
+	@import url('../../static/css/wms.css/wms.css');
+
+	.code {
+		width: 100%;
+		position: fixed;
+		min-height: 200rpx;
+		background-color: #fff;
+		z-index: 10;
+	}
+
+	.item {
+		display: flex;
+		align-items: center;
+		height: 100rpx;
+		margin-left: 20rpx;
+		border-bottom: 1px solid #dcdfe6;
+	}
+
+	.item input {
+		height: 50rpx;
+		line-height: 50rpx;
+		font-size: 36upx;
+		font-family: PingFang SC;
+		width: 55vw;
+	}
+
+	.code-decs {
+		width: 20vw;
+		font-size: 18px;
+		color: #303133;
+	}
+
+	.item-right {
+		margin-left: auto;
+		margin-right: 20rpx;
+	}
+
+	.mat-list-title {
+		height: 80rpx;
+		line-height: 80rpx;
+		width: 100%;
+		background-color: white;
+		position: fixed;
+		margin-top: 150rpx;
+		z-index: 9;
+		text-align: center;
+		box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.5);
+	}
+
+	.list:first-child {
+		margin-top: 270rpx;
+	}
+
+	.empty-tips {
+		text-align: center;
+		color: #909399;
+		padding: 100rpx 0;
+		margin-top: 150rpx;
+	}
+
+	.tip {
+		white-space: nowrap;
+		overflow: hidden;
+		text-overflow: ellipsis;
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.1