<template>
	<view class="forget-wrap">
		<view class="logo">
			<u-image src="/static/logo.png" width="140" height="140" ></u-image>
		</view>
		<form class="login-form" @submit="formSubmit">
			<view class="form-item">
				<input v-model="form.phone" class="item-inp" name="phone" type="number" maxlength="11" placeholder="请输入登录手机号" />
			</view>
			<view class="form-item">
				<input v-model="form.verifyCode" class="item-inp" name="verifyCode" type="number" maxlength="6" placeholder="请输入短信验证码" />
				<button class="getcode-btn" :disabled="isDisable" @click="getCodeValidate">{{nowVal}}</button>
			</view>
			<view class="form-btn-con">
				<button class="form-btn" @click="submitFn">登录</button>
			</view>
		</form>
		<!-- 图文验证码 -->
		<uni-popup ref="imageTxtPopup" type="center">
			<popup-con title="图文验证码" :popBtn="popBtn" :changeImg="changeImg" @captchaImg="captchaVerify"></popup-con>
		</uni-popup>
	</view>
</template>

<script>
	import { isvalidPhone } from '@/libs/validate.js'
	import uniPopup from '@/components/uni-popup/uni-popup.vue'
	import popupCon from '@/components/uni-popup/popup-con.vue'
	import { loginPhone, sendVerifyCode, checkCustomerState } from '@/api/user.js'
	export default{
		components: {
			uniPopup,
			popupCon
		},
		data(){
			return{
				form: {
					phone: '',
					verifyCode: '',
					password: '',
					passwords: ''
				},
				nowVal: '获取验证码',  //  按钮显示内容
				count: '',  //  当前秒数
				timer: null,  //  倒计时
				isDisable: false,  //  是否禁止获取验证码
				popBtn: [],  //  name为操作按钮名称，color为操作按钮颜色值
				changeImg: false,  //  是否重新更换图形验证码
				randomCode: '',  //  图片验证码随机码
				wxcode: '',
				path: '/pages/index/index',
				lanuch: false,
				encode:'' // 二维码地址
			}
		},
		onLoad(opts) {
			console.log(opts,'----参数')
			this.encode=opts.encode
			// 开启分享
			uni.showShareMenu({
				withShareTicket: true,
				menus: ['shareAppMessage', 'shareTimeline']
			})
			const {
				path,
				lanuch,
				encode
			} = opts;
			// console.log(opts,'----参数')
			this.lanuch = (lanuch + '') === 'true';
		},
		onUnload() {
			uni.$off('getUserInfo')
		},
		methods: {
			//   登录
			submitFn(){
				const _this = this
				//  表单校验
				if(this.form.phone == ''){
					uni.showToast({icon: 'none',title: '请输入登录手机号'})
					return
				}
				if(!isvalidPhone(this.form.phone)){
				  uni.showToast({icon: 'none',title: '请输入正确的手机号码'})
				  return
				}
				if(this.form.verifyCode == ''){
					uni.showToast({icon: 'none',title: '请输入验证码'})
					return
				}
				// 校验短信验证码是否正确
				const obj = {}
				obj.phone = _this.form.phone
				obj.random = _this.randomCode  // 当前随机码
				obj.verifiCode = _this.form.verifyCode
				if(this.encode){
					obj.encode=this.encode
				}
				uni.login({
					provider: 'weixin',
					success(res) {
						console.log(res)
						_this.wxcode = res.code
						obj.code = res.code
						loginPhone(obj).then(res => {
						  if(res.status == 200){
							console.log(res,'login success')
							getApp().globalData.token = res.data
							_this.$u.vuex('vuex_token',res.data)
							uni.$emit("getUserInfo")
						    if (_this.path === '/pages/index/index' || _this.lanuch) {
						    	uni.reLaunch({
						    		url: _this.path
						    	});
						    } else {
						    	uni.redirectTo({
						    		url: _this.path
						    	});
						    }
						  }else{
							  uni.showToast({icon: 'none',title: res.message})
						  }
						})
					}
				})
			},
			//  单击获取验证码
			getCodeValidate(){
				if(this.form.phone){
					if(!isvalidPhone(this.form.phone)){
						uni.showToast({icon: 'none',title: '请输入正确的手机号码'})
						return
					}else{
						// 先校验手机号用户是否禁用
						checkCustomerState({phone:this.form.phone}).then(res=>{
							if(res.status == 200) {
								this.retsetCode()
								//  图文验证码
								this.$refs.imageTxtPopup.open()
							} else {
								uni.showToast({
									title: res.message,
									icon: 'none'
								})
							}
						})
					}
				}else{
					uni.showToast({icon: 'none',title: '请先输入手机号'})
				}
			},
			//  开始倒计时
			getCodeFun(){
				const TIME_COUNT = 60
				if (!this.timer) {
				  this.count = TIME_COUNT
				  this.timer = setInterval(() => {
				    if (this.count > 0 && this.count <= TIME_COUNT) {
				      this.count--
				      this.nowVal = this.count + 's后重发'
				      this.isDisable = true
				    } else {
				      this.nowVal = '重新获取验证码'
				      clearInterval(this.timer)
				      this.timer = null
				      this.isDisable = false
				    }
				  }, 1000)
				}
			},
			//  验证图片验证码
			captchaVerify(code, nowRandomCode){
				const _this = this
				let obj = {}
				obj.phone = this.form.phone
				obj.random = nowRandomCode
				obj.code = code
				//  发送短信验证码
				sendVerifyCode(obj).then(res => {
					console.log(JSON.stringify(res))
					if(res.status == 200){  //  验证码输入正确
						_this.randomCode = nowRandomCode  //  图片验证码随机码
						//  关闭   图形验证码 弹框
						_this.$refs.imageTxtPopup.close()
						//  开启倒计时
						_this.getCodeFun()
						uni.showToast({icon: 'none',title: '验证码发送成功'})
					}else {  //  验证码输入错误
						_this.retsetCode()
						uni.showToast({icon: 'none',title: res.message})
					}
				})
			},
			// 重新触发获取图片验证码
			retsetCode(){
				const _this = this
				_this.form.verifyCode = ''
				_this.randomCode = ''
				//  切换验证码重新校验
				_this.changeImg = false
				_this.$nextTick(function(){
					_this.changeImg = true
				})
			}
		}
	}
</script>
<style scoped lang="scss">
	@import './login.scss';
</style>