<template>
	<view class="container all-type-list-wrapper">
		<product-list ref="productList" @operationConfim="hanldOperationConfim"></product-list>
		<!--底部选择模态层弹窗组件 -->
		<view class="popup spec" :class="specClass"  @touchmove.stop.prevent="discard" @tap="hideSpec">
			<!-- 遮罩层 -->
			<view class="mask"></view>
			<view class="layer" @tap.stop="discard" :style="{paddingBottom :isIphoneX ? '68rpx' : '36rpx',bottom:isIphoneX ?'-332rpx' : '-294rpx'}">
				<view class="content">
					<view class="layer-smimg">
						<image :src="handleData.image" mode=""></image>
					</view>
					<view class="layer-nunbox">
						<view class="layer-nunbox-t">
							<view class="layer-nunbox-text">数量:</view>
							<view class="number-box">
								<view  class="iconfont icon-jianhao" :class="[isQuantity==true?'disabled':'']" @click="changeCountSub()"></view>
								<input class="btn-input" type="number" v-model="number" maxlength='4'  @blur="changeNumber($event)">
								<view  class="iconfont icon-jiahao"  :class="[isStock==true?'disabled':'']" @click="changeCountAdd()"></view>
							</view>
						</view>
						<view class="layer-nunbox-b">
							<view class="text">单价:
								<text class="p sm">￥</text>
								<text class="p bg">{{buyRetailPrice.toFixed(2)}}</text>
							</view>
						</view>
					</view>
				</view>
				<view class="btn">
					<view class="button buy" @click="toConfirmation">立即购买</view>
					<view class="button add" @click="getAddProductCart">加入购物车</view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
	import productList from '@/components/cm-module/listTemplate/productList'
	export default{
		components:{
			productList
		},
		data(){
			return{
				userId: '',
				serverUrl: '',
				emptyText: '',
				lastPageType: '',
				lastPageVal: '',
				isIphoneX:this.$store.state.isIphoneX,
				specClass: '',//规格弹窗css类，控制开关动画
				handleData:{},
				isQuantity:false,
				isStock:false,
				minBuyNumber:0,
				number:0,
				buyRetailPrice:0,
				buyRetailPriceStep:1,
			}
		},
		onLoad() {

		},
		methods:{
			hanldOperationConfim(data){//显示选择数量确认弹窗
				this.specClass = 'show'
				this.handleData = data
				this.minBuyNumber = data.minBuyNumber
				this.buyRetailPrice = data.price
				this.buyRetailPriceStep = data.step
				if(this.handleData.ladderPriceFlag == '1'){
					this.number = data.maxBuyNumber
				}else{
					this.number = data.minBuyNumber
				}
			},
			hideSpec() {//关闭选择数量确认弹窗
				this.specClass = 'hide';
				setTimeout(() => {
					this.specClass = 'none';
				}, 200);
			},
			changeCountAdd(){//popup弹窗数量增加按钮
				if(this.buyRetailPriceStep == 2){
					this.number += this.minBuyNumber
				}else{
					this.number++
				}
				this.calculatPerice()
			},
			changeCountSub(){//popup弹窗数量减按钮
				if(this.number<=this.minBuyNumber){
					this.number= this.minBuyNumber
					this.isQuantity =true
					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
					return
				}else{
					if(this.buyRetailPriceStep == 2){
						this.number-=this.minBuyNumber
					}else{
						this.number--
					}
					this.calculatPerice()
					this.isQuantity =false
				}
			 },
			changeNumber(e){
				let _value = e.detail.value;
				if(!this.$api.isNumber(_value)){
					this.number = this.minBuyNumber
				}else if(_value < this.minBuyNumber){	
					this.$util.msg(`该商品最小起订量为${this.minBuyNumber}`,2000);
					this.number = this.minBuyNumber
				}else if( _value % this.minBuyNumber !=0 ){
					this.$util.msg(`购买量必须为起订量的整数倍`,2000);
					this.number = this.minBuyNumber
				}else{
					this.number = e.detail.value
					this.calculatPerice()
				}
			},
			calculatPerice(){//判断是否为阶梯价然后做计算价格处理
				if(this.handleData.ladderPriceFlag == '1'){
					this.handleData.ladderPriceList.forEach((item,index)=>{
						if(this.number>=item.buyNum){
							this.buyRetailPrice = item.buyPrice
						}
					})
				}
			},
			toConfirmation(){//跳转确认订单页面
				this.specClass = 'hide';
				let productStp ={
						allPrice:this.number*this.buyRetailPrice,
						allCount:this.number,
						productID:this.handleData.productId,
						productCount:this.number
				}	
				this.$api.navigateTo(`/pages/user/order/create-order?type=prodcut&data=${JSON.stringify({data:productStp})}`)
				setTimeout(() => {
					this.specClass = 'none';
				}, 200);
			},
			getAddProductCart(){//增加购物车成功和toast弹窗提示成功
				this.ProductService.shoppingAddCart({productID:this.handleData.productId,userID:this.userId,productCount:this.number}).then(response => {
					this.specClass = 'hide';
					this.$util.msg(response.msg,1500,true,'success')
					setTimeout(() => {this.specClass = 'none'}, 200)
					this.GetUserCartNumber()
				}).catch(error =>{
					this.$util.msg(error.msg,2000);
				})
			},
			GetUserCartNumber(){
				this.UserService.GetUserCartNumber({userId:this.userId}).then(response =>{
					this.$refs.productList.cartQuantity = response.data.length
				}).catch(error =>{
					console.log('查询用户购物车数量失败')
				})
			},
			discard(){
				//丢弃
			}
		},
		onShow() {
			let pages = getCurrentPages(),thisPage = pages[pages.length - 1];
			this.$api.getStorage().then((resolve) =>{
				this.userId = resolve.userId ? resolve.userId : 0
			})
		},
	}
</script>

<style lang="scss">
	page {
		background: $sub-bg-color;
		.all-type-list-wrapper {
			display: flex;
			flex-direction: column;
		}
	}
	/* 加入购物模态层*/
	@keyframes showPopup {
		0% {
			opacity: 0;
		}
		100% {
			opacity: 1;
		}
	}
	@keyframes hidePopup {
		0% {
			opacity: 1;
		}
		100% {
			opacity: 0;
		}
	}
	@keyframes showLayer {
		0% {
			transform: translateY(0);
		}
		100% {
			transform: translateY(-100%);
		}
	}
	@keyframes hideLayer {
		0% {
			transform: translateY(-100%);
		}
		100% {
			transform: translateY(0);
		}
	}
	@keyframes showAmnation {
		0% {
			top: -12rpx;
			opacity: 0;
		}
		50% {
			top: -60rpx;
			opacity: 1;
		}
		100% {
			top: -100rpx;
			opacity: 0;
		}
	}
	@keyframes hideAmnation {
		0% {
			top: -100rpx;
			opacity: 0;
		}
		100% {
			top: -12rpx;
			opacity: 0;
		}
	}
	.popup {
		position: fixed;
		top: 0;
		width: 100%;
		height: 100%;
		z-index: 999;
		display: none;
		.mask{
			position: fixed;
			top: 0;
			width: 100%;
			height: 100%;
			z-index: 21;
			background-color: rgba(0, 0, 0, 0.6);
		}
		.layer {
			position: fixed;
			z-index: 22;
			bottom: -294rpx;
			width: 702rpx;
			padding: 24rpx 24rpx 36rpx 24rpx;
			height: 236rpx;
			border-radius: 20rpx 20rpx 0 0;
			background-color: #fff;
			display: flex;
			flex-wrap: wrap;
			align-content: space-between;
			.content {
				width: 100%;
			}
			.btn {
				width: 100%;
				height: 88rpx;
				display: flex;
				.button {
					width: 340rpx;
					height: 88rpx;
					color: #fff;
					display: flex;
					align-items: center;
					justify-content: center;
					font-size: $font-size-28;
					border-radius: 44rpx;
					&.buy{
						background: $btn-confirm;
					}
					&.add{
						background: rgba(239, 175, 0, 1);
						margin-left: 20rpx;
					}
				}
			}
		}
		
		&.show {
			display: block;
			.mask{
				animation: showPopup 0.2s linear both;
			}
			.layer {
				animation: showLayer 0.2s linear both;
			}
		}
		&.hide {
			display: block;
			.mask{
				animation: hidePopup 0.2s linear both;
			}
			
			.layer {
				animation: hideLayer 0.2s linear both;
			}
		}
		&.none {
			display: none;
		}
		&.service {
			.row {
				margin: 30upx 0;
				.title {
					font-size: 30upx;
					margin: 10upx 0;
				}
				.description {
					font-size: 28upx;
					color: #999;
				}
			}
		}
		.layer-smimg{
			width: 114rpx;
			height: 114rpx;
			float: left;
			border-radius: 10rpx;
			margin-right: 24rpx;
			image{
				width: 114rpx;
				height: 114rpx;	
				border-radius: 10rpx;
			}
		}
		.layer-nunbox{
			justify-content: space-between;
			align-items: center;
			width: 536rpx;
			height: 88rpx;
			padding: 13rpx 0 0 0;
			float: left;
			.layer-nunbox-t{
				width: 100%;
				height:44rpx;
				position:relative;
				display: flex;
				.layer-nunbox-text{
					line-height: 44rpx;
					font-size: $font-size-28;
				}
				.number-box{
					display: flex;
					justify-content: center;
					align-items: center;
					border: 2rpx solid #ffe6dc;
					border-radius: 30rpx;
					height: 48rpx;
					margin-left: 20rpx;
					.iconfont{
						font-size: $font-size-24;
						padding:0 18rpx;
						color: #999999;
						text-align: center;
						line-height: 48rpx;
						font-weight: bold;
						background: #fef6f3;
						&.icon-jianhao{
							border-radius: 30rpx 0 0 30rpx;
						}
						&.icon-jiahao{
							border-radius: 0 30rpx 30rpx 0;
						}
					}
					.btn-input{
						width: 62rpx;
						height: 48rpx;
						line-height: 48rpx;
						background: #FFFFFF;
						border-radius: 4rpx;
						text-align: center;
						font-size: $font-size-28;
					}
				}
				.product-step{
					position: absolute;
					left: 45rpx;
					bottom: 0;
					height: 44rpx;
					background: #FFFFFF;
				}
			}
			.layer-nunbox-b{
				width: 100%;
				height:44rpx;
				margin-top: 13rpx;
			}
			.text{
				line-height: 44rpx;
				font-size: $font-size-28;
				.p{
					color: #FF2A2A;
				}
				.p:first-child{
					margin-left: 30rpx;
				}
				.p.sm{
					font-size: $font-size-24;
				}
			}
		}
	}	
</style>
