<template>
	<view class="content" :style="{paddingTop:item?'366rpx':''}">
		<!-- <view>商品分类</view> -->
		<view style="position: fixed;top: 0; width: 100%; background-color: #F2F2F2;" class="header">
			<view v-if="item">
				<stationItem :item="item">
					<template #button>
						<view class="navigation">导航</view>
					</template>
				</stationItem>
			</view>
			<view class="navbar">
				<view class="nav-item" :class="{current: filterIndex === 0}" @click="tabClick(0)">
					综合排序
				</view>
				<!-- <view class="nav-item" :class="{current: filterIndex === 1}" @click="tabClick(1)">
					销量优先
				</view> -->
				<view class="nav-item" :class="{current: filterIndex === 2}" @click="tabClick(2)">
					<text>价格</text>
					<view class="p-box">
						<view :class="{selectTriangle: page.sorted.price === 'desc' && filterIndex === 2}"
							class="triangle">
						</view>
						<view :class="{selectTriangle2: page.sorted.price === 'asc' && filterIndex === 2}"
							class="triangle2">
						</view>
					</view>
				</view>
				<view class="nav-item" :class="{current: filterIndex === 3}" @click="tabClick(3)">
					新品
				</view>
				<view v-if="apiName!=='more'" class="cate-item" @click="toggleCateMask('show')">
					<uni-icons type="bars" size="20"></uni-icons>
				</view>
			</view>
		</view>
		<view class="goods-list">
			<view v-for="(item, index) in goodsList" :key="index" class="goods-item" @click="navToDetailPage(item)">
				<view class="image-wrapper">
					<image :src="item.url" mode="aspectFill"></image>
				</view>
				<text class="title clamp">{{item.productName}}</text>
				<view class="price-box">
					<text class="price">{{item.price}}</text>
					<text>库存 {{item.stock}}</text>
				</view>
			</view>
		</view>
		<uni-load-more :status="loadingType"></uni-load-more>
		<view class="cate-mask" :class="cateMaskState===0 ? 'none' : cateMaskState===1 ? 'show' : ''"
			@click="toggleCateMask">
			<view class="cate-content" @click.stop.prevent="stopPrevent" @touchmove.stop.prevent="stopPrevent">
				<scroll-view scroll-y class="cate-list">
					<view v-for="(item,index) in cateList" :key="item.id">
						<view :class="{active: item.id==page.params.categoryOneId}" class="cate-item b-b two">
							{{item.categoryName}}
						</view>
						<view v-for="tItem in item.classificationTwoList" :key="tItem.id"
							:class="{active: tItem.id==page.params.categoryTwoId}" class="cate-item b-b"
							@click="changeCate(item,tItem)">
							{{tItem.categoryName}}
						</view>
					</view>
				</scroll-view>
			</view>
		</view>
	</view>
</template>
<script>
	import stationItem from '@/components/stationItem/stationItem.vue'
	import productApi from '@/api/product.js'
	export default {
		components: {
			stationItem
		},
		data() {
			return {
				apiName: 'classificationByPage',
				model: "classify",
				page: {
					"pageSize": 10,
					"currentPage": 1,
					"params": {
						"type": "",
						"categoryOneId": "", // 一级分类id
						"categoryTwoId": "", // 二级分类id 
					},
					"sorted": {
						"price": "", // 降序 从大往小 desc asc
						"new_mark": "" // 新品 asc写死
					},
					"columns": []
				},
				item: null,
				cateMaskState: 0, //分类面板展开状态
				headerPosition: "fixed",
				headerTop: "",
				loadingType: 'more', //加载更多状态
				filterIndex: 0,
				cateId: 0, //已选三级分类id
				priceOrder: 0, //1 价格从低到高 2价格从高到低
				cateList: [],
				goodsList: []
			};
		},

		onLoad(options) {
			if (options.item) {
				this.item = JSON.parse(decodeURIComponent(options.item));
				this.page.params['siteId'] = this.item.siteId;
				this.apiName = 'nearbySiteInfo'
			}
			if (options.categoryOneId) {
				this.page.params.categoryOneId = options.categoryOneId;
			}
			if (options.type) {
				this.page.params.type = options.type;
				this.apiName = 'more';
				uni.setNavigationBarTitle({
					title: this.page.params.type == '1' ? '新鲜好物' : this.page.params.type == '2' ? '人气推荐' : this
						.page.params.type == '3' ? '猜你喜欢' : "分类商品",
				})
			}
			this.loadCateList(options.fid, options.sid);
			this.loadData();
		},
		onPageScroll(e) {
			//兼容iOS端下拉时顶部漂移
			if (e.scrollTop >= 0) {
				this.headerPosition = "fixed";
			} else {
				this.headerPosition = "absolute";
			}
		},
		//下拉刷新
		onPullDownRefresh() {
			this.page.currentPage = 1;
			this.loadData('refresh');
			this.loadCateList();
		},
		//加载更多
		onReachBottom() {
			this.loadData();
		},
		methods: {
			getDom(className = '.header') {
				// select中的参数就如css选择器一样选择元素
				let info = uni.createSelectorQuery().in(this).select(className);
				info.boundingClientRect(function(data) {
					this.headerTop = `${data.height}px`
					console.log(this.headerTop, 'headerTop')
				}).exec(function(res) {
					// 注意：exec方法必须执行，即便什么也不做，否则不会获取到任何数据
				})
			},
			getClassification() {

			},
			//加载分类
			async loadCateList(fid, sid) {
				let list = [];
				await productApi.classification().then(res => {
					if (res.code == 20000) {
						this.cateList = res.data.filter(item => item.classificationTwoList.length)
					}
				});
			},
			//加载商品 ，带下拉刷新和上滑加载
			async loadData(type = 'add', loading) {
				//没有更多直接返回
				if (type === 'add') {
					if (this.loadingType === 'nomore') {
						return;
					};
					this.goodsList.length && (this.page.currentPage += 1);
					this.loadingType = 'loading';
				} else {
					this.page.currentPage = 1;
					this.loadingType = 'more'
				}
				let goodsList = [];

				await productApi[this.apiName](this.page).then(res => {
					goodsList = res.data.list
				})
				if (type === 'refresh') {
					this.goodsList = [];
				}
				this.goodsList = this.goodsList.concat(goodsList);
				//判断是否还有下一页，有是more  没有是nomore(测试数据判断大于20就没有了)
				this.loadingType = goodsList.length < this.page.pageSize ? 'nomore' : 'more';
				if (type === 'refresh') {
					if (loading == 1) {
						uni.hideLoading()
					} else {
						uni.stopPullDownRefresh();
					}
				}
			},
			//筛选点击
			tabClick(index) {
				if (this.filterIndex === index && index !== 2) {
					return;
				}
				this.filterIndex = index;
				if (index === 2) {
					this.page.sorted.price = this.page.sorted.price === 'desc' ? 'asc' : 'desc';
				} else {
					this.page.sorted.price = ''
				}
				if (index == 3) {
					this.page.sorted.new_mark = 'asc'
				} else {
					this.page.sorted.new_mark = ''
				}
				uni.pageScrollTo({
					duration: 300,
					scrollTop: 0
				});
				this.loadData('refresh', 1);
				uni.showLoading({
					title: '正在加载'
				})
			},
			//显示分类面板
			toggleCateMask(type) {
				let timer = type === 'show' ? 10 : 300;
				let state = type === 'show' ? 1 : 0;
				this.cateMaskState = 2;
				setTimeout(() => {
					this.cateMaskState = state;
				}, timer)
			},
			//分类点击
			changeCate(parentItem = {}, item = {}) {
				let {
					id: categoryOneId = ''
				} = parentItem;
				let {
					id: categoryTwoId = ''
				} = item;
				Object.assign(this.page.params, {
					categoryOneId,
					categoryTwoId
				});
				// this.cateId = item.id; 
				this.toggleCateMask();
				uni.pageScrollTo({
					duration: 300,
					scrollTop: 0
				})
				this.loadData('refresh', 1);
				uni.showLoading({
					title: '正在加载'
				})
			},
			//详情
			navToDetailPage(item) {
				//测试数据没有写id，用title代替
				let id = item.id;
				uni.navigateTo({
					url: `/Product/pages/product?id=${id}`
				})
			},
			stopPrevent() {}
		},
	}
</script>

<style lang="scss">
	.navigation {

		font-size: 28rpx;
		color: #F83D3D;
		padding: 5rpx 20rpx;
		border: solid 1rpx #F83D3D;
		border-radius: 50rpx;
	}

	.site-list-item {
		margin: 20rpx auto !important;
	}

	.selectTriangle {
		border-bottom: 4px solid $base-color !important;
	}

	.selectTriangle2 {
		border-top: 4px solid $base-color !important;
	}

	.triangle {
		width: 0;
		height: 0;
		border-left: 4px solid transparent;
		border-right: 4px solid transparent;
		border-bottom: 4px solid #bbbbbb;
		margin-bottom: 10rpx;
	}

	.triangle2 {
		width: 0;
		height: 0;
		border-left: 4px solid transparent;
		border-right: 4px solid transparent;
		border-top: 4px solid #bbbbbb;
	}

	page,
	.content {
		background: $page-color-base;
	}

	.content {
		padding-top: 96upx;
	}

	.navbar {
		// position: fixed;
		left: 0;
		// top: var(--window-top);
		display: flex;
		width: 100%;
		height: 80upx;
		background: #fff;
		box-shadow: 0 2upx 10upx rgba(0, 0, 0, .06);
		z-index: 10;

		.nav-item {
			flex: 1;
			display: flex;
			justify-content: center;
			align-items: center;
			height: 100%;
			font-size: 30upx;
			color: $font-color-dark;
			position: relative;

			&.current {
				color: $base-color;

				&:after {
					content: '';
					position: absolute;
					left: 50%;
					bottom: 0;
					transform: translateX(-50%);
					width: 120upx;
					height: 0;
					border-bottom: 4upx solid $base-color;
				}
			}
		}

		.p-box {
			margin-left: 10rpx;
			display: flex;
			flex-direction: column;

			.yticon {
				display: flex;
				align-items: center;
				justify-content: center;
				width: 30upx;
				height: 14upx;
				line-height: 1;
				margin-left: 4upx;
				font-size: 26upx;
				color: #888;

				&.active {
					color: $base-color;
				}
			}

			.xia {
				transform: scaleY(-1);
			}
		}

		.cate-item {
			display: flex;
			justify-content: center;
			align-items: center;
			height: 100%;
			width: 80upx;
			position: relative;
			font-size: 44upx;

			&:after {
				content: '';
				position: absolute;
				left: 0;
				top: 50%;
				transform: translateY(-50%);
				border-left: 1px solid #ddd;
				width: 0;
				height: 36upx;
			}
		}
	}

	/* 分类 */
	.cate-mask {
		position: fixed;
		left: 0;
		top: var(--window-top);
		bottom: 0;
		width: 100%;
		background: rgba(0, 0, 0, 0);
		z-index: 95;
		transition: .3s;

		.cate-content {
			width: 630upx;
			height: 100%;
			background: #fff;
			float: right;
			transform: translateX(100%);
			transition: .3s;
		}

		&.none {
			display: none;
		}

		&.show {
			background: rgba(0, 0, 0, .4);

			.cate-content {
				transform: translateX(0);
			}
		}
	}

	.cate-list {
		display: flex;
		flex-direction: column;
		height: 100%;

		.cate-item {
			display: flex;
			align-items: center;
			height: 90upx;
			padding-left: 30upx;
			font-size: 28upx;
			color: #555;
			position: relative;
		}

		.two {
			height: 64upx;
			color: #303133;
			font-size: 30upx;
			background: #f8f8f8;
		}

		.active {
			color: $base-color;
		}
	}

	/* 商品列表 */
	.goods-list {
		display: flex;
		flex-wrap: wrap;
		padding: 0 30upx;
		background: #fff;

		.goods-item {
			display: flex;
			flex-direction: column;
			width: 48%;
			padding-bottom: 40upx;

			&:nth-child(2n+1) {
				margin-right: 4%;
			}
		}

		.image-wrapper {
			width: 100%;
			height: 330upx;
			border-radius: 3px;
			overflow: hidden;

			image {
				width: 100%;
				height: 100%;
				opacity: 1;
			}
		}

		.title {
			font-size: $font-lg;
			color: $font-color-dark;
			line-height: 80upx;
		}

		.price-box {
			display: flex;
			align-items: center;
			justify-content: space-between;
			padding-right: 10upx;
			font-size: 24upx;
			color: $font-color-light;
		}

		.price {
			font-size: $font-lg;
			color: $base-color;
			line-height: 1;

			&:before {
				content: '￥';
				font-size: 26upx;
			}
		}
	}
</style>