<template>
	<view class="page">
		<StickyNavBar>
			<NavBar title="生产发料"></NavBar>
			<view class="headerTitle">
				<view class="">
					<view class="items">领料申请:{{goodsList[0]&&goodsList[0].applyNo}}</view>
					<view class="items">{{goodsList[0]&&goodsList[0].workstationCode}}/{{goodsList[0]&&goodsList[0].workstationName}}</view>
					<view class="items">计划日期:{{goodsList[0]&&goodsList[0].startTime}}</view>
				</view>
				<view class="checkedCase">
					<checkbox-group @change="checkedChange">
						<checkbox value="r1" :checked="checkedBox" />是否结案
					</checkbox-group>
				</view>
			</view>
			<view class="btn">
				<uni-easyinput
					prefixIcon="search"
					:disabled="isDisabled"
					v-model="wxparams"
					:focus="isFocus"
					placeholder="请扫描产品包装条码/外箱码"
					@confirm="handleConfirm"
				></uni-easyinput>
			</view>
			<view class="total">
				<view class="left">物料明细</view>
				<view class="right">
					物料数量：
					<!-- <text class="blue">{{ totalNum }}</text>
					<text class="line">/</text> -->
					<text class="">{{ goodsList.length }}</text>
				</view>
			</view>
		</StickyNavBar>
		<ContentLoadingMore class="cardbox" :list='goodsList'>
			<view class="cardContent" v-for="(item, index) in goodsList" :key="index">
				<scanningList :item='item' :list='list'/>
			</view>
		</ContentLoadingMore>
		<BottomBtn :btnArr="btnArr" @getBtnHandle="getBtnHandle"></BottomBtn>
	</view>
</template>

<script>
import StickyNavBar from '@/components/StickyNavBar/index.vue';
import ContentLoadingMore from '@/components/ContentLoadingMore/index.vue';
import BottomBtn from '@/components/BottomBtn/index.vue';
import scanningList from "./scanningList.vue"
export default {
	components: {
		StickyNavBar,
		ContentLoadingMore,
		BottomBtn,
		scanningList
	},
	data() {
		return {
			checkedBox: false,
			r1:'',
			// totalNum: 0,
			number: 0,
			show: true,
			nlpla: 'YD-02-02-3',
			wxparams: '',
			btnArr: [
				{
					style: '',
					type: 'warning',
					text: '返回',
					way: 'goBack'
				},
				{
					style: '',
					type: 'primary',
					text: '提交',
					way: 'goSubmit'
				}
			],
			goodsList: [],
			isFocus: true,
			isDisabled: false,
			OrderNum: '',
			list: []
		};
	},
	computed:{
		totalNum(){
			let num = 0 
			let i=null,j=null
			const data = JSON.parse(JSON.stringify(this.list))
			const result = data.filter((item, index, self) => {
				return self.findIndex(t => t.itemCode === item.itemCode) === index;
			});
			for(i = 0; i < this.goodsList.length; i++){
				if(this.goodsList[i].itemCode === result[i].itemCode && result[i].vista){
					num++
				}
			}
			return num || 0
		},
	},
	onLoad(option) {
		if(option && option.order){
			this.OrderNum = option.order
			this.getOrder(option.order)
		}
	},
	watch: {
	  
	},
	created() {
	},
	methods: {
		reset(){
			setTimeout(() => {
				this.wxparams = '';
				this.isFocus = true;
				this.isDisabled = false;
			}, 1000);
		},
		getOrder(applyNo) {
			this.$u.api.mesApi
				.pdaMaterialcreate({
					pageNum:1,
					pageSize:10,
					applyNo
				})
				.then((res) => {
					if (res && res.code - 200 === 0) {
						this.list = res.rows
						const data = res.rows
						// let num = 0
						// data.forEach((ele,index) => {
						// 	ele.sonItemCode = []
						// 	ele.sonItemCode.push(...data)
						// 	ele.applyNum1 = 0
						// })
						const result = data.filter((item, index, self) => {
						    return self.findIndex(t => t.sapItemCode === item.sapItemCode) === index;
						});
						// let i=null,j=null
						// for(i = 0; i < result.length; i++){
						//   for(j = 0; j < result[i].sonItemCode.length; j++){
						// 	if(result[i].itemCode !== result[i].sonItemCode[j].itemCode){
						// 		result[i].sonItemCode.splice(j,1)
						// 		j--
						// 	}else{
						// 		result[i].applyNum1 += result[i].sonItemCode[j].applyNum
						// 	}
						//   }
						// }
						// result.forEach((ele,index) => {
						// 	ele.applyNum = []
						// })
						this.goodsList = [...result]
					} else {
						this.$u.toast(res.msg);
					}
					this.loading = false;
				});
		},
		checkedChange(){
			this.checkedBox = !this.checkedBox
		},
		getBtnHandle(row) {
			this[row.way]();
		},
		goBack() {
			console.log('进来')
			uni.navigateBack();
		},
		goSubmit() {
			if (this.list.length === 0) {
				return;
			}
			let arr = this.list.filter(ele=>ele.vista)

			// "windCase": null,是否结案   Y是  N否
			arr.forEach((ele,index) => {
				ele.windCase = this.checkedBox ? 'Y': 'N'
				ele.AUFNR = ele.workorderCode
				ele.ERFMG = ele.vista
				ele.MTSNR = ele.applyNo
				ele.ZEILE = index+1
				ele.RSNUM = ele.requirementNumber
				ele.RSPOS = ele.requirementProjectNumber
			})
			const params = {
				'zencode': 'A008',
				'item': arr
			}
			this.$u.api.sapApi
				.sapProiss(params)
				.then((res) => {
					this.loading = false;
					if(!Array.isArray(res)){
						return
					}
					if (res.every((item) => item.TYPE === 'S')) {
						// this.$u.toast('提交成功');
						this.handleMes(arr,res[0].MESSAGE_V1)
					}
					const foundObject = res.find(item => item.TYPE === 'E');
					if(foundObject && foundObject.MESSAGE){
						this.$u.toast(foundObject.MESSAGE);
					}
				});
		},
		handleMes(arr,num){
			arr.forEach(ele => {
				ele.batchCode = ele.CHARG
				ele.quantityIssued = ele.vista
				ele.issueCode = num
				ele.issueType = ele.materialType
			});
			this.$u.api.mesApi
				.pdaSapissuecreate(arr)
				.then((res) => {
					this.loading = false;
					console.log(res);
					if(res && res.code == 200){
						this.$u.toast('提交成功');
						setTimeout(() => {
							this.goBack()
						}, 1000);
					}else{
						this.$u.toast(res.msg);
					}
				});
		},
		handleConfirm(e) {
			e && this.getPlnr(e);
		},
		getPlnr(plnr) {
			this.isDisabled = true;
			this.isFocus = false
			this.$u.api.sapApi
				.sapBlpl({
					plnr,
					ztype: '002'
				})
				.then((res) => {
					if (res && res.MSG[0].TYPE === 'S') {
						if (this.list.some((item) => item.PLNR === plnr)) {
							this.reset()
							this.$u.toast('已经存在当前条码');
							return
						}
						res.BLPL.forEach(ele => {
							ele.vista = 0
						});
						// this.handleAverage(res,plnr)
						this.factorial(res,plnr,0)
						this.reset()
					} else {
						this.reset()
						this.$u.toast(res.MSG[0].MESSAGE);
					}
					this.loading = false;
				});
		},
		// 按照比例来分的方法
		handleAverage(res,plnr){
			console.log(`output->`,this.list)
			let arr = []
			for (let m = 0; m < this.list.length; m++) {
				if(this.list[m].sapItemCode == res.BLPL[0].MATNR){
					arr.push(this.list[m])
				}
			}
			let total = 0
			arr.forEach(ele => {
				total += ele.applyNum
			});
			this.list.forEach((ele,idx) => {
				if(ele.vista){
					this.list.push({
						...this.list[idx],
						vista : ele.applyNum/total*res.BLPL[0].PACMG ,
						charg: res.BLPL[0].CHARG,
						... res.BLPL[0]
					})
					return
				}
				if(ele.sapItemCode == res.BLPL[0].MATNR){
					this.$set(this.list,idx,{...this.list[idx],vista : ele.applyNum/total*res.BLPL[0].PACMG ,charg: res.BLPL[0].CHARG,... res.BLPL[0]})
				}
			});
		},
		handleAddList(idx,vista,res){
			const newCard = {
				...this.list[idx],
				vista,
				// vista : ((this.list[idx].applyNum - 0)-(this.list[idx].vista-0)).toFixed(3),
				add: '1',
				// charg: res.BLPL[0].CHARG,
				... res.BLPL[0]
			}
			this.list.splice(idx+1, 0, newCard);
		},
		factorial(res,plnr,idx,num=0) {
			// 找出符合条件的数组长度
			this.list.forEach(ele => {
				console.log(`output->`,ele.sapItemCode,res.BLPL[0].MATNR)
				console.log(`output->thi`,this.list.filter(item => item.sapItemCode == res.BLPL[0].MATNR))
			});
			const count = this.list.filter(item => item.sapItemCode == res.BLPL[0].MATNR).length
			if(!count){
				this.$u.toast('没有匹配到对应物料');
				return
			}
			for (let m = 0; m < this.list.length; m++) {
				if(this.list[m].sapItemCode == res.BLPL[0].MATNR){
					// 这是递归的方法
					if(idx){
						if(this.list[idx]){
							if(num > this.list[idx].applyNum){
								this.$set(this.list,idx,{...this.list[idx],vista : this.list[idx].applyNum,charg: res.BLPL[0].CHARG,... res.BLPL[0]})
								this.factorial(res,plnr,idx+1,num-this.list[idx].applyNum)
							}else{
								this.$set(this.list,idx,{...this.list[idx],vista : num,charg: res.BLPL[0].CHARG,... res.BLPL[0]})
								this.factorial(res,plnr,idx+1,0)
							}
						}
						return
					}
					// if(this.list[m].grantNum){
						// 发过多少货
					// }else{
						// 没有填入数据的
						debugger
						if(!this.list[m].vista){
							// 上一位的数据是否满足
							if(this.list[m-1] && this.list[m-1].vista < this.list[m-1].applyNum){
								const newCard = {
									...this.list[m-1],
									vista : this.list[m-1].applyNum - this.list[m-1].vista,
									add: '1',
									charg: res.BLPL[0].CHARG,
									... res.BLPL[0]
								}
								this.list.splice(m, 0, newCard);
								if( res.BLPL[0].PACMG > (this.list[m-1].applyNum - this.list[m-1].vista)){
									this.factorial(res,plnr, m+1, res.BLPL[0].PACMG - (this.list[m-1].applyNum - this.list[m-1].vista))
								}
								return
							}
							// 只有一个
							// if(count === 1){
								// this.$set(this.list,m,{...this.list[m],vista : res.BLPL[0].PACMG,charg: res.BLPL[0].CHARG,... res.BLPL[0]})
							// }else{
								if( res.BLPL[0].PACMG > this.list[m].applyNum){
									if(count === m){
										this.$set(this.list,m,{...this.list[m],vista : res.BLPL[0].PACMG,charg: res.BLPL[0].CHARG,... res.BLPL[0]})
										return
									}
									this.list[m].vista = this.list[m].applyNum
									this.$set(this.list,m,{...this.list[m],vista : this.list[m].applyNum,charg: res.BLPL[0].CHARG,... res.BLPL[0]})
									this.factorial(res,plnr,m+1,res.BLPL[0].PACMG-this.list[m].applyNum)
									return;
								}else{
									this.$set(this.list,m,{...this.list[m],vista : res.BLPL[0].PACMG,charg: res.BLPL[0].CHARG,... res.BLPL[0]})
									console.log(`output->res`,this.list[m])
									return
								}
							// }
						}else{
							console.log(`output->`,this.list[m].vista, this.list[m].applyNum)
							if(this.list[m].vista < this.list[m].applyNum){
								let arr = []
								this.list.forEach(ele => {
									if(ele.sapItemCode == this.list[m].sapItemCode){
										arr.push(ele)
									}
								});
								let totalApplyNum = 0
								let totalVista =0
								arr.forEach(ele => {
									totalApplyNum += ele.applyNum
									console.log(`output->ele`,ele.vista)
									// totalVista += (ele.vista-0)
								});
								// 最终填入的数量
								const endVista = ((this.list[idx].applyNum - 0)-(this.list[idx].vista-0)).toFixed(3)
								if(totalVista < totalApplyNum){
									this.handleAddList(m,endVista,res)
								}
								if((res.BLPL[0].PACMG-0)-endVista >0){
									this.factorial(res,plnr,m+2,(res.BLPL[0].PACMG-0)-endVista)
								}
								return
							}else{
								this.$u.toast('暂无剩余物料');
							}
						}
					// }
				}
			}
		}
	}
};
</script>

<style lang="scss" scoped>
page {
	background: #f8f8f8;
}
.headerTitle{
	padding: 20rpx;
	font-weight: 600;
	.items{
		line-height: 40rpx;
	}
}
.btn {
	padding: 20rpx;
	background: #fff;
	.topSearch {
		margin-bottom: 20rpx;
	}
}
.bottomBtn {
	position: sticky;
	padding: 20rpx;
	display: flex;
	justify-content: space-between;
	background: #fff;
	bottom: 0rpx;
	margin-top: 20rpx;
	.u-btn {
		width: 300rpx;
	}
}
.blue {
	color: #3f9dcc;
}
.total {
	background: #fff;
	color: #000;
	padding: 0rpx 40rpx;
	display: flex;
	justify-content: space-between;
	font-size: 32rpx;
	.line {
		margin: 0px 10rpx;
	}
}
.cardbox {
	min-height: calc(100vh - 480rpx);
	padding: 0rpx 20rpx;
	margin-top: 20rpx;
}
.cardContent {
	border-radius: 8px;
	background: #fff;
	margin-bottom: 20rpx;
}
.listItemTitle {
	display: flex;
	justify-content: space-between;
	padding: 20rpx;
	border-bottom: 2px solid #f8f8f8;
	.u-btn {
		width: 150rpx;
		margin: 0px;
		margin-top: 10rpx;
	}
	.item {
		line-height: 50rpx;
		color: #333;
		font-size: 28rpx;
		font-weight: 500;
		word-break: break-all;
		font-weight: 600;
	}
}
.listBottom {
	.bottomTitle {
		height: 80rpx;
		position: relative;
		.desc {
			color: #bbb;
			font-size: 24rpx;
			line-height: 80rpx;
			padding-left: 20rpx;
		}
		.topIcons {
			position: absolute;
			left: 50%;
			top: 50%;
			transform: translate(-50%, -50%);
			color: #aaa;
		}
	}
	.bottomBox {
		padding: 20rpx;
		.bottomItem {
			background: #f8f8f8;
			padding: 20rpx;
			margin-bottom: 20rpx;
			.items {
				color: #333;
				font-size: 24rpx;
				height: 40rpx;
				line-height: 40rpx;
			}
		}
	}
}
/deep/ .u-sticky {
	top: 0 !important;
	background: #fff;
}
.checkedCase{
	margin-top: 10rpx;
}
</style>