<template>
	<!-- 商品列表 -->
	<view>
		<view class="header_box fixed-lt w-full z-20 bg--w111-fff" :style="{'padding-top': sysHeight + 'px'}">
			<view class="h-80 px-20 flex-y-center">
				<!-- <text class="iconfont icon-ic_leftarrow fs-40 mr-16" @tap="goBack"></text> -->
				<!--  #ifdef  MP-WEIXIN -->
				<view class="h-58 rd-30 bg--w111-f5f5f5 flex-y-center px-32 relative" :style="[serchWidth]">
				<!--  #endif -->
				<!--  #ifndef  MP-WEIXIN -->
				<view class="flex-1 h-58 rd-30 bg--w111-f5f5f5 flex-y-center px-32 relative">
				<!--  #endif -->
					<text class="iconfont icon-ic_search fs-24"></text>
					<input :value='where.keyword' class="pl-18 w-460 line1 fs-24" placeholder="请输入商品名称" placeholder-class="text--w111-999" @confirm="searchSubmit" />
					<text class="iconfont icon-ic_close1 fs-28 text--w111-999 z-10" v-if="where.keyword" @tap="clearWord"></text>
				</view>
			</view>
			<view class="h-88 px-32 flex-between-center relative">
				<view class="text--w111-333 fs-26 fw-500 flex-y-center" @tap="toggleSortable">
					<text>综合排序</text>
					<text class="iconfont icon-ic_down2 fs-14 ml-6"></text>
				</view>
				<view class="text--w111-666 flex-y-center fs-26" @tap='set_where(3)'>
					<text :class="[1,2].includes(stock) ? 'text-primary-con' : ''">销量</text>
					<text v-show="stock==2" class="iconfont icon-ic_down2 fs-14 ml-6 text-primary-con"></text>
					<text v-show="stock==1" class="iconfont icon-ic_up2 fs-14 ml-6 text-primary-con"></text>
					<text v-show="stock==0" class="iconfont icon-ic_down2 fs-14 ml-6"></text>
				</view>
				<view class="text--w111-666 flex-y-center fs-26" @tap='set_where(2)'>
					<text :class="[1,2].includes(price) ? 'text-primary-con' : ''">价格</text>
					<text v-show="price==2" class="iconfont icon-ic_down2 fs-14 ml-6 text-primary-con"></text>
					<text v-show="price==1" class="iconfont icon-ic_up2 fs-14 ml-6 text-primary-con"></text>
					<text v-show="price==0" class="iconfont icon-ic_down2 fs-14 ml-6"></text>
				</view>
				<view class="text--w111-666 flex-y-center fs-26">
					<text class="iconfont" :class="is_switch ? 'icon-a-ic_Imageandtextsorting' : 'icon-a-ic_QRcode'" @tap='Changswitch'></text>
					<text class="menu_line"></text>
					<view @tap="openDrawer">筛选</view>
					<text class="iconfont icon-ic_sort pl-8" @tap="openDrawer"></text>
				</view>
				<view class="sortable-box w-full bg--w111-fff rd-b-24rpx z-999" v-if="showSortAbleBox">
					<view class="flex-between-center pb-40"
						v-for="(item, index) in sortableShowTab" :key="index" @tap="checkSortable(item.value)">
						<text class="fs-26" :class="item.value == where.defaultOrder ? 'text-primary-con' : 'text--w111-333'">{{item.title}}</text>
						<image class="w-28 h-28" src="../static/dui-icon.png" v-show="item.value == where.defaultOrder"></image>
					</view>
				</view>
			</view>
		</view>
		<view class="pt-16 pl-20 pr-20 bg--w111-fff" :style="{'margin-top':marTop + 'rpx'}" v-if="is_switch==false">
			<view class="flex mb-32 pro_item" v-for="(item,index) in tempArr" :key="index" @tap="goDetail(item)">
				<view class="list-pic w-240 h-240 relative">
					<easy-loadimage
					:image-src="item.image"
					:borderSrc="item.activity_frame.image"
					width="240rpx"
					height="240rpx"
					borderRadius="20rpx"></easy-loadimage>
				</view>
				<view class="flex-1 pl-20 flex-col justify-between">
					<view class="w-full">
						<view class="w-full line2 fs-28 text--w111-333 lh-40rpx">
							<text v-if="item.brand_name" class="brand-tag">{{ item.brand_name }}</text>{{item.store_name}}
						</view>
					</view>
					<view class="flex-between-center">
						<baseMoney :money="item.price" symbolSize="24" integerSize="40" decimalSize="24" color="#FF7E00" weight></baseMoney>
						<view class="w-44 h-44 rd-24 mer-bg flex-center" @tap.stop="addCartTap(item)">
							<text class="iconfont icon-ic_ShoppingCart1 text--w111-fff fs-26"></text>
						</view>
					</view>
				</view>
			</view>
			<view class='loadingicon acea-row row-center-wrapper' v-if='tempArr.length > 0'>
				<text class='loading iconfont icon-jiazai' :hidden='loading==false'></text>
			</view>
		</view>
		<view class="p-20 relative" :style="{'margin-top':marTop + 'rpx'}" v-else>
			<view class="jinabian"></view>
			<waterfallsFlow :wfList="tempArr" isMerchant @itemTap="goDetail"></waterfallsFlow>
		</view>
		<view class="pb-safe">
			<view class="h-200"></view>
		</view>
		<view class='px-20' v-if="tempArr.length==0 && where.page > 1">
			<emptyPage :title="where.keyword ? '无搜索结果,换个词试试吧' : '暂无商品，去看点别的吧～'"
				:src="where.keyword ? '/statics/images/noSearch.gif' : '/statics/images/empty-box.gif'"></emptyPage>
			<recommend :hostProduct="hostProduct"></recommend>
		</view>
		<filterDrawer
			:visible="showFilterDrawer"
			:brandList="brandList"
			:cateList="cateList"
			@closeDrawer="closeFilter"
			@filterChange="filterConfirm"></filterDrawer>
		<view class="mask" v-if="showSortAbleBox" @tap="showSortAbleBox = false"></view>
		<base-drawer mode="bottom" :visible="showSku" background-color="transparent" zIndex="3000" mask maskClosable
			@close="closeDrawer">
			<view>
				<view class="bg--w111-fff rd-t-40rpx">
				<view class="w-full pt-32">
					<view class="px-32 flex">
						<image class="w-180 h-180 rd-16rpx" :src="attr.productSelect.image"></image>
						<view class="pl-24">
							<baseMoney :money="attr.productSelect.price" symbolSize="32" integerSize="48"
								decimalSize="32" color="#FF7E00" weight></baseMoney>
							<view class="mt-20 fs-24 text--w111-999">库存:{{ attr.productSelect.stock }}</view>
						</view>
					</view>
				</view>
				<scroll-view class="px-32" scroll-y="true" style="max-height: 400rpx;">
					<view class="item mt-32" v-for="(item, indexw) in attr.productAttr" :key="indexw">
						<view class="fs-28">{{ item.attr_name }}</view>
						<view class="flex-y-center flex-wrap">
							<view class="sku-item" :class="item.index === itemn.attr ? 'active-sku' : ''"
								v-for="(itemn, indexn) in item.attr_value" @click="tapAttr(indexw, indexn)"
								:key="indexn">
								{{ itemn.attr }}
							</view>
						</view>
					</view>
				</scroll-view>
				<view class="flex-between-center px-32 mt-24">
					<text class="fs-28">数量</text>
					<view class="flex-y-center">
						<view class="jia-btn w-84 h-48 flex-center" @click="CartNumAdd(false)">
							<text class="iconfont icon-ic_Reduce fs-24"></text>
						</view>
						<view class='w-84 h-48 text-center lh-48rpx bg--w111-f5f5f5'>{{ attr.productSelect.cart_num }}</view>
						<view class="jia-btn w-84 h-48 flex-center" @click="CartNumAdd(true)">
							<text class="iconfont icon-ic_increase fs-24"></text>
						</view>
					</view>
				</view>
				<view class="mx-20 pb-box">
					<view class="mt-52 h-72 flex-center rd-36px mer-bg fs-26 text--w111-fff" @click="confirmCartAdd">
						确定</view>
				</view>
				</view>
			</view>
		</base-drawer>
		<tab-bar ref="tabBar" v-show="showTabBar"></tab-bar>
	</view>
</template>

<script>
	let sysHeight = uni.getWindowInfo().statusBarHeight;
	import productWindow from '@/components/productWindow';
	import waterfallsFlow from "@/components/WaterfallsFlow/WaterfallsFlow.vue";
	import {
		getProductslist,
		getProductHot,
		searchFilterApi,
		levelCategoryApi,
		getAttr,
		postCartAdd,
		postCartNum,
		getCategoryList
	} from '@/api/store.js';
	import {cartDel} from "@/api/order.js";
	import { toLogin } from '@/libs/login.js';
	import recommend from '@/components/recommend';
	import filterDrawer from '../components/filterDrwer/index.vue';
	import emptyPage from '@/components/emptyPage.vue';
	import tabBar from "../components/tabBar/index.vue"
	import { mapGetters } from "vuex";
	import { goShopDetail } from '@/libs/order.js';
	import { vcartList, getCartCounts, cartCompute } from '@/api/order.js';
	import colors from '@/mixins/color.js';
	import { HTTP_REQUEST_URL } from '@/config/app';
	export default {
		computed: {
			...mapGetters(['uid', 'isLogin']),
			serchWidth(){
				let res = wx.getMenuButtonBoundingClientRect();
				let windowWidth = wx.getWindowInfo().windowWidth;
				return {
					width: windowWidth - res.width - (windowWidth-res.right) - 20 + 'px'
				};
			}
		},
		components: {
			recommend,
			waterfallsFlow,
			filterDrawer,
			emptyPage,
			tabBar
		},
		mixins: [colors],
		data() {
			return {
				id: 0,
				productValue: [], //系统属性
				is_vip: 0, //是否是会员
				attr: {
					cartAttr: false,
					productAttr: [],
					productSelect: {}
				},
				productAttr: [],
				attrValue: '', //已选属性
				storeName: '',
				sysHeight: sysHeight,
				goodList: true,
				currentPage: false,
				tempArr: [],
				is_switch: true,
				where: {
					sid: 0,
					keyword: '',
					priceOrder: '',
					salesOrder: '',
					news: 0,
					page: 1,
					limit: 10,
					cid: 0,
					tid: 0,
					brand_id: '',
					defaultOrder:0,
					is_channel:1
				},
				price: 0,
				stock: 0,
				nows: false,
				loadend: false,
				loading: false,
				loadTitle: '加载更多',
				title: '',
				hostProduct: [],
				hotPage: 1,
				hotLimit: 10,
				hotScroll: false,
				brandList: [],
				promotionList:[],
				labelList:[],
				filterCateList:[],
				storeInfo: {},
				totalPrice: 0,
				promotionsInfo: {},
				totalNum: 0,
				imgHost: HTTP_REQUEST_URL,
				isShowAuth: false,
				marTop:'',
				showFilterDrawer:false,
				cateSearch:false,
				showSortAbleBox:false,
				sortableShowTab:[
					{title:'综合排序',value:0},
					{title:'好评优先',value:1},
					{title:'新品优先',value:2},
				],
				cartData: {
					cartList: [],
					iScart: false
				},
				cart_num: 0,
				discountInfo:{
					deduction:{},
				},
				showSku: false,
				cateList: [],
				showTabBar: true,
				product_id: ''
			};
		},
		provide() {
		    return {
				addCartClick: this.addCartTap,
				isVip: false,
				merchant: true
		    };
		  },
		onLoad(options) {
			this.getMarTop();
			this.getCateList()
			this.getProductList();
			this.getSearchFilter();
			this.getChannel();
		},
		methods: {
			getChannel(){
				let identity = this.$store.state.app.identity;
				let styleType = this.$store.state.app.system_channel_style;
				if(identity != 1 && this.isLogin){
					setTimeout(()=>{
						uni.switchTab({
							url: "/pages/index/index"
						})
					},500)
				}else if(identity == 2 && this.isLogin){
					uni.redirectTo({
						url: "/pages/admin/work/index"
					})
				}
			},
			addCartTap(data){
				if(data.spec_type){
					this.product_id = data.id;
					this.goCartDuo(data);
				}else{
					if (!this.isLogin) {
						toLogin();
					} else {
						if(data.cart_button == 0){
							uni.showToast({
								title: '该商品不可加入购物车',
								icon: 'none'
							})
						}else{
							let params = {
								num: 1,
								product_id: data.id,
								is_channel:1,
								type: 1,
							};
							postCartNum(params).then(res=> {
								this.$util.Tips({
									title: '添加购物车成功',
								});
								this.$refs.tabBar.getCartNum()
							}).catch(err => {
								return this.$util.Tips({
									title: err
								});
							});
						}
					}
				}
			},
			goCartDuo(item) {
				if (!this.isLogin) {
					toLogin();
				} else {
					if(item.cart_button == 0){
						uni.showToast({
							title: '该商品不可加入购物车',
							icon: 'none'
						})
					}else{
						this.storeName = item.store_name;
						this.getAttrs(item.id);
						this.$set(this, 'id', item.id);
						this.$set(this.attr, 'cartAttr', true);
					}
				}
			},
			// 商品详情接口；
			getAttrs(id) {
				let that = this;
				getAttr(id, 0).then(res => {
					this.$set(this.attr, 'productAttr', res.data.productAttr);
					this.productAttr = res.data.productAttr;
					this.$set(this, 'productValue', res.data.productValue);
					this.$set(this, 'storeInfo', res.data.storeInfo);
					this.DefaultSelect();
					this.showSku = true;
				})
			},
			DefaultSelect(){
				let productAttr = this.productAttr;
				let value = [];
				for (var key in this.productValue) {
					if (this.productValue[key].stock > 0) {
						value = productAttr.length ? key.split(',') : [];
						break;
					}
				}
				for (let i = 0; i < productAttr.length; i++) {
					this.$set(productAttr[i], 'index', value[i]);
				}
				let productSelect = this.productValue[value.join(',')];
				this.attr.productSelect = {
					image: productSelect.image,
					price: productSelect.price,
					unique: productSelect.unique || '',
					suk: productSelect.suk || '默认',
					stock: productSelect.stock,
					cart_num: 1
				};
			},
			tapAttr: function(indexw, indexn) {
				let that = this;
				this.$set(this.attr.productAttr[indexw], 'index', this.attr.productAttr[indexw].attr_values[indexn]);
				let value = that.getCheckedValue().join(",");
				this.attr.productSelect = {
					price: this.productValue[value].price,
					image: this.productValue[value].image,
					stock: this.productValue[value].stock,
					unique: this.productValue[value].unique || '',
					suk: this.productValue[value].suk || '默认',
					cart_num: 1
				};
			},
			getCheckedValue: function() {
				let productAttr = this.attr.productAttr;
				let value = [];
				for (let i = 0; i < productAttr.length; i++) {
					for (let j = 0; j < productAttr[i].attr_values.length; j++) {
						if (productAttr[i].index === productAttr[i].attr_values[j]) {
							value.push(productAttr[i].attr_values[j]);
						}
					}
				}
				return value;
			},
			closeDrawer(){
				this.showSku = false;
			},
			// 筛选
			getSearchFilter() {
				searchFilterApi({}).then(res => {
					this.brandList = res.data.brand;
				}).catch(err => {
					return this.$util.Tips({
						title: err.msg
					});
				})
			},
			toggleSortable(){
				this.showSortAbleBox = !this.showSortAbleBox;
			},
			checkSortable(val){
				this.where.defaultOrder = val;
				this.showSortAbleBox = false;
				this.loadend = false;
				this.$set(this.where, 'page', 1);
				this.getProductList(true);
			},
			clearWord(){
				this.where.keyword = ''
			},
			cateCheck(item){
				this.where.sid = item.id;
				this.loadend = false;
				this.$set(this.where, 'page', 1);
				this.getProductList(true);
			},
			openDrawer(){
				this.showFilterDrawer = true;
				this.showTabBar = false;
			},
			closeFilter(){
				this.showFilterDrawer = false;
				this.showTabBar = true;
			},
			filterConfirm(data){
				this.showFilterDrawer = false;
				this.showTabBar = true;
				Object.assign(this.where,data);
				this.loadend = false;
				this.$set(this.where, 'page', 1);
				this.getProductList(true);
			},
			CartNumAdd(type){
				if(type){
					this.attr.productSelect.cart_num++;
				}else{
					if(this.attr.productSelect.cart_num == 1) return
					this.attr.productSelect.cart_num--;
				}
			},
			// 去详情页
			goDetail(item) {
				this.currentPage = false;
				uni.navigateTo({
					url: `/pages/merchant/goodsDetails/index?id=${item.id}`
				});
			},
			Changswitch: function() {
				let that = this;
				this.currentPage = false
				that.is_switch = !that.is_switch
			},
			searchSubmit: function(e) {
				let that = this;
				this.currentPage = false
				that.$set(that.where, 'keyword', e.detail.value);
				that.loadend = false;
				that.$set(that.where, 'page', 1)
				this.getProductList(true);
				this.getSearchFilter();
			},
			/**
			 * 获取我的推荐
			 */
			get_host_product: function() {
				let that = this;
				if (that.hotScroll) return
				getProductHot(
					that.hotPage,
					that.hotLimit,
				).then(res => {
					that.hotPage++
					that.hotScroll = res.data.length < that.hotLimit
					that.hostProduct = that.hostProduct.concat(res.data)
					// that.$set(that, 'hostProduct', res.data)
				});
			},
			//点击事件处理
			set_where: function(e) {
				this.currentPage = false
				switch (e) {
					case 1:
						// #ifdef H5
						return history.back();
						// #endif
						// #ifndef H5
						return uni.navigateBack({
							delta: 1,
						})
						// #endif
						break;
					case 2:
						if (this.price == 0) this.price = 1;
						else if (this.price == 1) this.price = 2;
						else if (this.price == 2) this.price = 0;
						this.stock = 0;
						break;
					case 3:
						if (this.stock == 0) this.stock = 1;
						else if (this.stock == 1) this.stock = 2;
						else if (this.stock == 2) this.stock = 0;
						this.price = 0
						break;
					case 4:
						this.nows = !this.nows;
						break;

				}
				this.loadend = false;
				this.$set(this.where, 'page', 1);
				this.getProductList(true);
			},
			//设置where条件
			setWhere: function() {
				if (this.price == 0) this.where.priceOrder = '';
				else if (this.price == 1) this.where.priceOrder = 'asc';
				else if (this.price == 2) this.where.priceOrder = 'desc';
				if (this.stock == 0) this.where.salesOrder = '';
				else if (this.stock == 1) this.where.salesOrder = 'asc';
				else if (this.stock == 2) this.where.salesOrder = 'desc';
				this.where.news = this.nows ? 1 : 0;
			},
			//查找产品
			getProductList: function(isPage) {
				let that = this;
				that.setWhere();
				if (that.loadend) return;
				if (that.loading) return;
				if (isPage === true) {
					that.$set(that, 'tempArr', []);
				}
				that.loading = true;
				that.loadTitle = '';
				getProductslist(that.where).then(res => {
					let list = res.data;
					let productList = that.$util.SplitArray(list, that.tempArr);
					let loadend = list.length < that.where.limit;
					that.loadend = loadend;
					that.loading = false;
					that.loadTitle = loadend ? '没有更多内容啦~' : '加载更多';
					that.$set(that, 'tempArr', productList);
					that.$set(that.where, 'page', that.where.page + 1);
					if (!that.tempArr.length) this.get_host_product();
				}).catch(err => {
					that.loading = false;
					that.loadTitle = '加载更多';
				});
			},
			getMarTop(){
				this.$nextTick(()=>{
					this.marTop = (75 + sysHeight) * 2
				})
			},
			goBack(){
				// uni.navigateBack()
				let pages = getCurrentPages(); // 获取当前打开过的页面路由数，
				if (pages.length > 1) {
					uni.navigateBack()
				} else {
					uni.switchTab({
						url: '/pages/index/index'
					});
				}
			},
			getCateList(){
				getCategoryList().then(res => {
					this.cateList = res.data;
				})
			},
			confirmCartAdd(){
				let data = {
					product_id:this.product_id,
					num: this.attr.productSelect.cart_num,
					type: 1,
					uniqueId: this.attr.productSelect.unique,
					is_channel:1
				};
				postCartNum(data).then(res=> {
					this.showSku = false;
					this.$store.dispatch('indexData/getCartNum')
					uni.showToast({
						title: '添加购物车成功',
						icon: 'none'
					})
				}).catch(err => {
					return this.$util.Tips({
						title: err
					});
				});
			}
		},
		onPageScroll(e) {
			this.currentPage = false;
			uni.$emit('scroll');
		},
		onReachBottom() {
			if (this.tempArr.length > 0) {
				this.getProductList();
			} else {
				this.get_host_product();
			}
		},
		onPullDownRefresh() {
			if (this.tempArr.length > 0) {
				this.getProductList();
			} else {
				this.get_host_product();
			}
			setTimeout(function () {
				uni.stopPullDownRefresh();
			}, 1000);
		},
	}
</script>
<style scoped lang="scss">
	.z-200{
		z-index: 200;
	}
	.z-101{
		z-index: 101;
	}
	.pro_item ~ .pro_item{
		margin-top: 32rpx;
	}
	.border-picture {
		position: absolute;
		top: 0;
		left: 0;
		width: 100%;
		height: 100%;
		border-radius: 16rpx 16rpx 0 0;
		background: center/cover no-repeat;
	}
	.menu_line {
		width: 1px;
		height: 30rpx;
		background: #B3B3B3;
		margin: 0 20rpx;
	}
	.icon-ic_close1{
		position: absolute;
		right: 34rpx;
		top: 50%;
		transform: translateY(-50%);
	}
	.select_cate{
		&:after{
			content: '';
			position: absolute;
			top: 42rpx;
			left:50%;
			transform: translateX(-50%);
			width:36rpx;
			height:10rpx;
			background-image: url('../static/select_zs.png');
			background-size: 100%;
		}
	}
	.jinabian{
		position: absolute;
		top: 0;
		left: 0;
		width: 100%;
		height: 330rpx;
		background: linear-gradient(180deg, #FFFFFF 0%, rgba(255,255,255,0) 100%);
	}
	.info_box{
		padding: 16rpx 20rpx;
		border-radius: 0 0 20rpx 20rpx;
		background-color: #fff;
	}
	.text-primary-con{
		color: var(--view-theme);
	}
	.bg-primary-light{
		background: var(--view-minorColorT);
	}
	.bg--w111-484643{
		background: linear-gradient(90deg, #484643 0%, #1F1B17 100%);
	}
	.text--w111-FDDAA4{
		color: #FDDAA4;
	}
	.svip_rd{
		border-radius: 14rpx 0 8rpx 14rpx;
	}
	.op-border{
		border: 1px solid #f5f5f5;
	}
	.active{
		border: 1px solid var(--view-theme);
		color: var(--view-theme);
		background: var(--view-minorColorT);
	}
	.sortable-box{
		padding: 32rpx 32rpx 0;
		position: absolute;
		top: 88rpx;
		left: 0;
	}
	.sku-item {
		height: 56rpx;
		line-height: 56rpx;
		border: 1px solid #F2F2F2;
		font-size: 24rpx;
		color: #333;
		padding: 0 44rpx;
		border-radius: 28rpx;
		margin: 24rpx 0 0 16rpx;
		background-color: #F2F2F2;
		word-break: break-all;
	}

	.active-sku {
		color: $primary-merchant;
		background: $light-primary-merchant;
		border-color: $primary-merchant;
	}
	.pb-box{
		padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
	}
	::v-deep .brand-tag{
		background-color: $primary-merchant;
	}
</style>
