login.vue 4.27 KB
<template>
	<view class="login-page">
		<!-- 公共组件-每个页面必须引入 -->
		<public-module></public-module>
		<view class="u-flex login-main">
			<view class="content">
				<view class="hello">您好,</view>
				<view class="hello-welcome">欢迎来到ThingsKit!</view>
				<view class="circleStyle"></view>
			</view>
		</view>
		<view class="f__login">
			<view class="loginPhone">
				<view class="form-row">
					<u--input border="bottom" class="input" prefixIcon="account-fill" type="text" placeholder="登录账号" v-model="loginForm.username"></u--input>
				</view>
				<view class="form-row">
					<u-input
						border="bottom"
						class="input"
						prefixIcon="lock-fill"
						suffixIconStyle="color: #909399"
						:type="passwordText"
						placeholder="请输入密码"
						v-model="loginForm.password"
					>
						<template slot="suffix">
							<u-icon @click="showPasswordMode" :name="showPassword ? showTextIcon : showPasswordIcon"></u-icon>
						</template>
					</u-input>
				</view>
				<button class="submit" size="default" @click="onSubmitFunc"><text class="text">登录</text></button>
				<view class="u-flex row-item">
					<view class="row-phone" @click="openCodeFunc">手机验证码登录</view>
					<view class="row-reset" @click="findPassrordFunc">忘记密码</view>
				</view>
				<view @click="onAuthorization" class="u-flex link-login">
					<view class="link-text">第三方账号登录</view>
					<view style="height:20rpx"></view>
					<view class="link-image"><image class="image" src="../../static/weixin.png" mode="aspectFill"></image></view>
					<view class="circleStyleBottom"></view>
				</view>
			</view>
		</view>
	</view>
</template>

<script>
import { mapMutations } from 'vuex';
import { getUserInfo } from '@/components/module/f-login/f-login.js';

export default {
	data() {
		return {
			showPasswordIcon: 'eye-off',
			showTextIcon: 'eye-fill',
			loginForm: {
				username: '',
				password: ''
			},
			showPassword: false,
			passwordText: 'password'
		};
	},
	methods: {
		...mapMutations(['setUserInfo']),
		onAuthorization(e) {
			getUserInfo(
				info => {
					console.log(info, '授权信息');
					let httpData = {
						code: this.code,
						nickName: info.nickName || '', //昵称
						avatarUrl: info.avatarUrl || '', //头像
						gender: info.gender || '' //性别 0:未知 1:男 2:女
					};
					// uni.$u.http.post('您的接口', httpData).then(res => {
					let userInfo = {
						// ...res,
						token: true //token用于判断是否登录
					};
					// this.setUserInfo(userInfo)
					// setTimeout(()=>{
					//     uni.showToast({
					//     	title: '登录成功',
					//     	icon: 'none'
					//     });
					//     this.closeLogin();
					// },100)
					// })
				},
				err => {
					// this.closeLogin();
				}
			);
		},
		onSubmitFunc() {
			if (this.loginForm.username == '' || this.loginForm.password == '') {
				return uni.$u.toast('请输入用户名或密码');
			}
			uni.$u.http
				.post('/auth/login', this.loginForm)
				.then(res => {
					if (res) {
						// 储存登录信息
						let resObj = {
							refreshToken: res.refreshToken,
							isToken: res.token
						};
						let userInfo = {
							...resObj,
							token: true //token用于判断是否登录
						};
						if (userInfo.token) {
							this.setUserInfo(userInfo);
						}
						uni.showToast({
							title: '登录成功~',
							icon: 'none'
						});
						this.saveUserInfo();
						setTimeout(() => {
							uni.navigateBack({
								delta: 1
							});
						}, 500);
						//#ifndef MP
						setTimeout(() => {
							uni.navigateTo({
								url: 'personal'
							});
						}, 500);
						//#endif
					}
				})
				.catch(e => {
					uni.$u.toast(e.data.message);
				});
		},
		saveUserInfo() {
			//储存个人信息
			uni.$u.http.get('/yt/user/me/info').then(res => {
				if (res) {
					this.setUserInfo(res);
				}
			});
		},
		openCodeFunc() {
			uni.navigateTo({
				url: './code'
			});
		},
		findPassrordFunc() {
			uni.navigateTo({
				url: './findPassword'
			});
		},
		showPasswordMode() {
			this.showPassword = !this.showPassword;
			if (!this.showPassword) {
				this.passwordText = 'password';
			} else {
				this.passwordText = 'text';
			}
		}
	}
};
</script>

<style lang="scss" scoped>
@import './static/login.scss';
</style>