<template>
	<scroll-view id="shopBox" class="container" scroll-y="true" @scrolltolower="handleLoadMore">
		<view class="shop-bg"></view>
		<view class="shop-info">
			<view class="shop-icon">
				<image class="shop-logo" :src="shopData.logo"></image>
			</view>
			<view class="shop-name">{{shopData.name}}</view>
			<view class="shop-sell">已售商品{{shopData.soldCount}}</view>
		</view>
		<view class="shop-image">
			<swiper class="swiper" :indicator-dots="false" :autoplay="true" :interval="3000" :duration="500">
				<swiper-item v-for="(item,index) in shopData.storeImgUrl" :key="index">
					<image :src="item"></image>
				</swiper-item>
			</swiper>
		</view>
		<view class="shop-tab">
			<u-tabs :list="tabList" :is-scroll="false" :current="tabIndex" @change="changeTabs" font-size="30" active-color="#52A63A"
			 inactive-color="#666666" :bold="false" height="90" bar-width="80"></u-tabs>
		</view>
		<view class="shop-sort" v-show="!tabIndex">
			<u-dropdown active-color="#52A63A">
				<u-dropdown-item v-model="goodSort" title="新品" :options="options1" @change="changeSort()"></u-dropdown-item>
				<u-dropdown-item v-model="goodSort" title="价格" :options="options2" @change="changeSort()"></u-dropdown-item>
				<u-dropdown-item v-model="goodSort" title="销量" :options="options3" @change="changeSort()"></u-dropdown-item>
			</u-dropdown>
		</view>
		<view class="shop-all-goods" v-show="!tabIndex">
			<view class="goods-row" v-for="(item,index) in allGoodsList" :key="index" @click="goToGoodDetails(item)">
				<image class="goods-img" :src="item.imgPath"></image>
				<view class="goods-info">
					<view class="goods-name">{{item.productName}}</view>
					<view class="goods-number">{{item.sellCount}}人付款</view>
					<text class="goods-price">
						<text class="sale-icon">¥</text>
						<text class="sale-price">{{item.bizPrice}}</text>
						<text class="price">原价:{{item.originalPrice}}</text>
						<text class="iconfont icongengduo"></text>
					</text>
				</view>
			</view>
		</view>
		<view class="shop-category" v-show="tabIndex">
			<view class="category-col" v-for="(item,index) in categoryList" :key="index" :style="{width: item.width + '%'}">
				<view class="category-button" :class="selectSort == item.productCategoryId ? 'category-button-active' : ''" :id="'categoryCol'+index"
				 @click="changeCategory(item)">{{item.categoryName}}</view>
			</view>
		</view>
		<view class="shop-all-goods" v-show="tabIndex">
			<view class="goods-row" v-for="(item,index) in sortGoodsList" :key="index" @click="goToGoodDetails(item)">
				<image class="goods-img" :src="item.imgPath"></image>
				<view class="goods-info">
					<view class="goods-name">{{item.productName}}</view>
					<view class="goods-number">{{item.sellCount}}人付款</view>
					<text class="goods-price">
						<text class="sale-icon">¥</text>
						<text class="sale-price">{{item.bizPrice}}</text>
						<text class="price">原价:{{item.originalPrice}}</text>
						<text class="iconfont icongengduo"></text>
					</text>
				</view>
			</view>
		</view>
		<u-top-tips ref="uTips"></u-top-tips>
	</scroll-view>
</template>

<script>
	const NET = require('@/utils/request')
	const API = require('@/config/api')
	export default {
		data() {
			return {
				shopData: {
					name: '',
					logo: '',
					soldCount: '',
					storeImgUrl: [],
				},
				tabIndex: 0,
				tabList: [{
						name: '全部商品'
					},
					{
						name: '分类查看'
					}
				],
				goodSort: 1,
				options1: [{
					label: '新品',
					value: 1
				}],
				options2: [{
						label: '价格升序',
						value: 2
					},
					{
						label: '价格降序',
						value: 3
					}
				],
				options3: [{
						label: '销量升序',
						value: 4
					},
					{
						label: '销量降序',
						value: 5
					}
				],
				pageIndex1: 1,
				isOver1: false,
				allGoodsList: [],
				selectSort: '',
				categoryList: [],
				pageIndex2: 1,
				isOver2: false,
				sortGoodsList: [],
				isSet: false,
			}
		},
		onLoad(options) {
			this.goodId = options.goodId
			NET.request(API.getShopDetail + '/' + this.goodId, {}, 'GET').then(res => {
				res.data.storeImgUrl = res.data.storeImgUrl && res.data.storeImgUrl.length ? res.data.storeImgUrl.split(',') : []
				this.shopData = res.data
			}).catch(res => {
				this.$refs.uTips.show({
					title: '获取商铺详情失败',
					type: 'warning',
				})
			})
			this.getAllGoodsList()
		},
		onReady() {
			let queryNode = uni.createSelectorQuery().in(this);
			queryNode.select('#shopBox').boundingClientRect(data => {
				this.winWidth = data.width
			}).exec();
			NET.request(API.getCategoryByShop + this.goodId, {}, 'GET').then(res => {
				this.categoryList = res.data
				this.selectSort = res.data.length ? res.data[0].productCategoryId : ''
				this.getSortGoodsList()
			}).catch(res => {
				this.$refs.uTips.show({
					title: '获取分类失败',
					type: 'warning',
				})
			})
		},
		methods: {
			//  切换tab
			changeTabs(index) {
				this.tabIndex = index;
				if (index && !this.isSet) {
					this.$nextTick(() => {
						this.isSet = true
						this.setWidth()
					});
				}
			},
			//  重新查询全部商品
			changeSort() {
				this.isOver1 = false
				this.pageIndex1 = 1
				this.allGoodsList = []
				this.getAllGoodsList()
			},
			//  懒加载
			handleLoadMore() {
				if (this.tabIndex == 0) {
					if (!this.isOver1) {
						this.pageIndex1++
						this.getAllGoodsList()
					}
				} else {
					if (!this.isOver2) {
						this.pageIndex2++
						this.getSortGoodsList()
					}
				}
			},
			//  获取全部商品
			getAllGoodsList() {
				NET.request(API.getAllGoodsByShop + this.goodId + '/' + this.pageIndex1 + '/10', {
					sort: this.goodSort,
				}, 'GET').then(res => {
					this.isOver1 = res.data.list.length != 10
					this.allGoodsList = this.allGoodsList.concat(res.data.list)
				}).catch(res => {
					this.$refs.uTips.show({
						title: '获取商品列表失败',
						type: 'warning',
					})
				})
			},
			//  获取分类商品
			getSortGoodsList() {
				NET.request(API.getGoodsByShopAndSort + this.selectSort + '/' + this.pageIndex2 + '/10', {
					tenantCode: this.selectSort
				}, 'GET').then(res => {
					this.isOver2 = res.data.list.length != 10
					this.sortGoodsList = this.sortGoodsList.concat(res.data.list)
				}).catch(res => {
					this.$refs.uTips.show({
						title: '获取商品列表失败',
						type: 'warning',
					})
				})
			},
			//  跳转商品详情
			goToGoodDetails(item) {
				uni.navigateTo({
					url: '/pagesGood/goodDetails?goodId=' + item.productId + '&goodType=' + item.productType
				});
			},
			//  重新查询分类商品
			changeCategory(item) {
				this.selectSort = item.productCategoryId
				this.isOver2 = false
				this.pageIndex2 = 1
				this.sortGoodsList = []
				this.getSortGoodsList()
			},
			//  动态渲染宽度
			setWidth() {
				let queryNode = uni.createSelectorQuery().in(this);
				this.categoryList.forEach((site, index) => {
					queryNode.select('#categoryCol' + index).boundingClientRect(data => {
						if (data.width > this.winWidth * 0.66) {
							site.width = 100
						} else if (data.width > this.winWidth * 0.33) {
							site.width = 66
						} else {
							site.width = 33
						}
					}).exec();
				})
			}
		},
	}
</script>

<style lang="less" scoped>
	page {
		width: 100%;
		height: 100%;
	}

	.container {
		width: 100%;
		height: 100%;
		float: left;

		.shop-bg {
			width: 100%;
			height: 120px;
			float: left;
			background-color: #52A63A;
		}

		.shop-info {
			width: 100%;
			height: 90px;
			float: left;
			background: #FFFFFF;
			border-radius: 10px 10px 0px 0px;
			margin-top: -25px;

			.shop-icon {
				width: 100%;
				height: 60px;
				float: left;
				margin-top: -30px;

				.shop-logo {
					width: 60px;
					height: 60px;
					border-radius: 50%;
					overflow: hidden;
					position: relative;
					left: 50%;
					transform: translateX(-50%);
				}
			}

			.shop-name {
				width: 100%;
				height: 34px;
				line-height: 34px;
				float: left;
				font-size: 15px;
				font-family: SimHei;
				color: #333333;
				text-align: center;
			}

			.shop-sell {
				width: 100%;
				height: 16px;
				line-height: 16px;
				float: left;
				font-size: 12px;
				font-family: SimHei;
				color: #666666;
				text-align: center;
			}
		}

		.shop-image {
			width: 100%;
			height: 170px;
			float: left;
			box-sizing: border-box;
			padding: 10px 15px 20px 15px;
			background-color: #f7f7f7;

			.swiper {
				height: 140px;
			}
		}

		.shop-tab {
			width: 100%;
			height: 45px;
			float: left;
			background-color: #FFFFFF;
		}

		.shop-sort {
			width: 100%;
			height: 40px;
			float: left;
			background-color: #FFFFFF;

			/deep/.u-dropdown__content {
				z-index: 100!important;
				min-height: 106px;
			}
			/deep/.u-dropdown__content__mask {
				visibility: hidden;
			}
		}

		.shop-category {
			width: 100%;
			float: left;
			background-color: #FFFFFF;

			.category-col {
				min-width: 33%;
				height: 26px;
				float: left;
				margin: 6px 0;
				box-sizing: content-box;

				.category-button {
					height: 24px;
					float: left;
					border-radius: 13px;
					box-sizing: content-box;
					border: 1px solid #51A539;
					padding: 0 16px;
					position: relative;
					left: 50%;
					transform: translateX(-50%);
					line-height: 24px;
					font-size: 12px;
					font-family: PingFang SC;
					color: #52A539;
				}

				.category-button-active {
					background-color: #52A539;
					color: #FFFFFF;
				}
			}
		}

		.shop-all-goods {
			width: 100%;
			float: left;
			padding: 6px 0 0px 0;
			box-sizing: border-box;
			overflow-y: auto;
			background-color: #f7f7f7;

			.goods-row {
				width: calc(100% - 24px);
				height: 104px;
				float: left;
				margin: 6px 0 12px 12px;
				background: #FFFFFF;
				box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.09);
				border-radius: 5px;
				overflow: hidden;
				display: flex;

				.goods-img {
					width: 104px;
					height: 104px;
					object-fit: cover;
				}

				.goods-info {
					width: calc(100% - 104px);
					padding: 10px 10px 10px 12px;
					box-sizing: border-box;

					.goods-name {
						height: 36px;
						font-size: 15px;
						font-family: PingFang SC;
						color: #333333;
						line-height: 18px;
						overflow: hidden;
						text-overflow: ellipsis;
						display: -webkit-box;
						-webkit-line-clamp: 2;
						-webkit-box-orient: vertical;
						word-wrap: break-word;
					}

					.goods-number {
						height: 16px;
						font-size: 12px;
						font-family: PingFang SC;
						color: #666666;
						line-height: 16px;
						margin: 6px 0 4px 0;
					}

					.goods-price {
						height: 24px;
						line-height: 24px;
						font-family: PingFang SC;

						.sale-icon {
							font-size: 12px;
							color: #6CA63A;
							margin-left: -2px;
						}

						.sale-price {
							font-size: 22px;
							color: #6CA63A;
							margin-right: 6px;
						}

						.price {
							font-size: 12px;
							text-decoration: line-through;
							color: #A67954;
						}

						.iconfont {
							float: right;
							color: #999999;
							font-size: 32px;
							line-height: 28px;
						}
					}
				}
			}
		}
	}
</style>