From 3afe42dec5534422f2a99292542fbba86883b527 Mon Sep 17 00:00:00 2001
From: 小小儁爺 <1694218219@qq.com>
Date: 星期三, 14 五月 2025 13:47:25 +0800
Subject: [PATCH] 1.采购入库扫条码实现

---
 pages/wlgl/cgrk3.vue |  469 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 469 insertions(+), 0 deletions(-)

diff --git a/pages/wlgl/cgrk3.vue b/pages/wlgl/cgrk3.vue
index e69de29..2cc56a1 100644
--- a/pages/wlgl/cgrk3.vue
+++ b/pages/wlgl/cgrk3.vue
@@ -0,0 +1,469 @@
+<template>
+	<view>
+		<page-nav title="閲囪喘鍏ュ簱"></page-nav>
+
+		<view v-if='purchorderArr.length!==0' class="mainContent" style="">
+			<view>
+				<u-gap height="10" bgColor="#eff0f1"></u-gap>
+				<view class="head">
+					<!-- max-height: 1340rpx;overflow: auto; -->
+					<view style="max-height: 1020rpx;overflow: auto;">
+
+						<view class="head" style="position: relative;">
+
+							<u-radio-group class="flex_column">
+								<view class=" flex_column" style="width: 100%;" v-for="(item,index) in purchorderArr"
+									:key="item.hbarcode">
+
+									<view class="head_block" style="position: absolute;margin: 38rpx 0 0 0;">
+										<view class="head_left">
+											<view class="head_bar"></view>
+											<view class="head_title" style="font-weight: bold;">
+												鐗╂枡淇℃伅
+											</view>
+										</view>
+									</view>
+
+
+									<view class="orderNumber" :key="item.hbarcode">
+										{{(index+1).toString().padStart(2,0)}}
+									</view>
+
+									<view class="trash" v-show="purchorderArr.length>1" @click="trashClick(index)">
+										<u-icon name="trash" size='20'></u-icon>
+									</view>
+
+									<view v-show="purchorderArr.length===1" style="width: 48rpx;height: 48rpx;">
+									</view>
+
+
+
+									<view class="flex_between marginBottom20 marginLeft20 marginTop20">
+										<view style="display: flex;">
+											<view class="flex_column titleFont">
+												<view>鐗╂枡缂栫爜锛�</view>
+												<view>鐗╂枡鍚嶇О锛�</view>
+												<view>鐗╂枡瑙勬牸锛�</view>
+												<view>鍒拌揣鍗曞彿锛�</view>
+
+												<view>鐗╂枡鏍囩锛�</view>
+												<view>鐗╂枡鏁伴噺锛�</view>
+												<view>渚涙柟淇℃伅锛�</view>
+												<view>閲囪喘鎵规锛�</view>
+												<view>璐ㄩ噺鐘舵�侊細</view>
+											</view>
+											<view class="flex_column contentFont">
+												<view>{{item.partcode}}</view>
+												<view>{{item.partname}}</view>
+												<view class="ellipsis" style="width: 460rpx;">
+													{{item.partspec?item.partspec:'/'}}
+												</view>
+												<view>{{item.hbillno}}</view>
+
+												<view>{{item.hbarcode}}</view>
+												<view>{{item.hqty}}</view>
+												<view>{{item.hcustomername}}</view>
+												<view>/</view>
+												<view>
+													<view v-if="!item.qualitystatus">/</view>
+													<view v-else style="display: flex;align-items: center;">
+
+														<u-icon name="tags-fill" color="green" size="20"
+															v-if="item.qualitystatus==='CS'"></u-icon>
+														<view style="margin-left: 10rpx;"
+															v-if="item.qualitystatus==='CS'">鍏嶆</view>
+
+														<u-icon name="checkmark-circle-fill" color="#55ff00" size="20"
+															v-if="item.qualitystatus==='OK'"></u-icon>
+														<view style="margin-left: 10rpx;"
+															v-if="item.qualitystatus==='OK'">鍚堟牸</view>
+
+														<u-icon name="close-circle-fill" color="#FF0000" size="20"
+															v-if="item.qualitystatus==='NG'"></u-icon>
+														<view style="margin-left: 10rpx;"
+															v-if="item.qualitystatus==='NG'">涓嶅悎鏍�</view>
+
+														<u-icon name="more-circle-fill" color="#55aaff" size="20"
+															v-if="item.qualitystatus==='TS'"></u-icon>
+														<view style="margin-left: 10rpx;"
+															v-if="item.qualitystatus==='TS'">寰呮</view>
+
+													</view>
+												</view>
+
+											</view>
+										</view>
+
+									</view>
+
+									<u-gap height="10" v-if="index!==purchorderArr.length-1" bgColor="#eff0f1"></u-gap>
+
+								</view>
+							</u-radio-group>
+						</view>
+
+					</view>
+
+				</view>
+
+
+
+			</view>
+
+		</view>
+
+
+		<view class="footer" v-if='purchorderArr.length!==0'>
+			<view class="head_block">
+				<view class="head_left">
+					<view class="head_bar"></view>
+					<view class="head_title" style="font-weight: bold;">
+						鎵弿搴撲綅
+					</view>
+				</view>
+
+				<view class="marginRight20">
+					<u-icon name="scan" @click="topScanClick" color="red" size="28"></u-icon>
+				</view>
+			</view>
+
+			<view class="flex_between marginBottom20 marginLeft20 marginTop20">
+				<view style="display: flex;">
+					<view class="flex_column titleFont">
+						<view>搴撲綅淇℃伅锛�</view>
+						<view>鎵�灞炰粨搴擄細</view>
+					</view>
+
+					<view class="flex_column contentFont" @click="sheetShow=true">
+						<view v-if="purchorderObj.lcationcode">{{purchorderObj.lcationcode}}</view>
+						<view v-else style="color: #ccc;">鐐瑰嚮閫夋嫨鎴栨壂搴撲綅鐮�</view>
+						<view v-if="purchorderObj.stockcode">{{purchorderObj.stockcode}}</view>
+						<view v-else style="color: #ccc;">鐐瑰嚮閫夋嫨鎴栨壂搴撲綅鐮�</view>
+					</view>
+				</view>
+			</view>
+
+
+			<u-button size="large" :loading="isDisabledSubmitButton" :disabled="isDisabledSubmitButton"
+				loadingText="姝e湪鎻愪氦,璇风◢绛�..." type="primary" @click="submit" text="纭鎻愪氦">
+			</u-button>
+		</view>
+
+		<view v-if='purchorderArr.length===0'>
+			<div class="sacnBody">
+				<div class="scanImg" @click="topScanClick2"></div>
+				<div class="scanText">鎵弿鐗╂枡鏉$爜</div>
+			</div>
+		</view>
+
+
+
+		<u-picker :show="sheetShow" :columns="columns" :itemHeight='55' :closeOnClickOverlay='true'
+			@close='sheetShow=false' @change="changeHandler" @confirm='pickerConfirm'
+			@cancel='sheetShow=false'></u-picker>
+
+
+		<!-- 鎮诞鐞� -->
+		<view v-if='purchorderArr.length!==0' @click="topScanClick2">
+			<drag-ball :x='$DeviceInformation.screenWidth*0.8' :y="$DeviceInformation.screenHeight*0.7"></drag-ball>
+		</view>
+
+
+	</view>
+</template>
+
+
+<script>
+	import {
+		MesAppPurchInStorScanLabCode,
+		WarehouseLocationSearchStoreHouse,
+		MesAppPurchInStorLabSave,
+		WareHouseLocation
+	} from '../../config/api.js';
+	export default {
+		onLoad(option) {
+
+		},
+
+		onPullDownRefresh() {
+			setTimeout(() => {
+				this.init(() => {
+					uni.stopPullDownRefresh();
+				})
+			}, 1000);
+		},
+
+		data() {
+			return {
+				purchorderArr: [],
+				sheetShow: false, //涓婃媺鍒楄〃鏄惁灞曞紑
+				sheetList: [],
+				columns: [],
+				columnsData: [],
+				wareHouseLocationArr: [], //浠撳簱搴撲綅鏁扮粍
+				isDisabledSubmitButton: false,
+				purchorderObj: {}, //瀛樺偍浠撳簱搴撲綅淇℃伅
+			}
+		},
+		created() {
+
+		},
+		mounted() {
+			this.init()
+			this.getWareHouseLocation()
+
+
+			// this.getMesAppPurchInStorScanLabCode('DH25051400099')
+			// this.getWarehouseLocationSearchStoreHouse('0011')
+			// setTimeout(() => {
+			// 	this.getMesAppPurchInStorScanLabCode('DH25051400096')
+			// }, 2000)
+		},
+		methods: {
+			// 鑾峰彇寮瑰嚭灞備粨搴撳簱浣嶄俊鎭�
+			async getWareHouseLocation() {
+				const {
+					data: res
+				} = await WareHouseLocation()
+				this.wareHouseLocationArr = res.filter(i => i.children.length > 0)
+				this.columns = [
+					this.wareHouseLocationArr.map(i => i.text),
+					this.wareHouseLocationArr[0].children.map(i => i.text)
+				]
+				this.wareHouseLocationArr.forEach(i => {
+					this.columnsData.push(i.children.map(j => j.text))
+				})
+
+			},
+			changeHandler(e) {
+				const {
+					columnIndex,
+					value,
+					values, // values涓哄綋鍓嶅彉鍖栧垪鐨勬暟缁勫唴瀹�
+					index,
+					// 寰俊灏忕▼搴忔棤娉曞皢picker瀹炰緥浼犲嚭鏉ワ紝鍙兘閫氳繃ref鎿嶄綔
+					picker = this.$refs.uPicker
+				} = e
+				// 褰撶涓�鍒楀�煎彂鐢熷彉鍖栨椂锛屽彉鍖栫浜屽垪(鍚庝竴鍒�)瀵瑰簲鐨勯�夐」
+				if (columnIndex === 0) {
+					// picker涓洪�夋嫨鍣╰his瀹炰緥锛屽彉鍖栫浜屽垪瀵瑰簲鐨勯�夐」
+					picker.setColumnValues(1, this.columnsData[index])
+				}
+			},
+			init() {
+				uni.stopPullDownRefresh();
+			},
+			// 鎵弿
+			topScanClick() {
+				let that = this;
+
+				uni.scanCode({
+					onlyFromCamera: true,
+					// scanType: ['barCode', 'qrCode'],
+					scanType: ['qrCode'],
+					success: function(res) {
+						console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+						console.log('鏉$爜鍐呭锛�' + res.result);
+						that.scanContent = res.result;
+						that.getWarehouseLocationSearchStoreHouse(that.scanContent)
+					},
+					complete: function(res) {
+
+					},
+					fail: function(res) {
+						console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+						console.log('鏉$爜鍐呭锛�' + res.result);
+					}
+
+				});
+			},
+
+			// 鎵弿鐗╂枡淇℃伅鐮�
+			topScanClick2() {
+				let that = this;
+
+				uni.scanCode({
+					onlyFromCamera: true,
+					// scanType: ['barCode', 'qrCode'],
+					scanType: ['qrCode'],
+					success: function(res) {
+						console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+						console.log('鏉$爜鍐呭锛�' + res.result);
+						that.scanContent = res.result;
+						if (that.purchorderArr.findIndex(i => i.hbarcode === that.scanContent) > -1) {
+							that.$u.toast('姝ゆ潯鐮佸凡鍦ㄥ垪琛ㄤ腑')
+						} else {
+							that.getMesAppPurchInStorScanLabCode(that.scanContent)
+						}
+
+
+					},
+					complete: function(res) {
+
+					},
+					fail: function(res) {
+						console.log('鏉$爜绫诲瀷锛�' + res.scanType);
+						console.log('鏉$爜鍐呭锛�' + res.result);
+					}
+
+				});
+			},
+
+			async getWarehouseLocationSearchStoreHouse(locationcode) {
+				const data = {
+					locationcode
+				}
+				const res = await WarehouseLocationSearchStoreHouse(data)
+				if (res.code === '200') {
+					this.purchorderObj.lcationcode = res.data[0].locationname
+					this.purchorderObj.stockcode = res.data[0].warehousename
+
+					this.purchorderObj.lcationname2 = res.data[0].locationcode
+					this.purchorderObj.stockname2 = res.data[0].warehousecode
+					this.$forceUpdate()
+				} else {
+					this.$u.toast(res.message)
+				}
+			},
+			// 鑾峰彇鏍囩淇℃伅
+			async getMesAppPurchInStorScanLabCode(labcode) {
+				const data = {
+					labcode
+				}
+				const res = await MesAppPurchInStorScanLabCode(this.global.formatData(data))
+				if (res.code === '200') {
+					this.purchorderArr.unshift(res.data[0])
+				}
+			},
+			// picker纭鎸夐挳
+			pickerConfirm(val) {
+
+				this.purchorderObj.lcationcode = val.value[1]
+				this.purchorderObj.stockcode = val.value[0]
+
+				this.purchorderObj.stockname2 = this.wareHouseLocationArr.find(i => i.text === this.purchorderObj
+					.stockcode).value
+
+				this.purchorderObj.lcationname2 = this.wareHouseLocationArr.find(i => i.value === this.purchorderObj
+					.stockname2).children.find(i => i.text === this.purchorderObj
+					.lcationcode).value
+
+
+				this.sheetShow = false
+			},
+			// 鍒犻櫎浜嬩欢鐐瑰嚮
+			trashClick(val) {
+				this.purchorderArr.splice(val, 1)
+			},
+			async submit() {
+				const data1 = {
+					username: uni.getStorageSync("username")
+				}
+				let data2 = []
+
+
+				if (!this.purchorderObj.lcationcode) { //璇存槑鏈夋湭濉啓鐨勫簱浣嶄俊鎭�
+					return this.$u.toast('搴撲綅淇℃伅鏈�夋嫨鎴栨湭鎵爜锛�')
+				}
+
+				this.purchorderArr.forEach(i => {
+					data2.push({
+						"sbid": i.hsourcesbid,
+						"hbarcode": i.hbarcode,
+						"hbillno": i.hbillno,
+						"hsourceid": i.hsourceid,
+						"hsourcebillno": i.hsourcebillno,
+						"partcode": i.partcode,
+						"partname": i.partname,
+						"partspec": i.partspec,
+						"unitcode": i.unitcode,
+						"unitname": i.unitname,
+						"hqty": i.hqty,
+						"quantity": i.quantity,
+						"countarrivalquantity": i.countarrivalquantity,
+						"countInquantity": i.countInquantity,
+						"countreturnquantity": i.countreturnquantity,
+						"harcodelocation": i.harcodelocation,
+						"lactioncode": this.purchorderObj.lcationname2,
+						"lactionname": this.purchorderObj.lcationcode,
+						"housecode": this.purchorderObj.stockname2,
+						"housename": this.purchorderObj.stockcode,
+						"hcustomercode": i.hcustomercode,
+						"hcustomername": i.hcustomername,
+						"deptcode": i.deptcode,
+						"deptname": i.deptname,
+						"batchcode": "",
+						"qstatus": i.qualitystatus
+					})
+				})
+
+				// console.log(JSON.stringify(data2))
+
+				const res = await MesAppPurchInStorLabSave(this.global.formatData(
+					data1), data2)
+
+				if (res.code === '200') {
+					this.$u.toast('鎻愪氦鎴愬姛锛�')
+					setTimeout(() => {
+						uni.navigateBack({
+							delta: 1, //杩斿洖灞傛暟锛�2鍒欎笂涓婇〉
+						})
+					}, 1000)
+				} else {
+					this.$u.toast(res.message)
+				}
+
+
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import url('@/style/global.css');
+
+	::v-deep .uicon-arrow-left>span {
+		display: block;
+	}
+
+
+
+	.orderNumber {
+		width: 60rpx;
+		height: 40rpx;
+		// margin: -22rpx 0 0 -30rpx;
+		background-color: #d3daf9;
+		color: #2979FF;
+		font-size: 26rpx;
+		padding: 4rpx 0 0 10rpx;
+		border-radius: 0 0 90% 0;
+	}
+
+	.trash {
+		width: 48rpx;
+		height: 48rpx;
+		margin: -26rpx 0 0 646rpx;
+		background-color: #d3daf9;
+		font-size: 26rpx;
+		padding: 6rpx 0 0 10rpx;
+		border-radius: 100%;
+	}
+
+	.custominputClass {
+		width: 424rpx;
+		display: flex;
+		justify-content: space-between;
+		border: 3rpx #eff0f1 solid;
+		border-radius: 10rpx;
+		padding: 0 10rpx;
+	}
+
+	.arrowClass {
+		display: flex;
+		justify-content: center;
+		// background-color: #efefef;
+		width: 100rpx;
+		// border-radius: 10rpx;
+		height: 56rpx;
+	}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3