<template>
	<view>
		<!-- 规格选择 -->
		<uni-popup ref="cartpup" type="share">
			<view class="allcon">
				<view class="gcon" v-if="product">
					<image :src="product.img1"></image>
					<view class="tit-box">
						<view class="price">
							<text class="txt">￥</text>
							<text class="tint">{{product.price}}</text>
							<text class="txt" v-if="product.unit">/{{product.unit}}</text>
						</view>
						<text class="tit2">
							已选: {{product.sels}}
						</text>
						<text class="tit2">
							商品: {{product.name}} {{product.tip}}{{product.sels}}
						</text>
					</view>
				</view>
				<view class="selcon" v-if="product.specs&&product.specs.length>0" >
					<view class="spcitem" v-for="(item, index) in product.specs" :key="index" v-if="item.list.length>0">
						<view class="spcname">
							{{item.name}}
						</view>
						<view class="spcul" v-if="item.list&&item.list.length>0">
							<view class="spcli" v-for="(cell, ii) in item.list" :key="ii" :class="item.sels==ii?'cur':''" @tap="seldo(index,ii)">
								{{cell.name}}
							</view>
						</view>
					</view>
				</view>
				<view class="numcon">
					<view class="ntip">购买数量</view>
					<view class="nadc">
						<uni-number-box v-model="product.quantity" :value="product.quantity" :min="1" :max="product.stock" />
					</view>
				</view>
				<button v-if="buyType==1" type="primary" class="sbtn" data-img="/static/image/cart.png" @tap="addcarDo">加入购物车</button>
				<button v-if="buyType==2" type="primary" class="sbtn1" @tap="gotoBuy()">立即购买</button>
			</view>
		</uni-popup>
		
		<!-- 加入购物车动画 cartx 和 carty 是购物车位置在屏幕位置的比例 例如左上角x0.1 y0.1 右下角 x0.9 y0.9--> 
		<shopCarAnimation ref="carAnmation" :cartx="x" :carty="y"></shopCarAnimation>
		
	</view>
</template>

<script> 
import { myCache,getRemoteFile } from '../../utils/utils.js';
//  加入购物车动画组件
import shopCarAnimation from '@/components/fly-in-cart/fly-in-cart.vue'
export default {
	components: {
		shopCarAnimation
	},
	props: {
		pdata: {
			type: Object,
			default: function () {
			  return null
			},
		},// 商品信息
		ptype: {
			type: Number,
			default: 1,
		},// 1加入购物车，2 购买
		x: {
			type: String,
			default: function () {
			  return "0.1"
			},
		},// 坐标点
		y: {
			type: String,
			default: function () {
			  return "0.1"
			},
		},// 坐标点
	},
	data() {
		return {
			product:{
				specs:[]
			},
			buyType:1
		};
	},
	watch: {
		pdata(value) {
		    this.init(value);
		},
		ptype(value) {
		    this.initbt(value);
		},
	},
	methods: {
		init(value){
			this.product=value;
			this.$forceUpdate();
			if(this.product&&this.product.specs){
				this.selinit();
			}
		},
		initbt(value){
			this.buyType=value;
		},
		seldo(ii,kk){
			console.log(ii,kk)
			this.product.specs[ii].sels=kk;
			this.$forceUpdate();
			this.selinit();
		},
		selinit(){
			// 初始化
			if(this.product.specs&&this.product.specs.length>0){
				var sels='',spData={};
				this.product.specs.forEach((cell,idx)=>{
					if(cell.list&&cell.list[cell.sels]){
						sels=sels+cell.list[cell.sels].name+' ',
						spData[cell.name]=cell.list[cell.sels].name;
					}
				});
				this.product.sels=sels;
				this.product.spData=spData; // 规格的json形式，非字符串
				this.product.skus.forEach(cell=>{
					if(cell.spData==JSON.stringify(spData)){
						this.product.skuId=cell.id;
						this.product.price=cell.price;
						this.product.img=cell.pic?getRemoteFile(cell.pic):this.product.img1;
						this.product.img1=cell.pic?getRemoteFile(cell.pic):this.product.img1;
						this.product.stock=cell.stock;//库存
						if(this.product.quantity>this.product.stock){
							this.product.quantity=this.product.stock
						}
						else if(this.product.quantity==0&&this.product.stock>0){
							this.product.quantity=1
						}
					}
				});
				this.$forceUpdate();
			}
			else{
				this.product.sels='';
				this.product.spData==null;
				this.product.skuId=null;
				this.$forceUpdate();
			}
		},
		retSku(spData){
			var rets=[];
			if(spData){
				var suk= spData;
				var keys=Object.keys(suk);
				keys.forEach(dd=>{
					rets.push(dd+":"+suk[dd])
				});
			}
			return rets.join(',');
		},
		gotoBuy(){
			// 购物车数量要大于0
			if(this.product.quantity<=0){
				uni.showModal({
					title: '提示',
					content: '数量要大于0！',
					cancelText: '取消',
					confirmText: '确定',
				});
				return false;
			}
			
			// 更改字符方式传输
			this.product.spData=JSON.stringify(this.product.spData);
			
			// 缓存购买商品
			var setcart= JSON.parse(JSON.stringify(this.product));
			myCache('buycartList',setcart);
			// 跳转订单结算
			uni.navigateTo({
				url: `/pages/product/order?type=buy`
			});
		},
		async addcarDo(e){
			try{
				// 购物车数量要大于0
				if(this.product.quantity<=0){
					uni.showModal({
						title: '提示',
						content: '数量要大于0！',
						cancelText: '取消',
						confirmText: '确定',
					});
					return false;
				}
				
				var param={
					productId:this.product.id,
					productName:this.product.name,
					pic:this.product.img,
					spData:JSON.stringify(this.product.spData),// this.retSku(this.product.spData) 展示时候再解析，保持数据一致, // 保存字符串 this.product.spData,
					skuId:this.product.skuId,
					quantity:this.product.quantity,
					storeId:myCache('myshopid')?myCache('myshopid'):'',
					isCourse:this.product.isCourse,
				};
				const {data: res1} = await uni.$http.post('/api/cart/add',param);
				if (res1) {
					// 购物车缓存
					this.updatecart(e);
					this.close();
				}
				else{
					uni.showModal({
						title: '提示',
						content:  res1.message? res1.message:'加入购物车失败！请稍候再试',
						cancelText: '取消',
						confirmText: '确定',
					});
				}
			}
			catch(e){
				console.log(e)
			}
		},
		async updatecart(e){
			try{
				const {data: res } = await uni.$http.get('/api/cart/list');
				if (res&&res.length>0) {
					// 购物车缓存
					myCache("carts",res);
					// 加入购物车动画
					this.$refs.carAnmation.touchOnGoods(e);
					this.$emit("addShopCar", this.product.sels,this.product.quantity,this.buyType);
				}
			}
			catch(e){
				console.log(e)
			}
		},
		close(){
			this.$refs.cartpup.close();
		},
		show() {
			this.$refs.cartpup.open();
			this.product=this.pdata;
			this.buyType=this.ptype;
			console.log(this.product,this.buyType)
			this.$forceUpdate();
			if(this.product&&this.product.specs){
				this.selinit();
			}
		},
	}
}
</script>

<style lang="scss" scoped>
	/* 弹框 */
	.allcon{
		width: 100%;
		background-color: #FFFFFF;
		padding-bottom: calc(var(--window-bottom) + 30rpx);
		border-radius: 20rpx 20rpx 0 0;
		position: relative;
		.gcon{
			display:flex;
			align-items:center;
			padding: 20rpx;
			border-bottom: 1rpx solid #eee;
			image{
				flex-shrink: 0;
				width: 150rpx;
				height: 150rpx;
				border-radius: 6rpx;
				border: 1rpx solid #eee;
				margin-right: 20rpx;
			}
			.tit-box{
				flex: 1;
				display: flex;
				flex-direction: column;
			}
			.price{
				line-height: 1;
				color: #89965f;
				.txt{
					font-size: 30rpx;
				}
				.tint{
					font-size: 42rpx;
					font-weight: 600;
				}
			}
			.tit{
				font-size: 36rpx;
				color: rgba(0, 0, 0, 0.9);
				line-height: 1.3;
			}
			.tit2{
				font-size: 24rpx;
				color: #909399;
				margin-top: 10rpx;
			}
		}
		.selcon{
			position: relative;
			padding: 20rpx 0;
			.spcitem{
				padding: 0 20rpx 0 20rpx;
				display: flex;
				flex-direction: column;
				.spcname{
					line-height: 70rpx;
					color: #000;
					font-size: 28rpx;
				}
				.spcul{
					display: flex;
					flex-direction: row;
					flex-flow: wrap;
					.spcli{
						height: 60rpx;
						line-height: 60rpx;
						padding: 0 20rpx;
						border: 1rpx solid #eee;
						font-size: 26rpx;
						color: #000;
						background: #FFF;
						margin-right: 20rpx;
						border-radius: 6rpx;
						margin-bottom: 20rpx;
					}
					.spcli.cur{
						background: #f3f4ee;
						border: 1rpx solid #89965f;
						font-weight: 600;
					}
					.spclilong{
						height: 66rpx;
						line-height: 66rpx;
						padding: 0 20rpx;
						border: 1rpx solid #eee;
						font-size: 26rox;
						color: #000;
						background: #FFF;
						margin-right: 20rpx;
						border-radius: 6rpx;
						margin-bottom: 30rpx;
						display: flex;
						flex:1;
						justify-content: space-between;
					}
					.spclilong.cur{
						background: #f3f4ee;
						border: 1rpx solid #89965f;
						font-weight: 600;
					}
				}
			}
		}
		.numcon{
			padding: 10rpx 20rpx 40rpx 20rpx;
			display: flex;
			justify-content: space-between;
			.ntip{
				font-size: 28rpx;
				color: #000;
			}
			.nadc{
				margin-right: 20rpx;
			}
		}
		.sbtn{
			margin: 20rpx 30rpx 54rpx;
			font-size: 30rpx;
			font-family: PingFang SC-Medium, PingFang SC;
			font-weight: 500;
			color: #FCFCFD;
			width: 690rpx;
			height: 76rpx;
			line-height: 76rpx;
			background: #89965f;
			box-shadow: 0rpx 12rpx 64rpx 2rpx rgba(137,150,95,0.4);
			margin: 0 30rpx 30rpx;
			border-radius: 10rpx;
			opacity: 1;
			&::after{
				border:none;
			}
		}
		.sbtn1{
			margin: 20rpx 30rpx 54rpx;
			font-size: 30rpx;
			font-family: PingFang SC-Medium, PingFang SC;
			font-weight: 500;
			color: #FCFCFD;
			width: 690rpx;
			height: 76rpx;
			line-height: 76rpx;
			background: #55690e;
			box-shadow: 0rpx 12rpx 64rpx 2rpx rgba(137,150,95,0.4);
			margin: 0 30rpx 30rpx;
			border-radius: 10rpx;
			opacity: 1;
			&::after{
				border:none;
			}
		}
	}
</style>
 