<template>
	<view class="page">
		<view class="line">
			<view class="label">邮箱</view>
			<input type="text" v-model.trim="form.email" placeholder="请填写你要绑定的邮箱" />
		</view>
		<view class="line code-wrap not-bd">
			<view class="label">验证码</view>
			<input class="code" type="number" v-model.trim="form.code" placeholder="请填写验证码" maxlength="6" />
			<view class="send-code" @click="sendCode" :disabled="codeDisabled">{{ btnText }}</view>
		</view>
		<view class="btn" @click="submit">确认</view>
	</view>
</template>

<script>
	import { bindPhoneOrEmail, sendPhoneOrEmailCode } from '@/apis/modules/user.js'
	export default {
		data() {
			return {
				userId: uni.getStorageSync('userId'),
				form: {
					email: '',
					code: ''
				},
				emailOpener: '',
				codeDisabled: false,
				phoneTimer: null,
				btnText: '获取验证码',
			}
		},
		onShow() {
			
		},
		methods: {
			// 发送验证码
			sendCode() {
				const { email } = this.form
				if (!email) return this.$util.errMsg('请输入邮箱')
				if (!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email) && !/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email)) return this.$util.errMsg('请输入正确的邮箱')
				sendPhoneOrEmailCode({
					userId: this.userId,
					email,
					types: 1,
				}).then(res => {
					if (res.message.opener) {
						this.phoneCountdown()
						this.emailOpener = res.message.opener
					}
				}).catch(res => {})
			},
			// 验证码倒计时
			phoneCountdown() {
			  let count = 60
			  if (!this.phoneTimer) {
				this.codeDisabled = true
				this.phoneTimer = setInterval(() => {
				  if (count > 0) {
					count--
					this.btnText = `${count}秒后重试`
				  } else {
					this.codeDisabled = false
					clearInterval(this.phoneTimer)
					this.phoneTimer = null
					this.btnText = `发送验证码`
				  }
				}, 1000)
			  }
			},
			// 提交
			submit() {
				const { email, code } = this.form
				if (!email) return this.$util.errMsg('请输入邮箱')
				if (!code) return this.$util.errMsg('请输入验证码')
				bindPhoneOrEmail({
					userId: this.userId,
					email,
					types: 1,
					code,
					opener: this.emailOpener,
				}).then(res => {
					this.$util.sucMsg('修改成功！')
					setTimeout(() => {
						uni.navigateBack()
					}, 1500)
				}).catch(res => {})
			}
		}
	}
</script>

<style scoped lang="scss">
.page {
	min-height: 100%;
	padding: 20px;
	background-color: #fff;
	box-sizing: border-box;
	.line {
		display: flex;
		align-items: center;
		padding: 20rpx 0;
		margin-bottom: 10rpx;
		&:not(.not-bd) {
			border-bottom: 1px solid #f3f3f3;
		}
	}
	.label {
		width: 200rpx;
		font-size: 28rpx;
		color: #565656;
	}
	input {
		font-size: 28rpx;
		color: #333;
	}
	
	.code {
		flex: 1;
	}
	.send-code {
		margin-left: 20rpx;
		color: #4386ff;
		font-size: 24rpx;
		line-height: 36px;
	}
	
	.btn {
		width: 300rpx;
		height: 60rpx;
		margin: 50rpx auto 0;
		font-size: 30rpx;
		text-align: center;
		color: #fff;
		line-height: 60rpx;
		background-color: #007EFF;
		border-radius: 40rpx;
	}
}
</style>
