<template>
	<view class="container order clearfix" :style="{ paddingBottom: isIphoneX ? '170rpx' : '134rpx' }">
		<!-- 地址选择 -->
		<choice-address ref="choiceAddress" v-if="isAddress" :addressData="addressData"></choice-address>
		<!-- 商品 -->
		<goods-list
			ref="goods"
			v-if="isRequest"
			:goodsData="goodsData"
			@handleGoodList="handChangeInputGoodsList"
		></goods-list>
		<!-- 发票信息 -->
		<invoice-tent
			ref="invoice"
			v-if="isRequest"
			:invoiceDatas="invoiceData"
			@handleChoiceaInvoice="handleChoiceaInvoiceData"
		>
		</invoice-tent>
		<!-- 运费 -->
		<freight
			ref="freight"
			v-if="isFreight"
			:freightData="freightData"
			@confirmFreight="hanldFreightFn"
		>
		</freight>
		<freight-alert v-if="isfreightTip" ref="csPhone"></freight-alert>
		<!-- 底部 -->
		<view class="footer-wrapper" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
			<view class="footer">
				<view class="footer-le">
					<view class="footer-count">
						<text>共{{ totalCount }}件商品</text>
					</view>
					<view class="footer-price">
						<view class="sum none">
							总价:<text class="price">￥{{ orderShouldPayFee | NumFormat }}</text>
						</view>
					</view>
				</view>
				<view class="footer-submit" @click.stop="orderSubmitMit">
					<view class="btn" :class="isSubLoading ? 'disabled' : ''">提交订单</view>
				</view>
			</view>
		</view>
		<!-- 提示弹窗 -->
		<tui-modal
			:show="showModal"
			@click="handleClick"
			@cancel="hideMobel"
			:content="contentModalText"
			:button="modalButton"
			color="#333"
			:size="28"
			shape="circle"
			:maskClosable="false"
		></tui-modal>
	</view>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
import choiceAddress from './components/choiceAddress'
import goodsList from './components/goodsList'
import invoiceTent from './components/invoiceTent'
import freight from './components/freight'
import freightAlert from '@/components/cm-module/modelAlert/freightAlert'
export default {
	components: {
		choiceAddress,
		goodsList,
		invoiceTent,
		freight,
		freightAlert
	},
	data() {
		return {
			isIphoneX: this.$store.state.isIphoneX,
			isSubLoading: false,
			confirmType: 1,
			orderID: 0,
			cartParam: {
				// 购物车立即结算确认订单参数
				skuIds: 0, // 商品Id(逗号隔开)
				source: 2, // 来源：1WWW 2小程序
				userId: 0 // 用户Id
			},
			productParam: {
				// 商品立即购买确认订单参数
				productCount: 0, // 商品数量
				productId: 0, // 商品Id
				source: 2, // 来源：1WWW 2小程序
				userId: 0 // 用户Id
			},
			supportParm: {
				// 组合商品立即购买确认订单参数
				productInfo: '',
				source: 2, // 来源：1WWW 2小程序
				userId: 0 // 用户Id
			},
			postageParam: {
				// 邮费计算参数
				skuIds: 0, // 商品Id(逗号隔开)
				userId: 0, // 用户Id
				townId: 0 // 地区Id
			},
			confirmParam: {
				cartType: 1, // 购买类型:（1自主下单, 3协销下单）
				orderMiniType: 0, // 订单提交状态 0初始提交 1 继续提交
				orderSource: 6, // 订单来源 1WWW 6小程序[采美,星范]
				addressId: 0, // 收货地址Id
				clubCouponId: 0, // 关联优惠券Id
				clubId: 0, // 机构Id
				orderInfo: [], // 订单商品数据
				orderInvoice: { type: 0 }, // 订单发票信息
				payInfo: {
					// 订单金额数据
					orderShouldPayFee: 0, // 订单最终支付金额
					balancePayFlag: 0, // 勾选余额的状态(1使用，0不使用)
					clauseId: 0, // 条款Id
					postage: 0, // 运费金额
					postageFlag: 0, // 运费类型
					userBeans: 0, // 抵扣采美豆数量
					rebateFlag: 0 // 是否返佣订单
				},
				unionId: uni.getStorageSync('unionId') // 用户unionId
			}, // 提交订单参数
			productIds: '', // 获取上一级页面商品信息
			submitState: '', // 提交状态
			totalCount: 1, // 订单提交总数量
			allPrice: 0.0, // 订单总金额
			orderShouldPayFee: 0, // 订单最终支付金额
			isRequest: false, // 是否加载完成渲染子组件
			isFreight: false, // 是否加载完成渲染子组件
			isAddress: false, // 是否加载完成地址
			isExchangePopup: false, // 控制兑换优惠券弹窗
			isfreightTip: false, // 控制邮费弹窗
			hanldFreePostFlag: '', // 邮费状态
			hanldFreight: '', // 邮费
			addressData: {}, // 初始化地址信息
			goodsData: [], // 初始化商品信息
			couponList: [], // 初始化优惠券信息
			invoiceData: { type: 0 }, // 初始化发票信息
			freightData: {}, // 邮费数据
			orderInfo: [], // 提交的商品信息
			freightBeansMoney: 0, // 存储采美豆抵扣金额
			contentModalText: '采购金额过小，将扣除500采美豆，建议您前往采美旗下“颜选美学”小程序购买小额商品。', //操作文字提示语句
			modalButton: [
				{
					text: '前往颜选美学',
					type: 'gray',
					plain: true //是否空心
				},
				{
					text: '继续提交',
					customStyle: {
						color: '#fff',
						bgColor: 'linear-gradient(90deg, #F28F31 0%, #F3B574 100%)'
					},
					plain: false
				}
			],
			showModal: false,
			showModalstauts: 0,
		}
	},
	onLoad(option) {
		//商品数据
		this.initStorage(option)
	},
	filters: {
		NumFormat(value) {
			//处理金额
			return Number(value).toFixed(2)
		}
	},
	methods: {
		async initStorage(option) {
			const data = JSON.parse(option.data)
			const userInfo = await this.$api.getStorage()
			console.log('data', data)
			this.productParam.userId = this.cartParam.userId = this.supportParm.userId = this.postageParam.userId = userInfo.userId
				? userInfo.userId
				: 0
			this.confirmParam.clubId = userInfo.clubId ? userInfo.clubId : 0
			switch (option.type) {
				case '1': // 商品详情立即购买
					this.confirmParam.cartType = 2
					this.productParam.productCount = data.data.productCount
					this.productParam.productId = data.data.productIds
					this.productParam.skuId = data.data.skuId
					this.productIds = data.data.productIds
					this.GetProductCreateOrderInfo()
					break
				case '2': // 购物车结算
					this.confirmParam.cartType = 1
					this.confirmType = 2
					this.cartParam.skuIds = data.data.skuIds
					this.CartCreateOrderInfo()
					break
				case '3': // 组合商品立即购买
					this.confirmParam.cartType = 2
					this.confirmType = 2
					this.supportParm.productInfo = JSON.stringify(data.data)
					this.GetOrderClubProductSupporting()
			}
		},
		// 商品立即购买确认订单数据初始化
		async GetProductCreateOrderInfo() {
			try{
				const res = await this.OrderService.ProductCreateOrderInfo(this.productParam)
				this.setCreatDataInfo(res.data)
			}catch(error){
				console.log('商品立即购买订单初始化异常')
			}
		},
		// 组合商品立即购买确认订单数据初始化
		async GetOrderClubProductSupporting() {
			try{
				const res = await this.OrderService.OrderClubProductSupporting(this.supportParm)
				this.setCreatDataInfo(res.data)
			}catch(error){
				console.log('组合商品立即购买订单初始化异常')
			}
		},
		// 购物车去结算确认订单数据初始化
		async CartCreateOrderInfo() {
			try{
				const res = await this.OrderService.CartCreateOrderInfo(this.cartParam)
				this.setCreatDataInfo(res.data)
			}catch(error){
				console.log('购物车结算订单初始化异常')
			}
		},
		// 公共初始化数据
		setCreatDataInfo(data) {
			this.isRequest = true
			this.goodsData = data.list
			this.couponList = data.couponList
			this.userMoney = data.userMoney
			this.totalCount = data.totalCount
			this.allPrice = data.totalPrice
			this.orderShouldPayFee = this.allPrice
			this.postageParam.skuIds = this.getProductIds(data.list)
			this.getAddressData()
		},
		// 获取订单SKUId列表
		getProductIds(list) {
			const skuId = []
			list.forEach(function(supplier) {
				supplier.cartList.forEach(function(product) {
					skuId.push(product.skuId)
				})
			})
			// console.log(list);
			return skuId.join(',')
		},
		// 获取邮费信息
		async getFreightData() {
			try{
				this.isFreight = false
				const res = await this.OrderService.GetOrderPostage(this.postageParam)
				const data = res.data
				this.isFreight = true
				this.freightData = data
				this.hanldFreePostFlag = data.postageFlag
				this.hanldFreight = data.postage
				if (this.hanldFreePostFlag == 1) {
					if (this.freightData.userBeans > 0) {
						this.freightBeansMoney = this.hanldFreight
					} else {
						this.freightBeansMoney = 0
					}
					this.orderShouldPayFee = this.allPrice + data.postage
					this.attributePallPrice()
				} else {
					if (this.freightData.userBeans > 0) {
						this.freightBeansMoney = 30
					} else {
						this.freightBeansMoney = 0
					}
					this.orderShouldPayFee = this.allPrice
					this.attributePallPrice()
				}
			}catch(error){
				console.log('获取订单运费异常')
			}
		},
		//获取地址信息
		async getAddressData() {
			try{
				const userInfo = await this.$api.getStorage()
				const res = await this.UserService.QueryAddressList({ pageNum: 1,pageSize: 1,userId: this.postageParam.userId })
				const data = res.data
				this.isAddress = true
				this.addressData = {}
				if (data.list && data.list.length > 0) {
					this.confirmParam.addressId = data.list[0].addressId
					this.postageParam.townId = data.list[0].townId
					this.addressData = data.list[0]
					this.getFreightData()
				} else {
					this.addressData = this.addressData
				}
			}catch(error){
				console.log('error',error)
			}
		},
		//对应供应商的留言信息
		handChangeInputGoodsList(data) {
			this.goodsData = data
		},
		//获取发票信息
		handleChoiceaInvoiceData(data) {
			this.confirmParam.orderInvoice = data
		},
		//显示邮费弹窗
		hanldFreightFn(data) {
			console.log('邮费信息', data)
			switch (data.postageFlag) {
				case 1:
					this.hanldFreight = this.freightData.postage
					this.hanldFreePostFlag = data.postageFlag
					this.freightBeansMoney = data.freightBeansMoney
					this.orderShouldPayFee = this.allPrice + this.hanldFreight
					this.attributePallPrice()
					break
				case -1:
					this.hanldFreight = 0
					this.hanldFreePostFlag = data.postageFlag
					this.freightBeansMoney = data.freightBeansMoney
					this.orderShouldPayFee = this.allPrice
					this.attributePallPrice()
					break
			}
		},
		// 计算价格
		attributePallPrice() {
			if (this.hanldFreePostFlag == 1 || this.hanldFreePostFlag == '1') {
				this.attributeHashfreight(this.freightData.postage)
			} else {
				this.attributeNofreight()
			}
		},
		// 计算没有邮费的支付价格
		attributeNofreight() {
			this.orderShouldPayFee = this.allPrice
			console.log('最终订单支付金额', this.orderShouldPayFee)
		},
		// 计算需要邮费的支付价格
		attributeHashfreight(postage) {
			this.orderShouldPayFee = this.allPrice + parseInt(postage) //计算不包邮的价格 总价等于商品价格+邮费
			console.log('最终订单支付金额', this.orderShouldPayFee)
		},
		// 提交订单按钮点击事件
		orderSubmitMit() {
			this.handleClickOrderSubmitMit()
		},
		// 提交订单
		handleClickOrderSubmitMit() {
			if (this.isSubLoading) { return }
			if (this.confirmParam.addressId == '') {
				this.$util.msg('请先添加收货地址～', 2000)
				return
			}
			this.confirmParam.orderInfo = this.goodsData.map(el => {
				let productInfo = []
				el.cartList.forEach(pros => {
					productInfo.push({
						skuId: pros.skuId,
						productNum: pros.number,
						presentNum: 0,
						productType: pros.giftType
					})
				})
				return {
					splitCode: el.splitCode,
					shopId: el.shopId,
					note: el.note ? el.note : '',
					productInfo: productInfo
				}
			})
			this.confirmParam.payInfo.postage = parseInt(this.hanldFreight).toFixed(2)
			this.confirmParam.payInfo.postageFlag = parseInt(this.hanldFreePostFlag)
			this.confirmParam.payInfo.orderShouldPayFee = this.orderShouldPayFee.toFixed(2)
			this.confirmParam.payInfo = JSON.stringify(this.confirmParam.payInfo)
			this.confirmParam.orderInfo = JSON.stringify(this.confirmParam.orderInfo)
			this.confirmParam.orderInvoice = JSON.stringify(this.confirmParam.orderInvoice)
			console.log(this.confirmParam)
			this.isSubLoading = true
			this.hanldeOrderSubmit(this.confirmParam)
		},
		async hanldeOrderSubmit(params) {
			// 提交订单
			try{
				const res =await this.OrderService.CreatedOrderSubmit(params)
				const data = res.data
				if (data.code === 1) {
					this.submitState = 'success'
					setTimeout(() => {
						this.isSubLoading = false
					}, 2000)
					this.$api.redirectTo(
						`/pages/user/order/success?data=${JSON.stringify({ data: { orderId: data.orderId } })}`
					)
				} else {
					this.submitState = 'confirm'
					this.$util.msg('订单提交成功', 2000, true, 'success')
					setTimeout(() => {
						this.isSubLoading = false
						if (data.onlinePayFlag === 1) {
							this.$api.redirectTo(`/pages/user/pay/card-under?orderId=${data.orderId}`)
						} else {
							this.$api.redirectTo(`/pages/user/order/order-pay-list?orderId=${data.orderId}`)
						}
					}, 2000)
				}
			}catch(error){
				console.log(error)
				this.formatConfirmParam()
				this.isSubLoading = false
			}
		},
		formatConfirmParam(){// 还原提交订单参数格式
			this.confirmParam.payInfo = JSON.parse(this.confirmParam.payInfo)
			this.confirmParam.orderInfo = JSON.parse(this.confirmParam.orderInfo)
			this.confirmParam.orderInvoice = JSON.parse(this.confirmParam.orderInvoice)
		},
		handFreightAlertShow() {
			//显示邮费弹窗
			this.isfreightTip = true
		},
		handleClick(e) {
			// 采购量过小提示弹窗
			if (e.index === 1) {
				if (this.showModalstauts === 1) {
					this.showModal = false
					this.confirmParam.orderMiniType = 1
					this.handleClickOrderSubmitMit()
				} else if (this.showModalstauts === 2) {
					this.showModal = false
					this.isSubLoading = false
					this.$api.navigateTo('/pages/login/apply')
				} else {
					this.showModal = false
					this.handleClickHeHeMiniApplet()
				}
			} else {
				if (this.showModalstauts == 1) {
					this.showModal = false
					this.handleClickHeHeMiniApplet()
				} else if (this.showModalstauts === 2) {
					this.showModal = false
					this.confirmParam.orderMiniType = 2
					this.handleClickOrderSubmitMit()
				} else {
					this.showModal = false
				}
			}
		},
		handleClickHeHeMiniApplet() {
			// 跳转颜选美学小程序
			uni.navigateToMiniProgram({
				appId: 'wx2c3b0a7f343235b1',
				path: '/pages/tabBar/index/index',
				extraData: {
					data1: 'test'
				},
				envVersion: 'develop',
				success(res) {
					// 打开成功
					console.log(res)
				}
			})
		},
		hideFreight() {
			//关闭邮费弹窗
			this.isfreightTip = false
		}
	},
	onShow() {
		let pages = getCurrentPages()
		let currPage = pages[pages.length - 1]
		if (currPage.data.select == 'select') {
			this.isAddress = true
			let SelectData = uni.getStorageSync('selectAddress')
			this.confirmParam.addressId = SelectData.addressId
			this.postageParam.townId = SelectData.townId
			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: auto;
	font-size: $font-size-28;
	color: $text-color;
	background: #ffffff;
	float: left;
	font-weight: bold;
}
.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-wrapper {
	position: fixed;
	left: 0;
	bottom: 0;
	background-color: #ffffff;
	z-index: 990;
	.footer {
		display: flex;
		align-items: center;
		width: 100%;
		height: 110rpx;
		line-height: 110rpx;
		justify-content: space-between;
		font-size: $font-size-28;
		color: $text-color;
	}
	.footer-le {
		width: 570rpx;
		height: 100%;
		float: left;
	}
	.footer-count {
		float: left;
		padding-left: 24rpx;
		width: 180rpx;
		box-sizing: border-box;
	}
	.footer-price {
		width: 370rpx;
		float: right;
		text-align: right;
		color: $text-color;
		padding: 10rpx 20rpx 10rpx 0;
		box-sizing: border-box;
		.sum-none {
			width: 100%;
			height: 45rpx;
			line-height: 45rpx;
			color: $text-color;
			float: left;
			text-align: right;
			.money {
				font-size: $font-size-26;
				color: #999999;
				text-decoration: line-through;
			}
			.money-sign {
				font-size: $font-size-26;
				color: #999999;
				text-decoration: line-through;
			}
			.money-reduced {
				margin-left: 10rpx;
				font-size: $font-size-26;
				color: #ff2a2a;
			}
		}
		.sum {
			width: 100%;
			height: 45rpx;
			line-height: 45rpx;
			float: left;
			&.none {
				height: 90rpx;
				line-height: 90rpx;
			}
			.price {
				font-size: $font-size-32;
				color: #ff2a2a;
			}
		}
	}
	.footer-submit {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 180rpx;
		height: 100%;
		box-sizing: border-box;
		padding: 15rpx 5rpx;
		.btn {
			width: 100%;
			height: 100%;
			color: #ffffff;
			background: $btn-confirm;
			font-size: $font-size-26;
			text-align: center;
			line-height: 80rpx;
			border-radius: 40rpx;
			&.disabled {
				background: #e4e8eb;
				color: #999999;
			}
		}
	}
}
.coupon-content-model {
	width: 100%;
	height: 100%;
	background: rgba(0, 0, 0, 0.5);
	position: fixed;
	top: 0;
	left: 0;
	z-index: 8888;
	transition: all 0.4s;
	.coupon-alert-content {
		width: 600rpx;
		height: 612rpx;
		position: absolute;
		top: 0;
		left: 0;
		bottom: 0;
		right: 0;
		margin: auto;
		box-sizing: border-box;
		padding-top: 92rpx;
		.coupon {
			width: 600rpx;
			height: 522rpx;
			background: url(https://static.caimei365.com/app/img/icon/icon-coupon-alertbg@2x.png);
			background-size: cover;
			box-sizing: border-box;
			padding: 230rpx 40rpx 0 40rpx;
			.coupon-list {
				width: 100%;
				height: 147rpx;
				margin-bottom: 32rpx;
				box-sizing: border-box;
				background: url(https://static.caimei365.com/app/img/icon/icon-coupon-bg@2x.png);
				background-size: cover;
				position: relative;
				.list-cell-tags {
					display: inline-block;
					padding: 0 10rpx;
					height: 32rpx;
					line-height: 32rpx;
					background-color: #f94b4b;
					color: #ffffff;
					font-size: 18rpx;
					border-radius: 16rpx 0 16rpx 0;
					text-align: center;
					position: absolute;
					top: 0;
					left: 0;
				}
				.list-cell-le {
					width: 154rpx;
					height: 100%;
					box-sizing: border-box;
					padding: 30rpx 0;
					float: left;
					.coupon-maxMoney {
						width: 100%;
						height: 54rpx;
						line-height: 54rpx;
						font-size: 42rpx;
						color: #f94b4b;
						text-align: center;
						margin-top: 10rpx;
						.small {
							font-size: $font-size-20;
						}
					}
					.coupon-minMoney {
						width: 100%;
						height: 28rpx;
						float: left;
						box-sizing: border-box;
						padding-left: 24rpx;
						.txt {
							display: block;
							height: 28rpx;
							line-height: 28rpx;
							font-size: 16rpx;
							color: #f94b4b;
							text-align: center;
							padding: 0 5rpx;
							background-color: #fff1eb;
							border-radius: 4rpx;
							float: left;
						}
					}
				}
				.list-cell-ri {
					width: 366rpx;
					height: 100%;
					box-sizing: border-box;
					padding: 30rpx 20rpx;
					float: left;
					.list-cell-top {
						width: 100%;
						height: 64rpx;
						line-height: 64rpx;
						font-size: $font-size-26;
						color: #333333;
						float: left;
						text-overflow: ellipsis;
						display: -webkit-box;
						word-break: break-all;
						-webkit-box-orient: vertical;
						-webkit-line-clamp: 1;
						overflow: hidden;
					}
					.list-cell-time {
						width: 100%;
						height: 28rpx;
						line-height: 28rpx;
						text-align: left;
						font-size: $font-size-20;
						color: #999999;
					}
				}
			}
			.coupon-btn {
				width: 100%;
				height: 78rpx;
				background: url(https://static.caimei365.com/app/img/icon/icon-coupon-alertbtnbg@2x.png);
				background-size: cover;
				line-height: 78rpx;
				text-align: center;
				color: #ffffff;
				font-size: $font-size-36;
			}
		}
	}
}
</style>
