<template>
	<view class="container product clearfix">
		<view class="superv-header" v-if="!isEmpty">
			<view class="superv-header-click">
				<view class="oltext"
					>共<text class="red">{{ totalRecord }}</text
					>件商品</view
				>
				<view class="ortext" @click="showPopup(0)" v-if="!popupShow">编辑</view>
				<view class="ortext" @click="hidePopup(0)" v-else>完成</view>
			</view>
		</view>
		<view class="product-content" :style="{ paddingBottom: popupShow ? '68rpx' : '0' }">
			<view :class="{ 'tui-order-list': scrollTop >= 0 }" class="clearfix">
				<!-- 空白页 -->
				<view class="empty-container" v-if="isEmpty">
					<image
						class="empty-container-image"
						:src="staticUrl + 'icon_like_empty@2x.png'"
					></image>
					<text class="error-text">暂无收藏商品~</text>
				</view>
				<!-- 列表 -->
				<view class="tui-cart-cell  tui-mtop" v-for="(pros, index) in productList" :key="index">
					<view class="tui-goods-item">
						<view class="tui-goods-main">
							<view class="tui-goods-checkBox" v-if="popupShow">
								<view
									class="checkbox iconfont"
									:class="[pros.isChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
									@click="checkedSoperv(pros)"
								>
								</view>
							</view>
							<view class="tui-goods-image" @click.stop="navToDetailPage(pros.productId)">
								<image :src="pros.image" class="tui-goods-img" />
							</view>
							<view
								class="tui-goods-info"
								:style="{ width: popupShow ? '420rpx' : '528rpx' }"
								@click.stop="navToDetailPage(pros.productId)"
							>
								<text class="list-details-title">{{ pros.name }}</text>
								<text class="list-details-specs">规格：{{ pros.unit != null ? pros.unit : '' }}</text>
								<view class="list-details-price">
									<view class="list-price">
										<text class="price-larger"> ￥{{ pros.price | NumFormat }} </text>
									</view>
									<view class="add-cart-btn" v-if="!popupShow" @click.stop="showPopup(1, pros)"
										>数量</view
									>
								</view>
							</view>
						</view>
					</view>
				</view>
				<!--加载loadding-->
				<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
				<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText"></tui-nomore>
				<!--加载loadding-->
			</view>
		</view>
		<!-- 取消收藏操作 -->
		<tui-bottom-popup :radius="false" :mask="false" :show="popupShow">
			<view class="tui-popup-box clearfix">
				<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
					<view class="tui-flex-1">
						<view class="superv-header-checked">
							<view class="oltext" @click="isCheckedAll">
								<view
									class="checkbox iconfont"
									:class="[isAllChecked ? 'icon-yixuanze' : 'icon-weixuanze']"
								></view>
								<view class="text">全选</view>
							</view>
						</view>
						<view class="tui-button" :class="isProductChecked ? 'active' : ''" @click="handleAllUnder"
							>取消收藏</view
						>
					</view>
				</view>
			</view>
		</tui-bottom-popup>
		<!-- 选择规格弹窗 -->
		<cm-unit-popup
			v-if="popupShow1"
			:popupShow="popupShow1"
			:skuProduct="handleData"
			@skuClick="handleSkuClick"
		></cm-unit-popup>
		<!-- 弹窗提示 -->
		<tui-modal
			:show="modal"
			@click="handleClick"
			@cancel="hideMobel"
			:content="contentModalText"
			:button="modalButton"
			color="#333"
			:size="32"
			shape="circle"
			:maskClosable="false"
		>
		</tui-modal>
		<!-- 可拖动悬浮按钮 -->
		<cm-drag
			:cartNum="cartQuantity"
			:isDock="true"
			:existTabBar="true"
			@btnClick="btnClick"
			@btnTouchstart="btnTouchstart"
			@btnTouchend="btnTouchend"
		>
		</cm-drag>
	</view>
</template>
<script>
import cmDrag from '@/components/cm-custom/cm-drag.vue'
import cmUnitPopup from '@/components/cm-module/productDetails/cm-unit-popup.vue'

import { mapState, mapMutations } from 'vuex'
const defaultListQuery = {
	userId: 0,
	pageNum: 1,
	pageSize: 10
}
export default {
	components: {
		cmDrag,
		cmUnitPopup
	},
	data() {
		return {
			staticUrl:this.global.staticUrl,
			isIphoneX: this.$store.state.isIphoneX,
			modalButton: [
				{
					text: '取消',
					type: 'gray',
					plain: true //是否空心
				},
				{
					text: '确认',
					customStyle: {
						color: '#fff',
						bgColor: 'linear-gradient(90deg, #F28F31 0%, #F3B574 100%)'
					},
					plain: false
				}
			],
			totalRecord: 0,
			cartQuantity: 0,
			popupShow: false,
			popupShow1: false,
			isProductChecked: false,
			listQuery: Object.assign({}, defaultListQuery),
			productList: [],
			handleData: {},
			scrollTop: 0,
			isEmpty: false,
			isAllChecked: false,
			loadding: false,
			pullUpOn: true,
			pullFlag: true,
			hasNextPage: false,
			navbarHeight: '',
			nomoreText: '上拉显示更多',
			contentModalText: '', //操作文字提示语句
			modal: false,
			vipFlag: 0,
			userIdentity: 0,
			firstClubType: 0
		}
	},
	onLoad() {
		this.initGetStotage()
	},
	filters: {
		NumFormat: function(value) {
			//处理金额
			if (!value) return '0.00'
			let number = Number(value).toFixed(2)
			return number
		}
	},
	computed: {
		...mapState(['hasLogin', 'userInfo', 'clubType'])
	},
	methods: {
		...mapMutations(['login', 'logout']),
		async initGetStotage() {
			const userInfo = await this.$api.getStorage()
			this.listQuery.userId = userInfo.userId ? userInfo.userId : 0
			this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
			this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
			this.firstClubType = this.clubType
			this.GetProductListInfo()
			this.ProductCartNumber()
		},
		GetProductListInfo() {
			this.productList = []
			this.listQuery.pageNum = 1
			this.ProductService.getProductUserLikeList(this.listQuery)
				.then(response => {
					let data = response.data
					if (data.results && data.results.length > 0) {
						this.isEmpty = false
						this.hasNextPage = data.hasNextPage
						this.totalRecord = data.totalRecord
						this.productList = data.results
						this.pullFlag = false
						setTimeout(() => {
							this.pullFlag = true
						}, 500)
						if (this.hasNextPage) {
							this.pullUpOn = false
							this.nomoreText = '上拉显示更多'
						} else {
							if (this.productList.length < 8) {
								this.pullUpOn = true
							} else {
								this.pullUpOn = false
								this.loadding = false
								this.nomoreText = '已至底部'
							}
						}
					} else {
						this.isEmpty = true
					}
					this.isRequest = true
				})
				.catch(error => {
					this.$util.msg(error.msg, 2000)
				})
		},
		GetOnReachBottomData(index) {
			//上拉加载
			this.listQuery.pageNum += 1
			this.ProductService.getProductUserLikeList(this.listQuery)
				.then(response => {
					let data = response.data
					if (data.results && data.results.length > 0) {
						this.hasNextPage = data.hasNextPage
						this.productList = this.productList.concat(data.results)
						this.pullFlag = false // 防上拉暴滑
						setTimeout(() => {
							this.pullFlag = true
						}, 500)
						if (this.hasNextPage) {
							this.pullUpOn = false
							this.nomoreText = '上拉显示更多'
						} else {
							this.pullUpOn = false
							this.loadding = false
							this.nomoreText = '已至底部'
						}
					}
				})
				.catch(error => {
					this.$util.msg(error.msg, 2000)
				})
		},
		handleSkuClick(sku) {
			this.handleData.price = sku.price
		},
		ProductCartNumber() {
			// 获取用户购物车储量
			this.ProductService.ProductCartNumber({
				userId: this.listQuery.userId
			})
				.then(response => {
					this.cartQuantity = response.data
				})
				.catch(error => {
					console.log('获取购物车数量失败')
				})
		},
		handleAllUnder() {
			//批量下架操作
			let checkedArray = []
			this.productIds = ''
			if (this.isProductChecked) {
				this.productList.forEach(el => {
					if (el.isChecked) {
						checkedArray.push(el)
					}
				})
				checkedArray.forEach(el => {
					this.productIds += el.productId + ','
				})
				this.modal = true
				this.contentModalText = '确定要取消收藏吗？'
			}
		},
		handleClick(e) {
			//取消收藏
			if (e.index == 1) {
				this.handleDeleteUserLike()
			}
			this.modal = false
		},
		handleDeleteUserLike() {
			//操作取消收藏
			this.ProductService.getDeleteUserLike({
				productIds: this.productIds,
				userId: this.listQuery.userId
			})
				.then(response => {
					this.$util.msg('取消收藏成功', 2000, true, 'success')
					setTimeout(() => {
						this.GetProductListInfo()
					}, 2000)
				})
				.catch(error => {
					this.$util.msg(error.msg, 2000)
				})
		},
		hideMobel() {
			this.modal = false
		},
		updateCheckAllBtn() {
			//勾选单个判断全选
			let goodsCheckedLength = 0
			this.productList.forEach(item => {
				if (item.isChecked) {
					goodsCheckedLength++
				}
			})
			this.isAllChecked = goodsCheckedLength === this.productList.length
			if (goodsCheckedLength > 0) {
				this.isProductChecked = true
			} else {
				this.isProductChecked = false
			}
		},
		updateBothCheckBtn() {
			//全选勾选判断
			this.productList.forEach(item => {
				item.isChecked = this.isAllChecked
			})
		},
		isCheckedAll() {
			//全选
			this.isAllChecked = !this.isAllChecked
			if (this.isAllChecked) {
				this.isProductChecked = true
			} else {
				this.isProductChecked = false
			}
			this.updateBothCheckBtn()
		},
		checkedSoperv(item) {
			//选择
			item.isChecked = !item.isChecked
			console.log(item)
			this.updateCheckAllBtn()
		},
		showPopup(index, pros) {
			// 弹窗显示
			switch (index) {
				case 0:
					this.popupShow = true
					break
				case 1:
					this.popupShow1 = true
					this.handleData = pros
					break
			}
		},
		hidePopup(index) {
			// 弹窗隐藏
			switch (index) {
				case 0:
					this.popupShow = false
					break
				case 1:
					this.popupShow1 = false
					break
			}
		},
		navToDetailPage(id) {
			this.isModallayer = true
			this.$api.navigateTo(`/pages/goods/product?id=${id}`)
			this.isModallayer = false
		},
		btnClick() {
			this.$api.switchTabTo('/pages/tabBar/cart/index')
		},
		btnTouchstart() {
			// console.log('btnTouchstart');
		},
		btnTouchend() {
			// console.log('btnTouchend');
		}
	},
	onPageScroll(e) {
		//实时获取到滚动的值
	},
	onReachBottom() {
		if (this.hasNextPage) {
			this.loadding = true
			this.pullUpOn = true
			this.GetOnReachBottomData()
		}
	},
	onPullDownRefresh() {
		setTimeout(() => {
			this.listQuery.pageNum = 1
			uni.stopPullDownRefresh()
		}, 200)
	},
	onShow() {}
}
</script>

<style lang="scss">
@import '@/uni.scss';
page {
	background: #fff;
}
.empty-container {
	z-index: 9999;
}
.superv-header {
	width: 100%;
	height: 80rpx;
	background-color: #f7f7f7;
	line-height: 80rpx;
	position: fixed;
	top: 0;
	left: 0;
	box-sizing: border-box;
	padding: 0 24rpx;
	z-index: 99;
	.superv-header-click {
		width: 100%;
		height: 80rpx;
		font-size: $font-size-30;
		.oltext {
			float: left;
			color: #666666;
			.red {
				color: $color-system;
			}
		}
		.ortext {
			float: right;
			color: #333333;
			text-align: right;
		}
	}
}
.tui-header {
	width: 100%;
	font-size: 16px;
	font-weight: 500;
	height: 32px;
	display: flex;
	align-items: center;
	justify-content: center;
	position: relative;
	padding: 0 40rpx;
}
.header-sit {
	width: 100%;
	box-sizing: border-box;
	height: 80rpx;
	line-height: 80rpx;
	box-sizing: border-box;
	padding: 0 40rpx;
	text-align: left;
	font-size: $font-size-40;
	color: #ffffff;
	font-weight: 600;
	font-family: '正楷';
	margin-top: 30rpx;
	.iconfont {
		font-size: 42rpx;
		margin-left: 30rpx;
	}
}
.mine {
	width: 100%;
	height: 100%;
	position: relative;
}
.product-content {
	width: 100%;
	height: auto;
	position: relative;
	padding: 0;
	padding-top: 80rpx;
	box-sizing: border-box;
	.empty-container-image {
		width: 386rpx;
		height: 286rpx;
		margin-top: -300rpx;
	}
}
.tui-goods-item {
	padding: 30rpx 20rpx 0 20rpx;
	box-sizing: border-box;
	position: relative;
	.tui-goods-main {
		display: flex;
		width: 100%;
		height: 100%;
		border-bottom: 1px solid #ebebeb;
		padding-bottom: 24rpx;
	}
}
.tui-goods-checkBox {
	display: flex;
	align-items: center;
	margin: 0 15rpx;
	.checkbox {
		display: flex;
		margin: 0;
		padding: 0;
		display: flex;
		flex-direction: column;
		align-items: center;
		box-sizing: border-box;
		text-align: center;
		text-decoration: none;
		border-radius: 0;
		-webkit-tap-highlight-color: transparent;
		overflow: hidden;
		background-color: #ffffff;
		font-size: 36rpx;
		color: $color-system;
	}
	.text {
		font-size: $font-size-24;
		margin-left: 10rpx;
	}
}
.tui-goods-image {
	width: 180rpx;
	height: 180rpx !important;
	border: 2rpx solid #f3f3f3;
	border-radius: 12rpx;
	position: relative;
	border: 2rpx solid #f3f3f3;
	.tui-goods-img {
		width: 180rpx;
		height: 180rpx !important;
		border-radius: 12rpx;
		flex-shrink: 0;
		display: block;
	}
}
.tui-goods-info {
	padding-left: 20rpx;
	box-sizing: border-box;
	position: relative;
	.list-details-title {
		line-height: 38rpx;
		text-overflow: ellipsis;
		overflow: hidden;
		display: -webkit-box;
		-webkit-line-clamp: 2;
		line-clamp: 2;
		-webkit-box-orient: vertical;
		font-size: 26rpx;
		color: #333333;
	}
	.list-details-specs {
		width: 100%;
		display: inline-block;
		margin-top: 8rpx;
		color: #999999;
		font-size: 24rpx;
	}
	.list-details-price {
		width: 100%;
		line-height: 54rpx;
		float: left;
		margin-top: 24rpx;
		.list-price {
			color: #ff2a2a;
			float: left;
			line-height: 54rpx;
			align-items: center;
			justify-content: center;
			.price-larger {
				font-size: $font-size-30;
				display: inline-block;
				&.none {
					text-decoration: line-through;
					color: #999999;
				}
			}
		}
		.add-cart-btn {
			float: right;
			width: 160rpx;
			height: 56rpx;
			line-height: 56rpx;
			border-radius: 30rpx;
			color: #fff;
			font-size: 24rpx;
			margin-right: 0;
			background: #F3B574;
			color: #ffffff;
			text-align: center;
		}
	}
}
.tui-popup-box {
	position: relative;
	box-sizing: border-box;
	min-height: 168rpx;
	padding: 6rpx 24rpx;
	.tui-popup-content {
		padding-top: 30rpx;
	}
}
.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;
		}
	}
}
.tui-popup-btn {
	width: 100%;
	height: auto;
	float: left;
	box-sizing: border-box;
	margin-top: 30rpx;
	.superv-header-checked {
		float: left;
		font-size: $font-size-30;
		.oltext {
			width: 120rpx;
			float: left;
			color: #666666;
			display: flex;
			margin-left: 10rpx;
			.checkbox {
				display: flex;
				margin: 0;
				padding: 0;
				display: flex;
				flex-direction: column;
				align-items: center;
				box-sizing: border-box;
				text-align: center;
				text-decoration: none;
				border-radius: 0;
				-webkit-tap-highlight-color: transparent;
				overflow: hidden;
				font-size: 34rpx;
				color: $color-system;
				line-height: 80rpx;
			}
			.text {
				float: left;
				line-height: 80rpx;
				margin-left: 15rpx;
			}
		}
		.ortext {
			width: 120rpx;
			float: right;
			color: $color-system;
			text-align: right;
		}
	}
	.tui-button {
		width: 210rpx;
		height: 88rpx;
		float: right;
		background: #e1e1e1;
		line-height: 88rpx;
		text-align: center;
		color: #ffffff;
		font-size: $font-size-28;
		border-radius: 44rpx;
		&.active {
			background: $btn-confirm;
		}
	}
	.tui-flex-btn {
		width: 100%;
		height: 88rpx;
		display: flex;
		box-sizing: border-box;
		padding: 0 34rpx;
		.button {
			width: 280rpx;
			height: 88rpx;
			color: #fff;
			display: flex;
			align-items: center;
			justify-content: center;
			font-size: $font-size-28;
			border-radius: 44rpx;
			&.buy {
				background: $btn-confirm;
				margin-left: 78rpx;
			}
			&.add {
				background: #ffe6dc;
				color: #F3B574;
			}
		}
	}
}
</style>
