<template>
	<view class="indexBox">
		<view class="navbox" v-if="userOn!=1">
			<view class="flex topIconBox">
				<image @click="navTo('/pages/index/shopTab?type=1')" class="topIcon" src="../../static/icon/shop.png"
					mode="widthFix"></image>
				<image @click="navTo('/pages/index/notice')" class="topIcon" src="../../static/icon/message.png"
					mode="widthFix">
				</image>
				<view class="topIconNum flex" v-if="notify>0">
					<text>
						{{notify}}
					</text>
				</view>
			</view>
		</view>
		<on-user :notify='notify' ref='onuser' v-if="userOn==1"></on-user>
		<no-user ref='nouser' v-if="userOn==2"></no-user>
		<!-- 引导图 -->
		<view class="alertMap" v-if='showAlertMap' @touchmove.stop.prevent="()=>{}">
			<swiper class="alertMapBox" :indicator-dots='true'>
				<swiper-item v-for="(item,index) in alertImgMapList">
					<image class="alertImgMap" :src="item.image" mode="heightFix">
					</image>
				</swiper-item>
			</swiper>
			<view class="postionbuttom" @click="alertClick">
				关闭
			</view>
		</view>
		<!-- #ifndef APP -->
		<view class="follow flex" @click="navTo('./follow')" v-if="follow==2">
			<view class="">
				请关注微信“绿津智能电动车”公众号
			</view>
			<view class="flex">
				<text>
					前往关注
				</text>
				<image class="followIcon" src="../../static/icon/next2.png" mode="widthFix"></image>
			</view>
		</view>
		<!-- #endif -->
	</view>
</template>

<script>
	import {
		mapState,
		mapMutations
	} from 'vuex';
	import {
		share
	} from '@/api/wx';
	import {
		loadIndexs,
		articleList,
		notify,
		guide_map
	} from '@/api/index.js';
	import {
		storeList,
	} from '@/api/shop.js';
	import onUser from "./indexComponents/onUser.vue"
	import noUser from "./indexComponents/noUser.vue"
	// #ifdef MP-WEIXIN
	import {
		openGetAddress
	} from '@/utils/rocessor.js';
	// #endif
	export default {
		components: {
			onUser,
			noUser
		},
		data() {
			return {
				alertImgMapIndex: 0, //引导图流程次数
				showAlertMap: false, //是否显示引导图
				userOn: 0, //加载显示页面0不加载1加载已购买车辆页面2加载未购买商品页面
				articleNum: 0, //消息数
				notifyNum: 0, //警报数
				follow: 0, //0为未查询1为关注，2为未关注
				// #ifndef APP
				loadFollow: false, //判断是否已经提示过关注公众号
				// #endif
				loadShopData: false, //是否已经加载过商家信息
				alertImgMapList: [], //引导图列表
				notifyTime: '', //定时器获取消息
				shareData: {}, //分享数据
			};
		},
		computed: {
			...mapState('user', ['hasLogin', 'userInfo']),
			...mapState(['firstUse']),
			...mapState('shop', ['shopDetail']),
			notify() {
				return this.notifyNum + this.articleNum
			}
		},
		// 切换或显示后变动tabbar颜色
		onHide() {
			console.log('隐藏');
			uni.setTabBarStyle({
				backgroundColor: '#FFFFFF'
			})
			if (this.userOn == 1) {
				this.$refs.onuser.outGetCartInfo()
			}
			// 关闭消息定时器
			clearInterval(this.notifyTime)
		},
		onLoad: function(option) {
			// #ifndef MP
			if (option.spread) {
				// 存储其他邀请人
				uni.setStorageSync('spread', option.spread);
			}
			// #endif
			// #ifdef MP
			if (option.scene) {
				// 存储小程序邀请人
				uni.setStorage({
					key: 'spread_code',
					data: option.scene
				});
			}
			// #endif
			// 初始化商家
			this.storeList({})
			// 获取定位数据
			this.getlocation();
			// 加载分享信息
			this.share()
		},
		onShow() {
			this.loadIndexs();
			// 判断是否有用户如果是则显示
			if (this.userOn == 1) {
				this.$refs.onuser.setTabbar()
				this.$refs.onuser.onStartGetCartInfo()
			}
		},
		onReady() {
			// 判断是否为用户首次加载
			if (!this.firstUse) {
				this.showAlertMap = true;
				this.guide_map();
				uni.hideTabBar();
			}
		},
		// #ifdef MP
		onShareAppMessage(options) {
			// 设置菜单中的转发按钮触发转发事件时的转发内容
			let pages = getCurrentPages(); //获取加载的页面
			let currentPage = pages[pages.length - 1]; //获取当前页面的对象
			let url = currentPage.route; //当前页面url
			let item = currentPage.options; //如果要获取url中所带的参数可以查看options
			let shareObj = {
				title: this.shareData.title, // 默认是小程序的名称(可以写slogan等)
				path: url, // 默认是当前页面，必须是以‘/’开头的完整路径
				imageUrl: this.shareData.img,
				desc: this.shareData.synopsis,
				success: function(res) {
					// 转发成功之后的回调
					if (res.errMsg == 'shareAppMessage:ok') {}
				},
				fail: function() {
					// 转发失败之后的回调
					if (res.errMsg == 'shareAppMessage:fail cancel') {
						// 用户取消转发
					} else if (res.errMsg == 'shareAppMessage:fail') {
						// 转发失败，其中 detail message 为详细失败信息
					}
				}
			};
			// 判断是否可以邀请
			if (this.userInfo.uid) {
				shareObj.path += '&spread=' + this.userInfo.uid;
			}
			return shareObj;
		},
		// #endif
		methods: {
			...mapMutations('user', ['setAddress']),
			// #ifdef APP
			...mapMutations(['setFx']),
			// #endif
			...mapMutations(['setFirstUse']),
			...mapMutations('shop', ['setShopInfo']),
			share() {
				// console.log('加载分享');
				const that = this;
				// 请求获取默认数据
				share({}).then(({
					data
				}) => {
					// console.log('分享回调', data);
					that.shareData = data.data
				});
			},
			// 获取引导图
			guide_map() {
				guide_map().then((e) => {
					this.alertImgMapList = e.data;
					console.log(e);
				}).catch((e) => {
					console.log(e);
				})
			},
			showcartAlert() {
				console.log(this.myCartList[this.chickedMyCart]);
			},
			// 首次加载点击事件
			alertClick(e) {
				// 关闭弹窗
				this.showAlertMap = false
				uni.showTabBar()
				// 设置已经加载过引导图
				this.setFirstUse(true)
			},

			// 获取经纬度
			getlocation() {
				let obj = this;
				// #ifdef H5 || APP
				uni.getLocation({
					type: 'gcj02',
					success(e) {
						obj.getlocationSetInit(e)
					},
					fail(e) {
						if(e.errCode==22){
							uni.showModal({
								title: '定位开启错误',
								content: '请查看是否已经开启定位服务',
								showCancel: false,
							});
						}
						console.log(e, 'cw');
					}
				})
				// #endif
				// #ifdef MP-WEIXIN
				openGetAddress().then((e) => {
					console.log("授权");
					wx.startLocationUpdateBackground({
						type: 'gcj02',
						success: (e) => {
							console.log(e);
							// 调用鉴定位置变化事件
							wx.onLocationChange((data) => {
								obj.getlocationSetInit(data)
							})
						},
						fail() {
							// uni.getLocation({
							// 	type: 'gcj02',
							// 	success(e) {
							// 		obj.getlocationSetInit(e)
							// 	},
							// 	fail(e) {
							// 		console.log(e, 'cw');
							// 	}
							// })
						}
					})
				})
				// #endif
			},
			// 获取经纬度完毕后回调处理
			getlocationSetInit(data) {
				const obj = this;
				try {
					console.log(data, '位置数据');
					// 保存当前经纬度
					obj.setAddress({
						latitude: data.latitude,
						longitude: data.longitude
					})
					// 判断是否已经加载过最近商家信息
					if (!obj.loadShopData) {
						obj.storeList({
							latitude: data.latitude,
							longitude: data.longitude
						})
						obj.loadShopData = true;
					}
				} catch (e) {
					console.log(e, 'cww');
				}
			},
			// 初始化加载商家数据
			storeList(data) {
				let obj = this;
				storeList(data).then((e) => {
					// console.log(e.data.list, '商家数据列表');
					// console.log(e.data.list.length > 0, '商家数据结果');
					// 保存商店数据
					if (e.data.list.length > 0) {
						obj.setShopInfo(e.data.list[0]);
						obj.$nextTick(() => {
							if (obj.userOn == 2) {
								obj.$refs.nouser.init()
							}
						})
					}
				}).catch((e) => {
					console.log(e);
				})
			},
			// 首页初始化
			loadIndexs() {
				const that = this;
				// 获取首页数据
				loadIndexs({
					store_id: that.shopDetail.id
				}).then((e) => {
					
					// #ifdef APP
					if(+e.data.app_auth==0){
						that.setFx(true)
					}
					// #endif
					
					// #ifdef H5 || MP
					// 判断是否已经关注了公众号
					if (e.data.subscribe) {
						that.follow = 1
					} else {
						// 设置已经提示过
						that.follow = 2
						// 判断是否未提示过
						if (!that.loadFollow) {
							that.loadFollow = true;
							uni.showModal({
								title: '提示',
								content: '您未关注公众号是否马上关注',
								cancelText: '取消',
								confirmText: '关注',
								success: res => {
									if (res.confirm) {
										uni.navigateTo({
											url: './follow',
										});
									}
								},
							});
						}
					}
					// #endif
					// 用户车辆大于0则显示用户车辆信息
					if (e.data.is_car > 0) {
						that.userOn = 1;
						// 完成加载后再加载方法防止节点未渲染完成无法找到节点对象
						that.$nextTick(function() {
							// 刷新用户数据
							that.$refs.onuser.loadCard();
							that.$refs.onuser.setTabbar();
						})
					} else {
						that.userOn = 2;
						that.$nextTick(function() {
							// 刷新用户数据
							that.$refs.nouser.init()
						})
					}
				}).catch((e) => {
					console.log(e);
				})
				// 判断是否已经用户登录
				if (that.hasLogin) {
					if (that.notifyTime) {
						clearInterval(that.notifyTime)
					}
					that.getNotfyNum();
					that.notifyTime = setInterval(() => {
						that.getNotfyNum();
					}, 60000)
				}
			},
			getNotfyNum() {
				const that = this;
				// 查询消息数量
				articleList({}, 1).then((e) => {
					that.articleNum = +e.data.not_read_count
				})
				notify().then((e) => {
					that.notifyNum = +e.data.not_read_count
				})
			},
			navTo(url) {
				uni.navigateTo({
					url: url
				})
			}
		},

	};
</script>

<style lang="scss">
	$paddingJg:40rpx;

	page,
	.indexBox {
		height: 0;
		min-height: 100%;
	}

	.follow {
		z-index: 9999;
		font-size: $font-base;
		color: #FFFFFF;
		padding: 20rpx 30rpx;
		line-height: 1;
		position: fixed;
		bottom: 0;
		/* #ifdef H5 */
		bottom: 50px;
		/* #endif */
		left: 0;
		right: 0;
		text-align: center;
		background-color: rgba($color: #0BBB62, $alpha: 0.75);

		.followIcon {
			width: 36rpx;
			height: 36rpx;
		}
	}

	// 弹窗引导页
	.alertMap {
		position: fixed;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
		background-color: rgba($color: #000000, $alpha: 0.75);
		text-align: center;
		z-index: 9999999;

		.postionbuttom {
			position: absolute;
			bottom: 20rpx;
			left: 150rpx;
			right: 150rpx;
			background-color: $color-green;
			border-radius: 99rpx;
			color: #FFFFFF;
			padding: 26rpx 0;

		}

		.alertMapBox {
			height: 100%;
			padding-top: 10rpx;
			padding-bottom: 120rpx;
		}

		.alertImgMap {
			height: 100%;
		}
	}

	/deep/ .itemTitleBox {
		padding: 30rpx $paddingJg;

		.itemTitle {
			font-size: 32rpx;

		}

		.itemIcon {
			width: 20rpx;
			margin-left: 10rpx;
		}

		.tager {
			font-size: 24rpx;
			font-weight: 400;
		}
	}

	.container {
		line-height: 1;
		font-weight: bold;
	}

	.navbox {
		/* #ifdef APP */
		padding-top: var(--status-bar-height);
		/* #endif */
		/* #ifdef H5 || MP */
		padding-top: 30rpx;
		/* #endif */
		padding-bottom: 30rpx;
		position: fixed;
		top: 0;
		left: 0;
		right: 0;
		background-color: #FFFFFF;
		z-index: 99;
	}

	.topIconBox {
		padding: 0 $paddingJg;
		position: relative;

		.topIconNum {
			position: absolute;
			top: -10rpx;
			right: 20rpx;
			font-size: $font-sm;
			color: #FFFFFF;
			min-width: 30rpx;
			min-height: 30rpx;
			border-radius: 100rpx;
			background-color: $color-red;
			padding: 5rpx;
			justify-content: center;
		}

		.topIcon {
			width: 45rpx;
			height: 45rpx;
		}
	}

	.greenText {
		color: $color-green;
	}
</style>
