<template>
	<view class="container order clearfix">
		<!-- 透明模态层 -->
		<modal-layer v-if='modallayer'></modal-layer>
		<!-- 地址选择 -->
		<choice-address ref="choiceAddress" v-if="isAddress" :addressData="addressData"></choice-address>
		<!-- 商品 -->
		<goods-list ref='goods' v-if="isRequest" :goodsData="goodsData" @handleGoodList="handChangeInputGoodsList"></goods-list>
		<!-- 发票信息 -->
		<seller-invoice ref="invoice" 
						v-if="isRequest" 
						:invoiceDatas="invoiceData" 
						@handleChoiceaInvoice="handleChoiceaInvoiceData">
		</seller-invoice>
		<!-- 运费 -->
		<seller-freight ref="freight" 
						v-if="isFreight" 
						:freightDatas="freightData" 
						@handleChoiceaFreight="handleChoiceaFreightData" 
						@showFreightAlert="handFreightAlertShow">
		</seller-freight>
		<freight-alert v-if="isfreightTip" ref="csPhone"></freight-alert>
		<!-- 余额抵扣 -->
		<view class="invoice-balance">
			<view class="balabce-t">
				<view class="balabce-t-le">余额抵扣</view>
				<view class="balabce-t-ri">
					<view class="money">
						<text>可用余额：</text>
						<text>￥{{userMoney.toFixed(2)}}</text>
					</view>
					<view class="checkbox-box">
						<button class="checkbox iconfont" 
								hover-class="btn-hover"
								v-if="userMoney!=0"
								@click.stop="checkedBalabce"
								:class="[ischecked ?'icon-gouxuanl':'icon-weigouxuan']"
						>
						</button>
					</view>
				</view>
			</view>
			<view class="balabce-b" :class="{'balabce-b--hide':!ischecked}">	
				<view class="balabce-b-text animation" :style="{'transform':ischecked?'translateY(0)':'translateY(-50%)','-webkit-transform':ischecked?'translateY(0)':'translateY(-50%)'}">
					<text>当前使用：￥{{deductMoney.toFixed(2)}}，剩余：￥{{surplusMoney.toFixed(2)}}</text>
				</view>
			</view>
		</view>
		<!-- 底部 -->
		<view class="footer" :style="{paddingBottom :isIphoneX ? '68rpx' : '0rpx'}">
			<view class="footer-le">
				<view class="footer-count">
					<text>共{{allCount}}件商品</text>
				</view>
				<view class="footer-price">
					<text>总价:<text class="price">￥{{payAllPrice.toFixed(2)}}</text></text>
				</view>
			</view>
			<view class="footer-submit" @click.stop="orderSubmitMit">提交订单</view>
		</view>
	</view>
</template>

<script>
	import choiceAddress from '@/components/module/creatOrder/sellerAddress'  
	import goodsList from '@/components/module/creatOrder/goodsList'
	import sellerInvoice from '@/components/module/creatOrder/sellerInvoice'
	import sellerFreight from '@/components/module/creatOrder/sellerFreight'
	import freightAlert from '@/components/module/modelAlert/freightAlert.vue'
	import modalLayer from "@/components/modal-layer"
	import { queryAddressList } from "@/api/cart.js" 
	import { getOrderPostage,getFindInvoice,updateInvoice } from "@/api/order.js" 
	import { sellerSettlement,sellerCreateOrderSubmit } from "@/api/seller.js" 
	export default {
		components:{
			choiceAddress,
			goodsList,
			sellerInvoice,
			sellerFreight,
			freightAlert,
			modalLayer
		},
		data() {
			return {
				modallayer:false,
				orderID:0,
				clubID:'',
				productIds:'',			  //获取上一级页面商品信息
				productCount:'',		  //获取上一级页面商品数量
				classifyIDS:'',			  //获取上一级页面商品分类
				serviceProviderId:'',	  //协销ID
				cartType:3,			  	  //购买类型（1购物车提交，2直接购买提交,3协销下单）
				submitState:'',  		  //提交状态
				balanceDeductionFlag:2,   //勾选余额的状态(1使用，2不使用)
				allCount:1,				  //订单提交总数量
				payAllPrice:0.00,		  //订单提交总金额
				allPrice:0.00,			  //订单总金额
				surplusMoney:0.00,		  //显示勾选后的剩余抵扣
				userMoney:0.00,			  //显示可使用余额
				deductMoney:0.00,		  //显示已使用的余额
				addressID:'',			  //地址ID
				townID:'',				  //区ID
				isRequest:false,		  //是否加载完成渲染子组件
				isFreight:false,		  //是否加载完成渲染子组件
				isAddress:false,		  //是否加载完成地址
				isfreightTip:false,		  //控制邮费弹窗
				ischecked:false,	      //是否勾选余额
				addressData:{},			  //初始化地址信息
				goodsData:[],			  //初始化商品信息
				invoiceData:{},			  //初始化发票信息
				freightData:{},			  //邮费数据
				orderInfo:[],			  //提交的商品信息
				payInfo:{},				  //订单信息
				isIphoneX:this.$store.state.isIphoneX
			}
		},
		onLoad(option){//商品数据
			let data = JSON.parse(option.data);
			this.allPrice = data.data.allPrice;
			this.allCount = data.data.allCount;
			this.payAllPrice = this.allPrice;
			this.clubId = data.data.clubId
			this.productCount = data.data.productCount
			this.productIds = data.data.productID
			this.getInitCrearOrder();
			this.$api.getComStorage('orderUserInfo').then((resolve) =>{
				this.clubUserId = resolve.userID
			})
		},
		methods: {
			getInitCrearOrder(option){//获取订单商品信息
				this.$api.getStorage().then((resolve) =>{
					this.serviceProviderId = resolve.serviceProviderID
					let params ={clubId:this.clubId,serviceProviderId:this.serviceProviderId,count:this.productCount,productIds:this.productIds}
					sellerSettlement(params).then(response =>{
						let resData = response.data
						this.isRequest = true
						this.goodsData = resData.shopList
						this.userMoney = resData.userMoney
						this.getUseFindInvoice()
					}).catch(response =>{
						this.$util.msg(response.msg,2000)
					})
				})
			},
			getFreightData(){//获取邮费信息
				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
					let params ={
							userId:resolve.userID,
							productIds:this.productIds,
							totalPrice:this.allPrice,
							townId:this.addressData.townID
						}
					getOrderPostage(params).then(response =>{
						this.isFreight = true
						this.freightData = response.data
						if(response.data.freePostFlag== 1){
							this.payAllPrice = this.allPrice+response.data.freight
						}else{
							this.payAllPrice = this.allPrice
						}
					})	
				})
			},
			getUseFindInvoice(){//获取发票信息
				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
					getFindInvoice({userID:resolve.userID}).then(response =>{
						if(response.data == null){
							this.invoiceData = Object.assign(this.invoiceData,'',{type:0})
						}else{
							this.invoiceData = response.data
						} 
					})
				})
			},
			getAddressData(){//获取地址信息
				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
					queryAddressList({pageNum:1,pageSize:1,userID:resolve.userID}).then(response =>{
						this.isAddress = true
						this.addressData = {}
						if(response.data.results != ''){
							this.addressID = response.data.results[0].addressID;
							this.townID = response.data.results[0].townID;
							this.addressData = response.data.results[0];
							this.getFreightData()
						}else{
							this.addressData = this.addressData;
						}
					})
				})
			},
			handChangeInputGoodsList(data){//对应供应商的留言信息
				this.goodsData = data;
			},
			handleChoiceaInvoiceData(data){//获取发票信息
				this.invoiceData = data
				this.$api.getComStorage('orderUserInfo').then((resolve) =>{
					let params =Object.assign(data,'',{userID:resolve.userID})
					updateInvoice(params).then(response =>{
					})
				})
			},
			handleChoiceaFreightData(data){//获取运费信息
				console.log(data)
				if(data.freePostFlag == '1'){
					this.freightData = data
					this.payAllPrice = this.allPrice+parseInt(data.freight)
					if(this.balanceDeductionFlag ==1){
						this.attributeHashfreight(this.freightData.freight)
					}
				}else{
					this.freightData = data
				}
			},
			checkedBalabce(){//勾选使用余额
				if(this.userMoney > 0){
					this.ischecked = !this.ischecked
					if(this.ischecked){
						this.balanceDeductionFlag =1
						this.attributePallPrice()
					}else{
						if(this.freightData.freePostFlag == 1 || this.freightData.freePostFlag == '1'){
							this.payAllPrice = this.allPrice+parseInt(this.freightData.freight)
						}else{
							this.payAllPrice = this.allPrice
						}
						this.balanceDeductionFlag = 2
					}
				}else{
					return
				}
			},	
			attributePallPrice(){//计算价格
				if(this.freightData.freePostFlag == 1 || this.freightData.freePostFlag == '1'){
					this.attributeHashfreight(this.freightData.freight)
				}else{
					this.attributeNofreight()
				}
			},
			attributeNofreight(){//计算没有邮费的支付价格
				if(this.userMoney>this.payAllPrice){
					this.payAllPrice = 0.00
					this.deductMoney = this.allPrice							//勾选后使用抵余额
					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
				}else{
					this.payAllPrice = this.allPrice - this.userMoney       	//勾选后的总价
					this.deductMoney = this.userMoney				            //勾选后使用抵余额
					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
				}
			},
			attributeHashfreight(freight){//计算需要邮费的支付价格
				this.payAllPrice = this.allPrice+parseInt(freight)//计算不包邮的价格 总价等于商品价格+邮费
				if(this.userMoney>this.payAllPrice){							//余额大于支付金额
					this.payAllPrice =0.00
					this.deductMoney = this.allPrice+parseInt(freight)			//勾选后使用抵余额
					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
				}else{
					this.payAllPrice = this.allPrice+parseInt(freight) - this.userMoney       	//勾选后的总价
					this.deductMoney = this.userMoney				            //勾选后使用抵余额
					this.surplusMoney = this.userMoney - this.deductMoney	    //勾选后的剩余抵扣
				}
			},
			orderSubmitMit(){//提交订单
				if(this.addressID == ''){
					this.$util.msg('请先添加收货地址～',2000)
					return
				}
				// 处理商品信息及留言
				this.orderInfo = this.goodsData.map(el => {
					let productInfo = [];
					el.productsList.forEach(item => {
						productInfo.push({
							productId:item.productID,
							productNum:item.productCount,
							presentNum:0
						})
					})				
					return {shopId:el.shopID,note:el.note?el.note:'',productInfo:productInfo}
				})
				//订单信息
				this.payInfo = {
						clauseId:0,//条款（暂时保留）
						orderShouldPayFee:this.payAllPrice.toFixed(2),//提交的总价
						balancePayFlag:this.balanceDeductionFlag,//余额抵扣的状态
						freight:this.freightData.freight>0 ? this.freightData.freight : this.freightData.freight.toFixed(2),//邮费
						freePostFlag:parseInt(this.freightData.freePostFlag)//运费形式
					}
				let params = {
						orderSource:2,				  //提交来源
						clubUserId:this.clubUserId,   //机构UserID
						cartType:this.cartType,		  //从购物车提交
						serviceProviderId:this.serviceProviderId,//帮下单协销ID
						addressId:this.addressID,	  //地址ID
						orderInfo:this.orderInfo,	  //商品信息
						payInfo:this.payInfo,		  //订单信息
						orderInvoice:this.invoiceData //发票信息
					}
				this.modalLayer = true;	
				sellerCreateOrderSubmit({'params':JSON.stringify(params)}).then(response =>{
					if(response.code == 1){
						this.$util.msg('支付成功',2000,true,'success')
						setTimeout(() =>{
							this.$api.redirectTo(`/market/pages/order/order-details?type=cash&orderID=${response.data.orderID}`)
						},2000)
					}else if(response.code == 2){
						this.$api.redirectTo(`/market/pages/order/order-details?type=cash&orderID=${response.data.orderID}`)
					}else{
						this.$util.msg(response.msg,2000);
					}
				}).catch(response =>{})
			},
			handFreightAlertShow(){//显示邮费弹窗
				this.isfreightTip = true;
			},
			hideFreight(){//关闭邮费弹窗
				this.isfreightTip = false;
			}
		},
		onShow() {
			// this.addressID = ''		
			let pages = getCurrentPages();
			let currPage = pages[pages.length-1];
			if(currPage.data.select =='select'){
				this.isAddress = true
				let SelectData = uni.getStorageSync('selectAddress');
				this.addressID = SelectData.addressID;
				this.addressData = SelectData	
				this.getFreightData()
			}else{
				this.getAddressData()
			}
		}
	}
</script>

<style lang="scss">
	page {
		height: auto;
		background:#F7F7F7;
	}
	.btn-hover{
		background: #FFFFFF;
	}
	.animation{
		/* transition: transform 0.3s ease;*/
		transition-property: transform;
		transition-duration: 0.3s;
		transition-timing-function: ease;
	}
	.order{
		padding-bottom: 134rpx;
	}
	.invoice-freight{
		width: 702rpx;
		padding: 0 24rpx;
		height: 86rpx;
		line-height: 86rpx;
		font-size: $font-size-28;
		color: $text-color;
		background: #FFFFFF;
		float: left;
		font-weight: bold;
		.freight-left{
			float: left;
			.icon-yunfeishuoming{
				height: 100%;
				padding: 0 15rpx;
				color: $color-system;
				font-weight: normal;
			}
		}
		.freight-right{
			float: right;
			color: #2A81FF;
		}
	}
	.invoice-balance{
		width: 702rpx;
		height: auto;
		padding:0 24rpx;
		background: #FFFFFF;
		float: left;
		margin-top: 24rpx;
		margin-bottom: 24rpx;
		.balabce-t{
			width: 100%;
			height: 86rpx;
			line-height: 86rpx;
			font-size: $font-size-28;
			color: $text-color;
			float: left;
			.balabce-t-le{
				float: left;
				font-weight: bold;
			}
			.balabce-t-ri{
				float: right;
				display: flex;
				align-items: center;
				.money{
					display: flex;
					float: left;
				}
				.checkbox-box{
					display: flex;
					width: 60rpx;
					float: left;
					height: 100%;
					font-size: $font-size-24;
					.checkbox{
						width: 40rpx;
						text-align: right;
						box-sizing: border-box;
						text-align: center;
						text-decoration: none;
						border-radius: 0;
						-webkit-tap-highlight-color: transparent;
						overflow: hidden;
						color: $color-system;
					}
				}	
			}
		}
		.balabce-b{
			width: 100%;	
			float: left;
			overflow: hidden;
			.balabce-b-text{
				width: 100%;
				line-height: 58rpx;
				font-size: $font-size-24;
				color: #FF2A2A;
				text-align: right;
				float: right;
			}
			&.balabce-b--hide {
				padding: 0 0;
				height: 0px;
				line-height: 0px;
			}	
		}
	}
	.footer{
		position: fixed;
		left: 0;
		bottom: 0;
		z-index: 995;
		display: flex;
		align-items: center;
		width: 100%;
		height: 110rpx;
		line-height: 110rpx;
		justify-content: space-between;
		font-size: $font-size-28;
		background-color: #FFFFFF;
		z-index: 998;
		color: $text-color;
		.footer-le{
			width:550rpx;
			height:100%;
			float: left;
		}
		.footer-count{
			float: left;
			padding-left: 24rpx;
			font-weight: bold;
		}
		.footer-price{
			float: right;
			text-align: right;
			color: $text-color;
			font-weight: bold;
			padding-right: 24rpx;
			.price{
				font-size: $font-size-32;
				color: #FF2A2A;
			}
		}
		.footer-submit{
			display:flex;
			align-items:center;
			justify-content: center;
			width: 200rpx;
			height: 100%;
			color: #FFFFFF;
			background:linear-gradient(135deg,rgba(242,143,49,1) 0%,rgba(225,86,22,1) 100%);
		}
	}
	
</style>
