<template>
	<view class="container login">
		<view class="login-main">
			<image class="logo" src="https://static.caimei365.com/app/img/icon/logo@2x.png" mode=""></image>
		</view>
		<view class="login-form" v-if="loginType === 0">
			<view class="login-input">
				<text class="iconfont icon-shouji"></text>
				<input
					type="number"
					v-model="codeParams.mobile"
					maxlength="11"
					class="input"
					placeholder="请输入邮箱/手机号"
					@input="handleMobile"
				/>
			</view>
			<view class="login-input">
				<text class="iconfont icon-duanxin"></text>
				<input
					type="number"
					v-model="codeParams.code"
					maxlength="6"
					class="input code"
					placeholder="请输入短信验证码"
					@input="handleSmsCode"
				/>
				<view class="code-btn" @click.stop="handleMobileCode"> {{ mobileCodeText }} </view>
			</view>
			<view class="login-input link">
				<view class="login-reg" @click.stop="navigatorRegirst('/pages/login/register-select')">免费注册</view>
				<view class="login-pwd" @click.stop="handeleLogin(1)">密码登录</view>
			</view>
		</view>
		<view class="login-form" v-if="loginType === 1">
			<view class="login-input">
				<text class="iconfont icon-shouji"></text>
				<input
					type="text"
					v-model="accountParams.mobileOrEmail"
					maxlength="30"
					class="input"
					placeholder="请输入手机号"
					@input="handleMobileOrEmail"
				/>
			</view>
			<view class="login-input">
				<text class="iconfont icon-mima"></text>
				<input
					type="text"
					v-model="accountParams.password"
					maxlength="18"
					class="input"
					placeholder="请输入密码"
					autocomplete="new-password"
					@input="handlePassword"
				/>
			</view>
			<view class="login-input link">
				<view class="login-reg" @click.stop="navigatorRegirst('/pages/login/register-select')">免费注册</view>
				<view class="login-pwd" @click.stop="handeleLogin(0)">验证码登录</view>
			</view>
		</view>
		<button class="login-btn" :disabled="isDisabled" :class="isDisabled ? 'disabled' : ''" @click="handleSubLogin">
			登录
		</button>
		<view class="login-text" v-if="loginType === 1" @click.stop="this.$api.navigateTo('/pages/login/password')"
			>忘记密码?</view
		>
		<view class="login-btn-last" @click.stop="this.$api.navigateTo(`/pages/login/logincode?data=${getOption}`)"
			>邀请码登录></view
		>
	</view>
</template>

<script>
import { mapState, mapMutations } from 'vuex'
import authorize from '@/common/config/authorize.js'
import wxLogin from '@/common/config/wxLogin.js'
export default {
	data() {
		return {
			getOption: '', //页面传递参数
			accountParams: {
				mobileOrEmail: '', //用户登录账号
				password: '', //用户登录密码
				unionId: ''
			},
			codeParams: {
				mobile: '', //用户登录手机号
				code: '',
				unionId: ''
			},
			smsCodeParams: {
				mobile: '' //用户登录手机号
			},
			loginType: 0,
			isMobileDisabled: false, //手机验证码按钮控制
			mobilCount: '', //倒计时
			mobileCodeText: '获取验证码',
			mobilTime: null,
			isDisabled: true
		}
	},
	onLoad(option) {
		this.getOption = JSON.stringify(option)
	},
	computed: {
		...mapState(['hasLogin', 'isWxAuthorize', 'isLoginType'])
	},
	methods: {
		...mapMutations(['login']),
		handleMobileOrEmail(e) {
			//账号输入
			this.accountParams.mobileOrEmail = e.detail.value
			this.handldeCheckInput()
		},
		handlePassword(e) {
			//密码输入
			this.accountParams.password = e.detail.value
			this.handldeCheckInput()
		},
		handleMobile(e) {
			//短信验证手机号输入
			this.codeParams.mobile = this.smsCodeParams.mobile = e.detail.value
			this.handldeCheckInput()
		},
		handleSmsCode(e) {
			//短信验证码输入
			this.codeParams.code = e.detail.value
			this.handldeCheckInput()
		},
		handldeCheckInput() {
			// 控制按钮按钮高亮
			if (this.loginType === 0) {
				this.isDisabled = !(this.codeParams.mobile !== '' && this.codeParams.code !== '')
			} else {
				this.isDisabled = !(this.accountParams.mobileOrEmail !== '' && this.accountParams.password !== '')
			}
		},
		handleMobileCode() {
			// 获取短信验证码
			if (this.smsCodeParams.mobile == '') {
				this.$util.msg('请输入手机号', 2000)
				return
			}
			if (!this.$reg.isMobile(this.smsCodeParams.mobile)) {
				this.$util.msg('请输入正确的手机号', 2000)
				return
			}
			this.isMobileDisabled = true
			this.userLoginCode(this.smsCodeParams)
		},
		userLoginCode(params) {
			// 获取登录短息验证码
			this.UserService.userLoginCode(params)
				.then(response => {
					this.$util.msg('获取验证码成功', 2000)
					const TIME_COUNT = 60
					if (!this.mobilTime) {
						this.mobilCount = TIME_COUNT
						this.isMobileDisabled = true
						this.mobilTime = setInterval(() => {
							if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
								this.mobilCount--
								this.mobileCodeText = this.mobilCount + 's'
							} else {
								this.isMobileDisabled = false
								clearInterval(this.mobilTime)
								this.mobilTime = null
								this.mobileCodeText = '获取验证码'
							}
						}, 1000)
					}
				})
				.catch(error => {
					this.$util.msg(error.msg, 2000)
					this.isMobileDisabled = false
				})
		},
		async handleSubLogin() {
			// 点击登录
			const _storage = await this.$api.getStorage()
			this.accountParams.unionId = this.codeParams.unionId = _storage.unionId ? _storage.unionId : ''
			if (this.loginType === 0) {
				this.userCodeLogin()
			} else {
				this.userPasswordLogin()
			}
		},
		userCodeLogin() {
			// 短信验证码登录
			this.UserService.userCodeLogin(this.codeParams).then(response => {
				this.updataeStatus(response)
			})
		},
		userPasswordLogin() {
			// 账号密码登录
			this.UserService.AorganizationLogin(this.accountParams).then(response => {
				this.updataeStatus(response)
			})
		},
		updataeStatus(data) {
			// 处理返回数据
			if (data.code === 0) {
				uni.setStorageSync('token', data.data.token)
				this.$store.commit('updateStatus', data.data)
				this.login(data.data)
				this.$api.navigateTo(
					`/pages/login/bindwechat?data=${JSON.stringify(this.getOption)}&codeType=${data.code}`
				)
			} else if (data.code === -3) {
				this.$util.modal('', '您的企业账号审核未通过，请修改资料', '前往修改', '', false, () => {
					this.$store.commit('updateStatus', data.data)
					this.$api.navigateTo('/pages/login/apply-supplier')
				})
			} else {
				this.$util.msg(data.msg, 2000)
			}
		},
		navigatorRegirst(url) {
			// 友盟埋点注册入口点击事件
			if (process.env.NODE_ENV != 'development') {
				this.$uma.trackEvent('Um_Event_Regiest', {
					Um_Key_PageName: '立即注册',
					Um_Key_SourcePage: '登录页面'
				})
			}
			this.$api.navigateTo(url)
		},
		handeleLogin(type) {
			this.loginType = type
		},
		async checkedAuthorize() {
			//是否已授权 0:为取消授权 1:为已授权 2:为未操作
			wxLogin.wxLoginQuick()
		}
	},
	onShow() {
		this.checkedAuthorize()
	}
}
</script>

<style lang="scss">
.login {
	width: 100%;
	height: auto;
	.model-warp.none {
		display: none;
	}
	.model-warp.show {
		display: block;
	}
	.login-main {
		width: 100%;
		display: flex;
		flex-direction: column;
		align-items: center;
		height: 189rpx;
		padding: 60rpx 0 40rpx 0;
		margin-bottom: 70rpx;
		.logo {
			width: 467rpx;
			height: 189rpx;
			display: block;
		}
	}
	.login-input {
		width: 600rpx;
		height: 88rpx;
		padding: 24rpx 0;
		margin: 0 auto;
		margin-bottom: 30rpx;
		background: #ffffff;
		position: relative;
		box-sizing: border-box;
		border-bottom: 1px solid #e1e1e1;
		.input {
			width: 100%;
			height: 100%;
			background: #ffffff;
			font-size: $font-size-28;
			line-height: 88rpx;
			color: #333333;
			padding-left: 100rpx;
			box-sizing: border-box;
			&.code {
				padding-right: 200rpx;
			}
		}
		.code-btn {
			width: 200rpx;
			height: 80rpx;
			position: absolute;
			right: 0;
			top: 0;
			line-height: 80rpx;
			text-align: center;
			color: $color-system;
			font-size: $font-size-26;
		}
		.iconfont {
			position: absolute;
			left: 0;
			top: 0;
			font-size: 48rpx;
			color: #333333;
			width: 100rpx;
			height: 88rpx;
			line-height: 88rpx;
			text-align: left;
		}
		&.link {
			background: #ffffff;
			margin-bottom: 40rpx;
			padding: 0 0;
			line-height: 40rpx;
			font-size: $font-size-28;
			border-bottom: none;
			.login-reg {
				float: left;
				color: $color-system;
			}
			.login-pwd {
				float: right;
				color: $text-color;
			}
		}
	}
	.login-btn {
		width: 600rpx;
		height: 88rpx;
		border-radius: 44rpx;
		font-size: $font-size-28;
		line-height: 88rpx;
		color: #ffffff;
		margin: 0 auto;
		text-align: center;
		background: $btn-confirm;
		&.disabled {
			background: #e2e2e2;
		}
	}
	.login-text {
		width: 600rpx;
		height: 88rpx;
		font-size: $font-size-28;
		line-height: 88rpx;
		color: #333333;
		margin: 0 auto;
		text-align: center;
	}
	.login-btn-last {
		width: 600rpx;
		height: 86rpx;
		font-size: $font-size-28;
		line-height: 88rpx;
		color: $color-system;
		margin: 0 auto;
		text-align: center;
		margin-top: 100rpx;
	}
	.login-tel {
		width: 702rpx;
		font-size: $font-size-28;
		line-height: 80rpx;
		margin: 0 auto;
		color: $text-color;
		text-align: center;
		margin-top: 150rpx;
	}
	.model-authorization {
		width: 100%;
		height: 100%;
		position: fixed;
		top: 0;
		left: 0;
		z-index: 999;
		.authorization {
			width: 518rpx;
			height: 320rpx;
			position: absolute;
			background: rgba(255, 255, 255, 0.7);
			left: 0;
			right: 0;
			bottom: 0;
			top: 0;
			margin: auto;
			.to-btn {
				position: absolute;
				top: 0;
				left: 0;
				right: 0;
				bottom: 0;
				margin: auto;
				width: 70%;
				height: 88rpx;
				font-size: $font-size-28;
				line-height: 88rpx;
				color: #ffffff;
				text-align: center;
				border-radius: 44rpx;
			}
		}
	}
}
</style>
