<template>
	<view class="content">
		<scroll-view scroll-y class="left-aside">
			<view v-for="item in flist" :key="item.id" class="f-item b-b" :class="{ active: item.id === actionCid }" @click="tabtap(item)">{{ item.cate_name }}</view>
		</scroll-view>
		<scroll-view scroll-with-animation scroll-y class="right-aside" @scroll="asideScroll" :scroll-top="tabScrollTop" style="background-color: #fff;">
			<view class="s-list" >
				<!-- <text class="s-item">{{ item.cate_name }}</text> -->
				<!-- <empty v-if="list.length === 0" ></empty> -->
				<view class="t-list ">
					<view class="t-item flex" v-for="titem in list" :key="titem.id" @click="navTo('/pages/product/product?id=' + titem.id)">
						<image :src="titem.image"></image>
						<!-- <text>{{ titem.store_name }}</text> -->
						<view class="info flex">
							<view class="name clamp2">
								{{titem.store_name}}
							</view>
							<view class="price">
								{{titem.price}}
							</view>
						</view>
					</view>
				</view>
			</view>
		</scroll-view>
	</view>
</template>

<script>
	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
	import empty from '@/components/empty';
import { getCategoryList,getProducts } from '@/api/product.js';
export default {
	components: {
		uniLoadMore,
		empty
	},
	data() {
		return {
			sizeCalcState: false,
			tabScrollTop: 0,
			currentId: 9,
			flist: [],
			list: [],
			actionCid: 0,
		};
	},
	onLoad() {
		this.loadData();
	},
	// 监听导航栏输入框点击事件
	onNavigationBarSearchInputClicked(e) {
		uni.navigateTo({
			url: '/pages/product/search'
		});
	},
	methods: {
		navTo(url) {
			uni.navigateTo({
				url,
				fail() {
					uni.switchTab({
						url
					})
				}
			})
		},
		// 载入数据
		async loadData() {
			let obj = this;
			getCategoryList({})
				.then(({ data }) => {
					obj.flist = data.map(function(s) {
						return s;
					});
					if(obj.flist.length > 0) {
						obj.actionCid = obj.flist[0].id
						getProducts({
							cid: obj.actionCid
						}).then(res => {
							obj.list = res.data
						})
					}
					
				})
				.catch(err => {
					console.log(err);
				});
		},
		//一级分类点击
		tabtap(item) {
			console.log(item);
			this.list = []
			this.actionCid = item.id
			getProducts({
				cid: this.actionCid
			}).then(res => {
				this.list = res.data
			})
			// 判断有没有初始化页面高度对象数据
			// if (!this.sizeCalcState) {
			// 	this.calcSize();
			// }
			// // 获取当前点击的id
			// this.currentId = item.id;
			// console.log(item.top);
			// this.tabScrollTop = item.top;
			// console.log(this.tabScrollTop);
		},
		//右侧栏滚动
		asideScroll(e) {
			// 判断有没有初始化页面高度对象数据
			if (!this.sizeCalcState) {
				this.calcSize();
			}
			let scrollTop = e.detail.scrollTop;
			let box = 0; //列表包裹框高度初始化
			let bottom = 10; //距离页面底部多少像素左侧列表切换到最后一个一级分类
			// 查询当前页面对象
			let view = uni.createSelectorQuery().select('.content');
			view.fields(
				{
					id: true,
					dataset: true,
					rect: true,
					size: true,
					scrollOffset: true
				},
				function(e) {
					// 保存包裹框高度
					box = e.height;
				}
			).exec();
			// 获取所有距离顶部大于滚轮距离页面高度的所有分类
			let tabs = this.flist.filter(item =>( item.top-10) <= scrollTop).reverse();
			if (tabs.length > 0) {
				// 判断是否已经到达滚轮底部
				if (box + scrollTop + bottom >= e.detail.scrollHeight) {
					this.currentId = this.flist[this.flist.length - 1].id;
				} else {
					this.currentId = tabs[0].id;
				}
			}
		},
		//计算右侧栏每个tab的高度等信息
		calcSize() {
			let h = 0;
			this.flist.forEach(item => {
				let view = uni.createSelectorQuery().select('#main-' + item.id);
				view.fields(
					{
						size: true
					},
					data => {
						item.top = h;
						h += data.height;
						item.bottom = h;
					}
				).exec();
			});
			this.sizeCalcState = true;
		},
		navToList(sid, tid) {
			// 点击导航跳转到详细页面
			uni.navigateTo({
				url: '/pages/product/list?fid='+this.currentId+'&sid='+sid+'&tid='+tid
			});
		}
	}
};
</script>

<style lang="scss">
page,
.content {
	height: 100%;
	background-color: #f8f8f8;
}

.content {
	display: flex;
}
.left-aside {
	flex-shrink: 0;
	width: 200rpx;
	height: 100%;
	background-color: #f2f2f2;
}
.f-item {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100rpx;
	font-size: 32rpx;
	color: $font-color-base;
	position: relative;
	padding-left: 10rpx;
	text-align: center;
	&.active {
		color: $base-color;
		background: #fff;
		&:before {
			content: '';
			position: absolute;
			left: 0;
			top: 50%;
			transform: translateY(-50%);
			height: 36rpx;
			width: 8rpx;
			background-color: $base-color;
			border-radius: 0 4px 4px 0;
			opacity: 0.8;
		}
	}
}

.right-aside {
	flex: 1;
	overflow: hidden;
	padding-left: 20rpx;
	padding-right: 20rpx;
}
.s-item {
	display: flex;
	align-items: center;
	height: 70rpx;
	padding-top: 8rpx;
	font-size: 32rpx;
	color: $font-color-dark;
}
.t-list {
	// display: flex;
	// flex-wrap: wrap;
	border-radius: 15rpx;
	width: 100%;
	background: #fff;
	padding-top: 12rpx;
	&:after {
		content: '';
		flex: 99;
		height: 0;
	}
}
.t-item {
	justify-content: flex-start;
	border-bottom: 1px solid #eee;
	padding: 20rpx;
	

	image {
		width: 180rpx;
		height: 180rpx;
		flex-shrink: 0;
	}
	.info {
		height: 180rpx;
		padding-left: 20rpx;
		flex-direction: column;
		
		font-weight: bold;
		font-size: 34rpx;
		align-items: flex-start;
		color: #FF6F0F;
		.name {
			font-weight: bold;
			font-size: 30rpx;
			color: #333333;
		}
	}
}
</style>
