<template>
	<view class="page">
		<view class="wrap">
			<!-- <image class="logo" src="@/static/image/logo.png" mode="widthFix"></image> -->
			<view class="hello">幼教产业B2B产业平台登录</view>
			<template v-if="isLogin">
				<button class="btn phone" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber">
					<image src="@/static/image/phone.png" mode="widthFix"></image>
					{{ isReg ? '获取手机号' : '绑定手机'}}
				</button>
			</template>
			<template v-else>
				<view class="btn wechat" @click="login">
					快捷登录
				</view>
			</template>
			<view class="tips">如果没有账号会自动创建账号</view>
			
			<view class="agree">
				<uni-data-checkbox class="check" multiple v-model="agree" :localdata="agreeData"></uni-data-checkbox>
				<text @click="toAgreement(0)">《用户服务协议》</text>
				<text @click="toAgreement(1)">《用户隐私协议》</text>
			</view>
		</view>
		
		<uni-popup ref="popup" :is-mask-click="false">
			<view class="type-wrap">
				<view class="title-wrap">
					<view class="title">请选择注册类型</view>
					<uni-icons class="close" type="closeempty" size="20" color="#333"></uni-icons>
				</view>
				
				<view class="types">
					<view class="item" @click="toReg(5)">
						<view class="icon">
							<image class="img" src="https://occupationlab.com/images/preschoolEdu/role-icon1.png" mode="widthFix" />
						</view>
						<view class="text">我是幼儿园</view>
					</view>
					<view class="item item2" @click="toReg(6)">
						<view class="icon">
							<image class="img" src="https://occupationlab.com/images/preschoolEdu/role-icon2.png" mode="widthFix" />
						</view>
						<view class="text">我是供应商</view>
					</view>
					<view class="item item3" @click="toReg(7)">
						<view class="icon">
							<image class="img" src="https://occupationlab.com/images/preschoolEdu/role-icon3.png" mode="widthFix" />
						</view>
						<view class="text">我是个人</view>
					</view>
				</view>
			</view>
		</uni-popup>
	</view>
</template>

<script>
	import { login, userBinding, getSessionKey, kindergartenWeChatApplication, saveCertification } from '@/apis/modules/user.js'
	import WXBizDataCrypt from '@/libs/WXBizDataCrypt'
	export default {
		data() {
			return {
				agree: [],
				agreeData: [{
					text: '同意',
					value: 1
				}],
				isLogin: false, // 是否已登录
				isReg: false, // 是否是注册
				sessionKey: '',
				openid: '',
				unionid: '',
				code: '',
				phone: '',
				submiting: false,
				teamName: ''
			}
		},
		onShow() {
				// uni.setStorageSync('token', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIiwiaWF0IjoxNzAyMjg4MDEzLCJleHAiOjE3MDMxNTIwMTMsImFjY291bnRJZCI6IjEifQ.3dZSZAG7w8tSPU9DBL0VdULgkQmiZpYVzjf1qfxx5HY')
			// 先授权用户信息，再授权手机号
			this.checkLogin()
		},
		methods: {
			// 检查登录状态
			checkLogin() {
				if (uni.getStorageSync('token')) {
					this.toIndex()
				} else {
					uni.clearStorageSync()
					this.isLogin = false
				}
			},
			// 授权用户信息
			login() {
				this.isReg = false
				if (this.agree.length) {
					if (this.submiting) return false
					const that = this
					uni.getUserProfile({
						lang: 'zh_CN',
						desc: '登录',
						success: ({ userInfo }) => {
							uni.setStorageSync('userName', userInfo.nickName)
							uni.setStorageSync('avatar', userInfo.avatarUrl)
							uni.login({
								success: ({ code }) => {
									if (code) {
										this.submiting = true
										login({
											code,
											avatarUrl: userInfo.avatarUrl,
										}).then(({ data }) => {
											const { sessionKey, state } = data
											this.submiting = false
											// 用户不存在，则让用户授权手机号，直接让用户选择角色注册
											if (state === 'bind') {
												this.submiting = false
												this.code = code
												this.openid = sessionKey.openid
												this.sessionKey = sessionKey.session_key
												this.isLogin = true
												this.isReg = true
											} else {
												const e = data.sessionKey
												uni.setStorageSync('token', data.token)
												uni.setStorageSync('platformId', data.platformId)
												uni.setStorageSync('openId', e.openid)
												this.toIndex()
											}
										}).catch(e => {
											this.submiting = false
										})
									} else {
										this.submiting = false
										that.$util.errMsg('登录失败！')
									}
								}
							})			
						},
						fail(res) {
							that.$util.errMsg('登录授权失败！')
						}
					})
				} else {
					this.$util.errMsg('请先阅读勾选协议！')
				}
			},
			// 绑定手机号
			onGetPhoneNumber(e){
				if (this.submiting) return false
				const { encryptedData, iv } = e.detail
				// 获取手机号有两种方法，1.前端使用js完成；2.使用接口完成
				// const WXBizDataCrypt = require('@/libs/WXBizDataCrypt')
				const accountInfo = uni.getAccountInfoSync() // 获取小程序appid
				const pc = new WXBizDataCrypt(accountInfo.miniProgram.appId , this.sessionKey)
				const data = pc.decryptData(encryptedData , iv)
				this.submiting = true
				const phone = data.phoneNumber
				this.phone = phone
				if (this.isReg) { // 注册
					this.submiting = false
					this.$refs.popup.open('bottom')
				} else { // 登录绑定手机号
					userBinding({
						openid: this.openid,
						phone,
						unionid: this.unionid,
						platformId: 4
					}).then(res => {
						const { token, status } = res
						if (status == 10014) {
							// 这里需要再调一次uni的login，因为code用过了一次，已经失效了
							uni.login({
								success: ({ code }) => {
									getSessionKey({
										code,
									}).then(({ sessionKey }) => {
										this.sessionKey = sessionKey.session_key
										this.openid = sessionKey.openid
										this.$util.to(`../reg/reg?openid=${this.openid}&phone=${phone}`)
									}).catch(e => {})
									this.isReg = true
								}
							})
						} else {
							this.submiting = false
							uni.setStorageSync('token', token)
							this.toIndex()
						}
					}).catch(e => {
						this.submiting = false
						uni.showToast({
							title: e.message,
							icon: 'none'
						})
					})
				}
			},
			// 注册申请授权
			async toReg(platformId) {
				if (this.submiting) return false
				this.submiting = true
				try {
					const { data } = await kindergartenWeChatApplication({
						code: this.code,
						openId: this.openid,
						platformId,
						phone: this.phone
					})
					this.teamName = data.teamName
					uni.setStorageSync('token', data.token)
					uni.setStorageSync('platformId', platformId)
					uni.setStorageSync('openId', data.openId)
					uni.setStorageSync('teamId', data.teamId)
					
					// 选择的是供应商或者幼儿园，则加一个未提交的审核状态
					if (platformId === 5 || platformId === 6) {
						await saveCertification({
							openId: data.openId,
							auditStatus: 0,
							platformSource: platformId,
							companyName: this.teamName
						})
					}
					this.toIndex()
				} catch(e) {
					this.submiting = false
				}
			},
			toAgreement(id) {
				this.$util.openFile(id)
			},
			// 跳转到首页
			toIndex() {
				uni.reLaunch({
					url: '../index/index'
				})
			}
		}
	}
</script>

<style scoped lang="scss">
.page {
	min-height: calc(100vh - 170rpx);
	padding-top: 170rpx;
	background: url(@/static/image/login1.png) 0 0/175rpx auto no-repeat,
		url(@/static/image/login2.png) bottom right/123rpx auto no-repeat;
	overflow: hidden;
}
.wrap {
	position: relative;
	height: 60vh;
	padding: 214rpx 74rpx 28rpx;
	margin: 0 61rpx;
	text-align: center;
	background-color: #fff;
	border-radius: 20rpx;
	.logo {
		width: 393rpx;
	}
	.hello {
		margin: 36rpx 0;
		font-size: 28rpx;
		color: #333;
	}
	.tips {
		margin-top: 30rpx;
		font-size: 24rpx;
		color: #adadad;
		text-align: right;
	}
	.btn {
		display: flex;
		justify-content: center;
		align-items: center;
		width: 100%;
		height: 88rpx;
		font-size: 32rpx;
		border-radius: 10rpx;
		image {
			width: 50rpx;
			margin-right: 15rpx;
		}
	}
	.wechat {
		margin-bottom: 38rpx;
		color: #fff;
		background-color: #007EFF;
	}
	.phone {
		color: #007EFF;
		border: 1px solid #007EFF;
		background-color: #fff;
		image {
			width: 40rpx;
		}
	}
	.reg {
		font-size: 28rpx;
		color: #e61717;
		text-align: right;
	}
	.agree {
		position: absolute;
		bottom: 28rpx;
		left: 0%;
		display: flex;
		justify-content: center;
		align-items: center;
		width: 100%;
		text-align: center;
		font-size: 24rpx;
		color: #ccc;
		text {
			color: #007EFF;
		}
	}
	/deep/.check {
		.checklist-box {
			margin: 0;
		}
		.checkbox__inner {
			width: 40rpx !important;
			height: 40rpx !important;
			border-radius: 50% !important;
		}
		.checkbox__inner-icon {
			top: 8rpx !important;
			left: 14rpx !important;
		}
	}
}
.type-wrap {
	width: 100%;
	padding: 30rpx 30rpx 60rpx;
	background-color: #fff;
	border-top-left-radius: 16px;
	border-top-right-radius: 16px;
	box-sizing: border-box;
	.title-wrap {
		display: flex;
		justify-content: space-between;
	}
	.title {
		font-size: 28rpx;
		color: #333;
	}
	.types {
		width: 95%;
		margin: 0 auto;
		font-size: 24rpx;
		color: #fff;
		text-align: center;
	}
	.item {
		display: flex;
		align-items: center;
		height: 150rpx;
		padding: 0 50rpx;
		margin-top: 30rpx;
		border-radius: 12px;
		background: url('https://occupationlab.com/images/preschoolEdu/role-bg1.png') 0 0/100% 100% no-repeat;
		box-sizing: border-box;
	}
	.icon {
		display: inline-flex;
		justify-content: center;
		align-items: center;
		padding: 10rpx;
		margin-right: 20rpx;
		background-color: #fff7f1;
		border-radius: 50%;
	}
	.img {
		width: 80rpx;
	}
	.text {
		font-size: 24rpx;
		color: #fff;
	}
	.item2 {
		background-image: url('https://occupationlab.com/images/preschoolEdu/role-bg2.png');
	}
	.item3 {
		background: #ffb150;
		.img {
			width: 70rpx;
		}
	}
}
</style>
