From f26f29d84e0a68831a6af14dab3eec5500496d2e Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期三, 28 五月 2025 16:48:52 +0800
Subject: [PATCH] 初始化项目

---
 pages/wareHouse/finishProductIn/index.vue |  718 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 718 insertions(+), 0 deletions(-)

diff --git a/pages/wareHouse/finishProductIn/index.vue b/pages/wareHouse/finishProductIn/index.vue
new file mode 100644
index 0000000..be6f4d7
--- /dev/null
+++ b/pages/wareHouse/finishProductIn/index.vue
@@ -0,0 +1,718 @@
+<template>
+	<view class="page">
+	  <view class="finishProductIn-index-bg"/>
+	  <u-navbar title="鎴愬搧鍏ュ簱" :background="background" :border-bottom="false" :title-bold="true" title-color="#000" back-icon-color="#000"/>
+	  <view class="finishProductIn-index-param">
+	  		  <view class="finishProductIn-index-param-view">
+	  			  <view class="finishProductIn-index-param-item param-extra">
+	  			  	<view class="finishProductIn-index-param-item-left">
+	  			  	  <text class="item-one">鑷冲簱浣嶅彿</text>
+	  			  	</view>
+	  			  	<view class="finishProductIn-index-param-item-right" @click="seachLocationNo">
+	  			  	   <text class="item-one">{{tolocationNo}}</text>
+	  			  	   <u-icon name="arrow-right" color="#687792" size="28"></u-icon>
+	  			  	</view>
+	  			  </view>
+	  			  <view class="finishProductIn-index-param-item param-extra">
+	  			  	<view class="finishProductIn-index-param-item-left">
+	  			  	  <text class="item-one">鑷姩鎻愪氦</text>
+	  			  	</view>
+	  			  	<view class="finishProductIn-index-param-item-right">
+	  			  	   <!--<text class="item-one">{{isAuto?'鏄�':'鍚�'}}</text>-->
+	  			  	   <picker class="item-one" style="width: 100%;" @change="autoNumBindChange($event,isAutoList)" :value="autoNumIndex" :range="isAutoList"
+	  			  	   	range-key="label">
+	  			  	   	<view>
+	  			  	   		<text>{{isAutoList[autoNumIndex].label}}</text>
+	  			  	   	</view>
+	  			  	   </picker>
+	  			  	   <u-icon name="arrow-right" color="#687792" size="28"></u-icon>
+	  			  	</view>
+	  			  </view>
+	  			  <view class="finishProductIn-index-param-item">
+	  			  	<view class="finishProductIn-index-param-item-left">
+	  			  	  <text class="item-one">鏄惁棰勭暀</text>
+	  			  	</view>
+	  			  	<view class="finishProductIn-index-param-item-right">
+	  			  	   <!--<text class="item-one">{{isAuto?'鏄�':'鍚�'}}</text>-->
+	  			  	   <picker class="item-one" style="width: 100%;" @change="reserveNumBindChange($event,isReserveList)" :value="reserveNumIndex" :range="isReserveList"
+	  			  	   	range-key="label">
+	  			  	   	<view>
+	  			  	   		<text>{{isReserveList[reserveNumIndex].label}}</text>
+	  			  	   	</view>
+	  			  	   </picker>
+	  			  	   <u-icon name="arrow-right" color="#687792" size="28"></u-icon>
+	  			  	</view>
+	  			  </view>
+	  		  </view>
+	  </view>
+	  <view class="finishProductIn-index-operate-info">
+		  <view class="finishProductIn-index-operate-info-view">
+			  <view class="info-one">
+				  <view class="t1">{{totalQty}}</view>
+				  <view class="t2">鎬绘暟</view>
+			  </view>
+			  <view class="info-two">
+			  		<view class="t1">{{totalPan}}</view>
+			  		<view class="t2">鎬荤洏鏁�</view>		  
+			  </view>
+		  </view>
+	  </view>
+	  <view class="wrap">
+		<scroll-view class="finishProductIn-index-scroll-list" scroll-y="true">
+			<u-cell-group class="finishProductIn-index-scroll-list-group" :border="false">
+				<view class="content" v-for="(item, index) in list" :key="item.id" :index="index">
+					<view class="content-header">
+							<view class="header-item">
+								<view class="content-header-icon-one"></view>
+								<view class="content-header-title">{{ item.partBatchNo }}</view>
+							</view>
+							<view class="header-item">
+								<view class="content-header-icon-two"></view>
+								<view class="content-header-title-ne">{{ item.partName }}</view>
+							</view>
+							<view class="header-item-toolbar" @click="deleteHandle(item)">
+								<view class="header-item-toolbar-del-icon">
+									
+								</view>
+								<view class="header-item-toolbar-del-text">
+									鍒犻櫎
+								</view>
+							</view>
+					</view>
+					<view class="content-body">
+						<view class="part-one">
+							<view class="part-one-left">
+								<text>璁㈠崟鍙�: {{ item.customerOrderNo }}</text>
+							</view>
+							<view class="part-one-right">
+								<text>闆朵欢鍙�: {{ item.partNo }}</text>
+							</view>
+						</view>
+						<view class="part-two">
+							<view class="list-row">
+								<view class="list-row-left">{{'&nbsp;'}}erp鎵瑰彿: {{ item.ifsBatchNo }}</view>
+								<view class="list-row-right">浠庡簱浣嶅彿: {{ item.locationNo }}</view>
+							</view>
+							<view class="list-row">
+								<view class="list-row-left">璁¢噺鍗曚綅: {{ item.unit }}</view>
+								<view class="list-row-right">鑷冲簱浣嶅彿: {{ item.arriveLocationNo }}</view>
+							</view>
+						</view>
+						<view class="part-three">
+							<view class="part-three-left">
+								<view class="_label">
+									鍙敤搴撳瓨鏁伴噺
+								</view>
+								<view class="_content">
+									{{ item.availableStockQuantity }}
+								</view>
+							</view>
+							<view class="part-three-right">
+								<view class="_label">
+									绉诲簱搴撳瓨鏁伴噺
+								</view>
+								<view class="_content">
+									<u-input placeholder="璇疯緭鍏ユ暟閲�" v-model="item.moveQty" type="digit"></u-input>
+									<!--<text>{{ item.moveQty }}</text>-->
+									<view class="edit_icon"></view>
+								</view>
+							</view>
+						</view>
+					</view>
+					<!--<view class="row-list">
+						<view class="_label">
+							绉诲簱搴撳瓨鏁伴噺:
+						</view>
+						<view class="_content">
+							<u-input placeholder="璇疯緭鍏ョЩ搴撳簱瀛樻暟閲�" v-model="item.moveQty" type="digit"></u-input>
+						</view>
+					</view>-->
+				</view>
+			</u-cell-group>
+		</scroll-view>
+		<scan></scan>
+
+		<view class="finishProductIn-form-footer" v-if="list.length>0">
+			<u-button class="btn" type="primary" @click="submit">鎻愪氦</u-button>
+		</view>
+	</view>
+    </view>
+</template>
+<script>
+	import scan from "@/components/scan/scan.vue";
+    import content_bg from '@/static/custom/finishProductIn/locNoBg.png'
+	
+	export default {
+		components: {
+			scan
+		},
+		data() {
+			return {
+				background:{
+					backgroundImage: `url(${content_bg})`,
+					backgroundAttachment: 'fixed',
+					backgroundSize: '100% auto',
+					backgroundRepeat: 'no-repeat',
+				},
+				list: [],
+				tolocationNo: "CPK01",
+				isUseLotBatchNo:false,
+				isAuto:false,
+				isReserve:false,
+				index:0,
+				isAutoList:[
+					{value:false,label:'鍚�'},
+					{value:true,label:'鏄�'}
+				],
+				autoNumIndex:0,
+				isReserveList:[
+					{value:false,label:'鍚�'},
+					{value:true,label:'鏄�'}
+				],
+				reserveNumIndex:0,
+			};
+		},
+		onLoad() {
+			// this.loadList({"part_no":"88.118.1/A0048179","wdr":"221026000567N","qty_arrived":"1","wdr":"221026000567N","unit_meas":"pcs","material_code":null});
+			// this.loadList({"part_no":"88.118.1/A0187345","lot_batch_no":"230315003687N","qty_arrived":2.64,"wdr":"妫�5","unit_meas":"km","material_code":"25070076","sn_no":"妫�5"});
+		},
+		onShow() {
+
+			let that = this
+
+			uni.$off('scan') // 姣忔杩涙潵鍏� 绉婚櫎鍏ㄥ眬鑷畾涔変簨浠剁洃鍚櫒
+			uni.$on('scan', function(data) {
+				console.log('onscan');
+				//鎵爜鎴愬姛鍚庣殑鍥炶皟锛屼綘鍙互鍐欒嚜宸辩殑閫昏緫浠g爜鍦ㄨ繖閲�
+				console.log('鎵爜缁撴灉锛�', data.code);
+
+				if (data.code != "" && (that.tolocationNo == "")) {
+					uni.showToast({
+						title: '璇烽�夋嫨鑷冲簱浣嶅彿',
+						icon: 'none'
+					})
+					return
+				}
+				//鍒ゆ柇浜岀淮鐮佷腑鏄惁鏈塻n_no锛屽吋瀹硅�佹爣绛句簩缁寸爜
+				let snNoIndex=data.code.indexOf('sn_no')
+				if(snNoIndex>-1){
+					this.isUseLotBatchNo=false
+				}else{
+					this.isUseLotBatchNo=true
+				}
+				const result = JSON.parse(data.code)
+				//鍒ゆ柇鏁扮粍涓槸鍚﹀瓨鍦�  SN鍜宲artNo 鏄惁宸茬粡瀛樺湪
+				let initList = that.list.filter(item => {
+					return item.partNo === result.part_no && item.partBatchNo === (this.isUseLotBatchNo?result.lot_batch_no:result.sn_no) && that.tolocationNo === item.arriveLocationNo
+				})
+				if (initList.length > 0) {
+					uni.showToast({
+						title: "姝ゆ潯璁板綍宸插瓨鍦ㄣ��",
+						icon: "none"
+					});
+					return
+				}
+				that.loadList(result);
+			})
+		},
+		onNavigationBarButtonTap(e) {
+			uni.scanCode({
+				success: res => {
+					try {
+						const result = JSON.parse(res.result)
+
+					} catch (e) {}
+				}
+			});
+		},
+		computed: {
+			totalQty(){
+				const total=this.list.reduce((prev, curr) => {
+					return prev + (parseFloat(curr.moveQty)||0)
+				}, 0)
+				return parseFloat(total.toFixed(6))
+			},
+			totalPan(){
+				return this.list.length
+			}
+		},
+		methods: {
+			autoNumBindChange(e,storage){
+				if (storage.length <= 0) {
+					this.autoNumIndex = null
+					return
+				}
+				this.autoNumIndex = e.target.value
+				this.isAuto = storage[this.autoNumIndex].value
+			},
+			reserveNumBindChange(e,storage){
+				if (storage.length <= 0) {
+					this.reserveNumIndex = null
+					return
+				}
+				this.reserveNumIndex = e.target.value
+				this.isReserve = storage[this.reserveNumIndex].value
+			},
+			//鑷冲簱浣�
+			seachLocationNo() {
+				uni.navigateTo({
+					url: '/pages/wareHouse/finishProductIn/locNoList'
+				})
+			},
+			loadList(result) {
+				
+				uni.showLoading({
+					mask: true,
+					title: "鍔犺浇涓�",
+				});
+				let that = this
+				if(that.list.length > 1) {
+					uni.showToast({
+						title: '鎴愬搧鍏ュ簱涓嶆敮鎸佹壒閲忔搷浣�',
+						icon: "none"
+					});
+					return
+				}
+				if (result) {
+					let data = {
+						sn: (this.isUseLotBatchNo?result.lot_batch_no:result.sn_no),
+						partNo: result.part_no
+					}
+					// 鏌ヨ搴撳瓨淇℃伅
+					that.$u.api.finishProductIn.list(data).then(res => {
+						that.index++
+						let reList = res.data
+						
+						if (reList.length == 0) {
+							uni.showToast({
+								title: `搴撲綅鍙�:${that.tolocationNo},闆朵欢鍙�:${data.partNo},SN:${data.sn},鏈壂鍒板簱瀛樹俊鎭痐,
+								icon: "none"
+							});
+						} else {
+							for (let i = 0; i < reList.length; i++) {
+								let item = {
+									id: reList[i].id,
+									partNo: reList[i].partNo,
+									partName: reList[i].partName,
+									partBatchNo: reList[i].partBatchNo,
+									ifsBatchNo: reList[i].ifsBatchNo,
+									unit: reList[i].unit,
+									locationNo: reList[i].locationNo,
+									availableStockQuantity: reList[i].availableStockQuantity,
+									arriveLocationNo: that.tolocationNo,
+									moveQty: reList[i].availableStockQuantity,
+									customerOrderNo: reList[i].customerOrderNo,
+									materialCode:result.material_code
+								}
+								
+								that.list.push(item)
+							}
+							if(this.isAuto){
+								this.submit()
+							}
+						}
+						uni.hideLoading();
+					})
+					
+				}
+			},
+			//鑷冲簱浣嶅彿璁剧疆
+			setNo(no) {
+				this.tolocationNo = no
+			},
+			deleteHandle(obj) {
+				let that = this
+				uni.showModal({
+					title: '鎻愮ず',
+					content: '姝ゆ搷浣滃皢鍒犻櫎璇ュ叆搴撲俊鎭�, 鏄惁缁х画?',
+					success: function(res) {
+						if (res.confirm) {
+							that.list.map((item, index) => {
+								if (obj.id == item.id) {
+									that.list.splice(index, 1)
+								}
+							});
+						}
+					}
+				});
+			},
+			submit() {
+				let that = this
+				that.list.map((item) => {
+					if (item.moveQty <= 0) {
+						uni.showToast({
+							title: '璇峰叆搴撴暟閲忓繀椤诲ぇ浜�0',
+							icon: "none"
+						});
+						return
+					}
+					if (item.moveQty > item.availableStockQuantity) {
+						uni.showToast({
+							title: '鍏ュ簱鏁伴噺涓嶈兘澶т簬鍙敤搴撳瓨鏁伴噺',
+							icon: "none"
+						});
+						return
+					}
+				});
+				if(that.list.length > 1) {
+					uni.showToast({
+						title: '鎴愬搧鍏ュ簱涓嶆敮鎸佹壒閲忔搷浣�',
+						icon: "none"
+					});
+					return
+				}
+				let subList = []
+				that.list.map((item) => {
+					let sub = {
+						stockId: item.id,
+						arriveLocationNo: item.arriveLocationNo,
+						moveQty: item.moveQty,
+						materialCode:item.materialCode,
+						snNo:item.partBatchNo,
+						isReserve:that.isReserve
+					}
+					subList.push(sub)
+				});
+				
+				that.$u.api.finishProductIn.addList(subList).then(res => {
+					if (res.code == 0) {
+						uni.showToast({
+							title: '鎻愪氦鎴愬姛',
+							duration: 2000
+						});
+						that.index = 0
+						that.list = []
+					} else {
+						uni.showModal({
+							title: '鎻愮ず',
+							content: res.msg||'鎻愪氦澶辫触',
+							showCancel: false,
+							success: function() {
+
+							}
+						})
+					}
+				})
+			},
+		}
+	};
+</script>
+<style lang="scss" scoped>
+	.finishProductIn-index-bg{
+		background-color: #F6F9FF;
+		background-image: url('~@/static/custom/finishProductIn/locNoBg.png');
+		// background: linear-gradient(180deg,rgba(206,227,254,1),rgba(206,227,254,1) 20%,rgba(206,227,254,0.5) 40%,rgba(206,227,254,0.25) 60%,rgba(206,227,254,0.08) 80%,rgba(206,227,254,0));
+		padding: 0 20rpx;
+		background-attachment: fixed;
+		background-size: 100% auto;
+		background-repeat: no-repeat;
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		width: 100%;
+		z-index: -1;
+	}
+	.finishProductIn-index-param{
+		padding: 50rpx 30rpx 0rpx 30rpx;
+		.finishProductIn-index-param-view{
+			height: 300rpx;
+			background: rgba(255,255,255,0.61);
+			box-shadow: 0rpx 6rpx 8rpx 0rpx rgba(110,120,135,0.09);
+			border-radius: 10rpx;
+			padding:0rpx 23rpx;
+			margin-bottom: 20rpx;
+			.finishProductIn-index-param-item{
+				height: 100rpx;
+				border: 1px solid #ADC8E4;
+				line-height: 100rpx;
+				display:flex;
+				justify-content: space-between;
+				border: none;
+				.finishProductIn-index-param-item-left{
+					.item-one{
+						font-size: 30rpx;
+						color: #4F4F4F;
+					}
+				}
+				.finishProductIn-index-param-item-right{
+					display: flex;
+					.item-one{
+						font-size: 30rpx;
+						color: #333333;
+						margin-right: 6rpx;
+					}
+					.item-two{
+						font-size: 30rpx;
+						color: #A6B4CC;
+						margin-right: 6rpx;
+					}
+					.item-three{
+						font-size: 30rpx;
+						color: #214DED;
+						margin-right: 6rpx;
+					}
+				}
+			}
+			.param-extra{
+				border-bottom: 1px solid #E8EBEE;
+			}
+		}
+	}
+	
+	.finishProductIn-index-operate-info{
+		height: 144rpx;
+		width: 690rpx;
+		margin: 0 auto 20rpx;
+		.finishProductIn-index-operate-info-view{
+			background-image: url('~@/static/custom/finishProductIn/info-bg.png');
+			background-size: 100% auto;
+			background-repeat: no-repeat;
+			height: 144rpx;
+			position: relative;
+			.info-one{
+				position:absolute;
+				top:0rpx;
+				left:60rpx;
+				height:144rpx;
+				display: flex;
+				flex-direction:column;
+				justify-content: center;
+                text-align: center;
+				.t1{
+					font-size: 36rpx;
+					color: #0C72FF;
+					font-weight: bold;
+				}
+				.t2{
+					font-size: 28rpx;
+					color: #4C4E4E;
+				}
+			}
+			.info-two{
+				position:absolute;
+				top:0rpx;
+				left:270rpx;
+				height:144rpx;
+				display: flex;
+				flex-direction:column;
+				justify-content: center;
+				text-align: center;
+				.t1{
+					font-size: 36rpx;
+					color: #0C72FF;
+					font-weight: bold;
+				}
+				.t2{
+					font-size: 28rpx;
+					color: #4C4E4E;
+				}
+			}
+		}
+	}
+	
+	.wrap .finishProductIn-index-scroll-list{
+		height:calc(100vh - var(--window-top) - var(--window-bottom) - 756rpx);
+	    width:100%;
+	}
+	.finishProductIn-index-scroll-list-group{
+		::v-deep .u-cell-item-box {
+			background-color:rgba(250,252,255,0.36) !important;
+			padding:0rpx 30rpx ;
+	    }
+		.content {
+			font-size: 12px;
+			background-color: #FFFFFF;
+			box-sizing: border-box;
+			border-radius: 10rpx;
+			margin: 0rpx 0rpx 26rpx;
+			height: 450rpx;
+			padding: 10rpx 20rpx;
+			box-shadow:0rpx 6rpx 12rpx 2rpx rgba(127, 127, 127, 0.1) !important;
+			position:relative;
+			.content-header{
+				.header-item{
+					height: 50rpx;
+					display: flex;
+					align-items:center;
+					.content-header-icon-one{
+						background-image: url('~@/static/custom/finishProductIn/label-icon-1.png');
+						background-size: 100% auto;
+						background-repeat: no-repeat;
+						height:28rpx;
+						width:28rpx;
+					}
+					.content-header-icon-two{
+						background-image: url('~@/static/custom/finishProductIn/header_icon.png');
+						background-size: 100% auto;
+						background-repeat: no-repeat;
+						height:28rpx;
+						width:28rpx;
+					}
+					.content-header-title{
+						margin-left: 11rpx;
+						font-size: 26rpx;
+						font-weight: bold;
+						color: #333333;
+					}
+					.content-header-title-ne{
+						margin-left: 11rpx;
+						font-size: 26rpx;
+						color: #333333;
+					}
+			    }
+				.header-item-toolbar{
+					position: absolute;
+					background-image: url('~@/static/custom/finishProductIn/del-icon.png');
+					background-size: 100% auto;
+					background-repeat: no-repeat;
+					height:60rpx;
+					width:140rpx;
+					right:0;
+					top:0;
+					display: flex;
+					justify-content: flex-end;
+					padding-top: 10rpx;
+					padding-right: 18rpx;
+					.header-item-toolbar-del-icon{
+						background-image: url('~@/static/custom/finishProductIn/icon_dele.png');
+						background-size: 100% auto;
+						background-repeat: no-repeat;
+						height:25rpx;
+						width:22rpx;
+						margin-top: 5rpx;
+					}
+					.header-item-toolbar-del-text{
+						margin-left:7rpx;
+						height: 23rpx;
+						font-size: 24rpx;
+						color: #FFFFFF;
+					}
+				}
+			}
+			
+			.content-body{
+				margin-top:8rpx;
+				.part-one{
+					display: flex;
+					justify-content: space-between;
+					margin-bottom: 16rpx;
+					.part-one-left{
+						padding: 8rpx 16rpx;
+						height: 50rpx;
+						background: #EFF5FF;
+						border-radius: 20rpx;
+						font-size: 24rpx;
+						color: #2D85EC;
+					}
+					.part-one-right{
+						padding: 8rpx 16rpx;
+						height: 50rpx;
+						background: #EBFEFD;
+						border-radius: 20rpx;
+						font-size: 24rpx;
+						color: #139FAC;
+					}
+				}
+				.part-two{
+					background: #F5F9FF;
+					border-radius: 10rpx;
+					padding-left: 20rpx;
+					padding-top: 10rpx;
+					padding-bottom: 10rpx;
+					height: 130rpx;
+					margin-bottom: 16rpx;
+					.list-row{
+						display: flex;
+						justify-content: space-between;
+						height: 55rpx;
+						line-height: 55rpx;
+						font-size: 26rpx;
+						font-weight: 500;
+						color: #666666;
+						.list-row-left{
+							width: 54%;
+						}
+						.list-row-right{
+							width: 46%;
+						}
+					}
+				}
+				
+				.part-three{
+					display: flex;
+					justify-content: space-between;
+					padding-left: 20rpx;
+					.part-three-left{
+						width: 54%;
+						._label{
+							font-size: 26rpx;
+							color: #444444;
+						}
+						._content{
+							margin-top: 12rpx;
+							height: 56rpx;
+							line-height: 52rpx;
+							background: #F6FAFF;
+							border: 1px solid #4FA0FF;
+							border-radius: 8rpx;
+							width:265rpx;
+							padding-left: 20rpx;
+							color: #214DED;
+							font-weight: bold;
+						}
+					}
+					.part-three-right{
+						width: 46%;
+						._label{
+							font-size: 26rpx;
+							color: #444444;
+						}
+						._content{
+							margin-top: 12rpx;
+							height: 56rpx;
+							line-height: 52rpx;
+							background: #F6FAFF;
+							border: 1px solid #4FA0FF;
+							border-radius: 8rpx;
+							width:265rpx;
+							padding-left: 20rpx;
+							padding-right: 10rpx;
+							color: #214DED;
+							font-weight: bold;
+							display: flex;
+							justify-content: space-between;
+							align-items: center;
+							.edit_icon{
+								background-image: url('~@/static/custom/finishProductIn/icon_edit.png');
+								background-size: 100% auto;
+								background-repeat: no-repeat;
+								height:26rpx;
+								width:26rpx;
+							}
+							::v-deep .u-input__input{
+								font-size: 26rpx !important;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	.finishProductIn-form-footer{
+		display: flex;
+		margin-top: 10rpx;
+		margin-bottom: 10rpx;
+		margin-left: 20rpx;
+		margin-right: 20rpx;
+		padding-bottom: 14rpx;
+		.btn {
+		  flex: 1;
+		  margin: 10rpx;
+		  background: #214DED;
+		  box-shadow: 0rpx 6rpx 8rpx 0rpx rgba(4,49,212,0.3);
+		  font-weight: bold;
+		  color: #FEFEFE;
+		  font-family: PingFang SC;
+		}
+	}
+</style>

--
Gitblit v1.9.3